老师_start中不加定时器,为什么会出现无动画现象?

老师_start中不加定时器,为什么会出现无动画现象?

无动画现象是不是因为transform先进行改变了,而transition 是后设置的所导致的?

// 形变类

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);

}

// 添加动画

_add(type, value, time = this.defaultTime) {

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

return this;

}

// 添加完成 可以开始动了

done() {

this._start();

}

// 开始动 从队列中把动画一个个拿出来

_start() {

if (!this._queue.length) return;


// 先进先出

// setTimeout(() => {

const info = this._queue.shift();

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

// }, 0);

}

_getTransform({ time, value, type }) {

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('.ball');


tf

.translate('200px, 200px')


.done();


// console.log(tf);


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,理解的没有问题,display属性值改变没有过渡效果。或者可以使用opacity属性值从0变化到1实现隐藏显示的效果。

祝学习愉快!

好帮手慕慕子 2020-04-02 15:48:07

同学你好, 是指如下所示的的定时器吗

http://img1.sycdn.imooc.com//climg/5e85977c096f09fd13020402.jpg

如果是这样的话,老师测试同学粘贴的代码,因为只添加了一个位移的动画,加不加定时器都是有动画效果的,从初始位置移动到(200,200)的位置。同学可以清除浏览器缓存再测试下。

如果不是指这里的话,可以详细描述下具体指的是哪里,便于帮助同学准确的定位与解决问题。

祝学习愉快~

  • 提问者 慕尼黑5122342 #1
    <!DOCTYPE html> <html> <head> <title></title> <style type="text/css"> div{ width:100px; height:100px; background:red; transition:all 1s; } </style> </head> <body> <div id="div"></div> <button id="button">按钮</button> <script type="text/javascript"> let div=document.getElementById('div'); let button=document.getElementById('button'); button.onclick=function (){ div.style.display='none'; div.style.background='yellow'; setTimeout(function (){ // div.style.transform = 'scale(1, 1) translate(0, 0)'; div.style.display='block'; // div.style.transform = 'scale(0.1, 0.1) translate(0%, 100%)'; div.style.background='blue'; }); }; </script> </body> </html> 为什么没有过渡动画效果。如果把div.style.display='none';去掉,就又有动画效果?
    2020-04-04 19:08:53
  • 提问者 慕尼黑5122342 #2
    这是因为transition过渡对display:none|block;的显示和隐藏是无效的对吧
    2020-04-04 19:33:56
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师