<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>时间轴对象的测试</title>
<style type="text/css">
div {
width: 100px;
height: 100px;
background: pink;
}
.change1 {
width: 300px;
background: blue;
/* 仅仅width过渡变化 */
transition: all 3s;
}
.change2 {
height: 300px;
background: yellow;
transform: translate(100px, 100px);
transition: all 3s;
}
</style>
</head>
<body>
<h5>效果为:在2s之后开始执行change1,用时3s,执行过后<br>
即在5s后执行change2,用时3s,整个动画用时8s
</h5>
<div id="demo" class=""></div>
<script type="text/javascript">
var TimeLine = function() {
this.order = [];
this.add = function(timeout, func, log) {
this.order.push({
timeout: timeout,
func: func,
log: log
})
this.start = function(ff) {
for (s in this.order) {
(function(me) {
var fn = me.func;
var timeout = me.timeout;
var log = me.log;
timeout = Math.max(timeout - (ff || 0), 0);
setTimeout(fn, timeout)
setTimeout(function() {
console.log('time=>', timeout, 'log=》', log)
}, timeout)
})(this.order[s])
}
console.log(this.order)
}
}
}
var demo = new TimeLine();
var id=document.getElementById("demo")
demo.add(2000,function(){
id.className="change1";
},'这是是第一个动画,下面是第二个动画')
demo.add(5000,function(){
id.classList.add("change2");
})
demo.start();
</script>
</body>
</html>
进阶,简化代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>时间轴对象的封装</title>
<style type="text/css">
div {
width: 100px;
height: 100px;
background: pink;
}
.change1 {
width: 300px;
background: blue;
transition: all 3s;
}
.change2 {
height: 300px;
background: yellow;
transform: translate(100px, 100px);
transition: all 3s;
}
</style>
</head>
<body>
<h3>效果为:在2s之后开始执行change1,用时3s,执行过后<br>
即在5s后执行change2,用时3s,整个动画用时8s<br>
也可以跳转到指定时间开始执行
</h3>
<div id="demo" class=""></div>
<script type="text/javascript">
function TimeLine(obj) {
obj.fn = obj.fn || function() {};
obj.skipTime = obj.skipTime || 0;
obj.time = Math.max(obj.time - obj.skipTime) || 0;
obj.comment = obj.comment || '注释';
var arr = [];
arr.push({
time: obj.time,
fn: obj.fn,
comment: obj.comment,
skipTime: obj.skipTime
})
for (var key in arr) {
(function() {
setTimeout(arr[key].fn, arr[key].time)
setTimeout(function() {
console.log('时间在' + arr[key].time + '秒开始播放;触发的函数为 \n'
+ arr[key].fn + ';直接跳转到' + arr[key].skipTime +
'秒;注释:' + arr[key].comment)
}, arr[key].time)
})(arr[key])
}
}
TimeLine({
time: 2000,
fn: function() {
demo.classList.add("change1");
},
comment: '这是第一个过程的动画'
})
TimeLine({
time: 5000,
fn: function() {
demo.classList.add("change2");
},
comment: '这是第二个过程的动画'
})
</script>
</body>
</html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了