setTimeout(function () {
lock = false;
}, 2000)
};
=============================================================
-
定时器是window对象的一个方法,相当于定时闹钟,每个固定的时间响一次
-
语法:window.setInterval(func, interval);
-
第一个参数:每次执行的函数,可以使匿名函数定义,或者是一个函数名的引用,注意不要加()。
-
第二个参数:时间间隔,以毫秒计数,1000毫秒等于1秒
-
功能:每隔一个指定的时间,周期性的执行一个函数
清除定时器
-
window 对象的一个方法
-
语法:window.clearInterval(timer)
-
参数:指定的定时器变量名引用
-
功能:清除指定的定时器
-
注意:清除的定时器需要存储到一个变量中,便于后期清除调用
==============================================================
-
是一种视觉暂留效果,只要元素变化过程时间够短,给人眼造成的效果就是一个运动的效果,人眼的视觉残留的时间0.1-0.4秒之间
-
制作方法:通过定时器,实现每隔一个极短的时间(50-100毫秒左右)执行函数,函数内部让运动的属性值发生变化
提高运动速度的方法
-
缩短时间间隔,增加了每秒移动的次数
-
加大步长,让每一次走的步长增加
==================================================================
-
将定时器的开始和停止过程书写在不同的时间函数内部,容易出现用户错误点击情况
-
多次点击开始,会造成加速
-
多次点击开始,不能够在停止
设表先关方法
- 每次开启新定时器之前,都清除一次前面的定时器
拉钟停表
-
需求:要求元素走到指定位置停止,例如让元素停止在500px的位置
-
问题:如果步长设置的不合理,停止的位置可能不是正好在500处
-
解决方法:在定时器内部每次都要判断是否走到了终点,要不要停止定时器;如果走到了终点,强行拉到终点,并停止定时器
步标整除
-
需求:在规定时间内让元素走到规定的结束位置,时间间隔可以更改
-
例如:让元素在2秒钟内,left属性从 0 走到 500px
-
解决方法:
-
总距离 == 步长 * 次数
-
时间间隔自定义,总时长固定
-
求出总次数 = 总时间 / 时间间隔
-
定义计数器变量,每执行一次定时器函数增加计数1,直到执行达到总次数,停止定时器
// 获取元素
var start = document.getElementById(“start”);
var box = document.getElementById(“box”);
// 已知 开始位置、结束位置、总时长、时间间隔
// 总距离 = 步长 * 总次数
// 总距离 = 结束位置 - 起始位置 ,已知可以求出来
// 总次数 = 总时长 / 时间间隔 ,已知可以求出来
// 步长 = (结束位置 - 起始位置) / (总时长 / 时间间隔)
// 信号量 ,也相当于初始值
var nowLeft = 200;
// 结束位置
var endLeft = 500;
// 总时长
var time = 1000;
// 时间间隔
var interval = 50;
// 运算总次数
var maxcount = time / interval;
// 运算出每一次的步长
var step = (endLeft - nowLeft) / maxcount;
// 定义一个次数的累加器
var count = 0;
// 准备条件结束可以开始定时器了
var timer;
start.onclick = function () {
timer = setInterval(function () {
// 让元素的属性每一次变化一个步长
nowLeft += step;
// 每运动一次让次数累加器加 1
count++;
// 停止定时器
if (count >= maxcount) {
// 拉终停表
nowLeft = endLeft;
clearInterval(timer);
}
// 给属性赋值
box.style.left = nowLeft + “px”;
},interval);
};
================================================================
but.onclick = function () {
animate(box, {
left: 400,
width: 300,
height: 200,
opacity: 1
}, 2000);
}
function animate(ele, end, time) {
// 起始位置的对象,需要先定义一个空对象
var now = {};
// end 对象遍历,获取属性名
for (var k in end) {
now[k] = parseFloat(window.getComputedStyle(ele)[k]);
}
// 自定义时间间隔
var interval = 50;
// 计算总次数
var maxCount = time / interval;
// 次数累加器
var count = 0;
// 对象中的每个属性都有自己的步长,也可以放到一个步长对象中
var step = {};
// 遍历结束对象,计算每个属性的步长
for (var k in end) {
step[k] = (end[k] - now[k]) / maxCount
}
// 定时器
var timer;
timer = setInterval(function () {
// 每个属性发生变化,赋值给now对象中的每一项
for (var k in end) {
now[k] += step[k];
};
// 累计运动次数
count++;
// 判断定时器是否结束
if (count >= maxCount) {
// 拉终停表
for (var k in end) {
now[k] = end[k];
};
clearInterval(timer);
}
// 赋值给对应元素对象属性
for (var k in now) {
if (k === ‘opacity’) {
ele.style[k] = now[k]
} else {
ele.style[k] = now[k] + “px”
}
};
}, interval)
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。


既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
你要问前端开发难不难,我就得说计算机领域里常说的一句话,这句话就是『难的不会,会的不难』,对于不熟悉某领域技术的人来说,因为不了解所以产生神秘感,神秘感就会让人感觉很难,也就是『难的不会』;当学会这项技术之后,知道什么什么技术能做到什么做不到,只是做起来花多少时间的问题而已,没啥难的,所以就是『会的不难』。
我特地针对初学者整理一套前端学习资料分享给大家,戳这里即可领取

)**
最后
你要问前端开发难不难,我就得说计算机领域里常说的一句话,这句话就是『难的不会,会的不难』,对于不熟悉某领域技术的人来说,因为不了解所以产生神秘感,神秘感就会让人感觉很难,也就是『难的不会』;当学会这项技术之后,知道什么什么技术能做到什么做不到,只是做起来花多少时间的问题而已,没啥难的,所以就是『会的不难』。
我特地针对初学者整理一套前端学习资料分享给大家,戳这里即可领取
[外链图片转存中…(img-0oUMLjvo-1712867052458)]

本文介绍了JavaScript中的定时器(setInterval)和clearInterval方法,以及如何利用它们实现简单的元素运动和控制动画速度。还讨论了清除定时器的问题及优化策略,如步长调整和先关闭旧定时器。同时提到了前端开发学习资源的重要性,强调了难的不会,会的不难的开发理念。
959

被折叠的 条评论
为什么被折叠?



