BOM你真的了解吗?

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

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前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

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

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

你要问前端开发难不难,我就得说计算机领域里常说的一句话,这句话就是『难的不会,会的不难』,对于不熟悉某领域技术的人来说,因为不了解所以产生神秘感,神秘感就会让人感觉很难,也就是『难的不会』;当学会这项技术之后,知道什么什么技术能做到什么做不到,只是做起来花多少时间的问题而已,没啥难的,所以就是『会的不难』。

我特地针对初学者整理一套前端学习资料分享给大家,戳这里即可领取

前端路线图

)**

最后

你要问前端开发难不难,我就得说计算机领域里常说的一句话,这句话就是『难的不会,会的不难』,对于不熟悉某领域技术的人来说,因为不了解所以产生神秘感,神秘感就会让人感觉很难,也就是『难的不会』;当学会这项技术之后,知道什么什么技术能做到什么做不到,只是做起来花多少时间的问题而已,没啥难的,所以就是『会的不难』。

我特地针对初学者整理一套前端学习资料分享给大家,戳这里即可领取

[外链图片转存中…(img-0oUMLjvo-1712867052458)]

vue.js的36个技巧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值