加了定时器刷新还是会出现动画时有时无的现象

加了定时器刷新还是会出现动画时有时无的现象

# 具体遇到的问题


# 报错信息的截图

# 相关课程内容截图

# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>封装形变类</title>
<style type="text/css">
.ball{
background: linear-gradient(#ff9b9b 50%,#106dbb 50%);
width:150px;
height: 150px;
border-radius: 50%;
}
</style>
</head>
<body>
<div class="ball"></div>

<script type="text/javascript" src="index.js"></script>
</body>
</html>
​class Transform {
_queue = [];
constructor(selector) {
this.el = document.querySelector(selector);
this.el.style.transition = `all ${ .3 }s`;
// this._queue = [];
}
// 位移
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() {
setTimeout(() => {
const info = this._queue.shift();

this.el.style.transform = this._getTransform(info);
}, 0);

const info = this._queue.shift();

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

_getTransform({
time,
value,
type
}) {
switch (type) {
case 'translate':
return `translate(${ value })`;
}
}

}
const tf = new Transform('.ball');

tf.translate(`100px,100px`)
.scale(2)
.done()

console.log(tf);


正在回答

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

1回答

同学你好,老师直接拿同学的代码测试,刷新多次,都是没有动画的,没有出现动画时有时无的情况。这是因为如下代码重复了, this._queue.shift()执行两次,那么就会变成一个空数组,里面没有动画了。把它注释了,就会有动画了:

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

祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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