加了定时器刷新还是会出现动画时有时无的现象
# 具体遇到的问题
# 报错信息的截图
# 相关课程内容截图
# 尝试过的解决思路和结果
# 粘贴全部相关代码,切记添加代码注释(请勿截图)
<!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);
13
收起
正在回答
1回答
同学你好,老师直接拿同学的代码测试,刷新多次,都是没有动画的,没有出现动画时有时无的情况。这是因为如下代码重复了, this._queue.shift()执行两次,那么就会变成一个空数组,里面没有动画了。把它注释了,就会有动画了:
祝学习愉快~
4.Vue与React高级框架开发
- 参与学习 人
- 提交作业 239 份
- 解答问题 10739 个
本阶段带你深入前端开发的肌理,通过ES6基础知识和前端主流高级框架的学习,助你快速构建企业级移动webAPP应用,进入职场的终极battle
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星