为什么没有用继承,却实现了位移的同时,放大旋转

来源:6-4 封装形变类(4)

at_

2019-12-06 11:19:40

class Transform{

constructor(Selector){

this.el = document.querySelector(Selector);

this._queue = [];

this._transform = {

rotate: '',

translate: '',

scale: ''

};

this.defaultTime = Transform.config.defaultTime;

this.el.style.transition = `all ${.3}s `;

}

translate(value,time){

return this._add('translate',value,time)

}

scale(value,time){

return this._add('scale',value,time)

}

rotate(value,time){

return this._add('rotate',value,time)

}

_add(type, value ,time){

this._queue.push({type,value,time});

return this;

}

done(){

this._start(); 

}

_start(){

if(!this._queue.length) return;

setTimeout( () =>{

const info = this._queue.shift();

// console.log(this._getTransform(info));

// console.log(`all ${info.time / 1000}s`);

this.el.style.transition = `all ${info.time/1000 }s `;

this.el.style.transform = this._getTransform(info);

setTimeout( ()=>{

this._start();

}, info.time);

},0);

}

_getTransform({type,value,time}){

const _tsf = this._transform;  

switch(type){

case 'translate': 

_tsf.translate = `translate(${value})`;

break;

case 'scale': 

_tsf.scale = `scale(${value})`;

break;

case 'rotate': 

_tsf.rotate = `rotate(${value}deg)`;

}

return `${_tsf.translate} ${_tsf.scale} ${_tsf.rotate}`;

}

}

Transform.config = {

defaultTime: 300

};

Transform.config.defaultTime = 1000;

const tf = new Transform('.box');

tf

.translate('100px,100px')

.scale(2)

.rotate(90,3000)

.done();

console.log(tf);


写回答

2回答

好帮手慕慕子

2019-12-06

同学你好,如下所示, 因为后面调用translate等方法的时候值传入了值,没有设置时间,而且同学的代码中_add方法没有设置time默认值,所以是同时进行效果的改变。添加上就好了,示例:

http://img.mukewang.com/climg/5dea2a1a094b0c9e06300132.jpg

如果帮助到了你,欢迎采纳,祝学习愉快~

0

好帮手慕慕子

2019-12-06

同学你好,如下所示,位移,缩放,旋转方法内部调用了_add方法,每次调用 _add方法返回this指向当前的实例对象。

http://img.mukewang.com/climg/5de9ecf10948e33808430385.jpg

所以,后面可以使用链式调用的书写方式调用方法,实现效果

http://img.mukewang.com/climg/5de9ed55095821d604250220.jpg

如果帮助到了你,欢迎采纳,祝学习愉快~

0
ht_
h 老师写的代码不是同步的,而是先位移-放缩-旋转,没看到代码有什么不同
h019-12-06
共1条回复

0 学习 · 10739 问题

查看课程