首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript各种定时器总结

制作动画少不了使用setTimeout和setInterval,特别是一个经典情景,就是一个元素本来display是none。...很简单一例子,如果使用setInterval,里面的回调函数中,需要执行比较长事件,例如setInterval一个1秒钟时间,然后callback中需要执行3秒,那么下一个setInterval并不会等待上一个...setIntervalcallback执行完毕才执行,这样就有可能出现同一触发多次setIntervalcallback,然后导致页面的奇怪现象。...当页面激活时候,动画就从上一次停止地方继续执行,非常有效节省了CPU开销。...函数节流:因为requestAnimationFrame是固定以屏幕刷新频率去触发,所以不会存在在高频事件中重复触发函数情况。

57420

提高JavaScript动画性能

因此,如果您避免对触发布局或绘制操作CSS属性进行动画化,并坚持使用诸如转换和不透明度之类属性,那么您将看到动画性能显著提高,因为现代浏览器在优化这些属性方面做得非常出色。...更改仅触发复合操作CSS属性是优化web动画性能一个简单而有效步骤。...将处理诸如滚动、调整大小、鼠标事件事件代码与使用requestAnimationFrame()处理屏幕更新代码分离开来,是优化动画代码以提高性能好方法。...对于不需要访问DOM复杂JavaScript操作,可以考虑使用Web worker。工作线程执行任务不会影响用户界面。...例如,使用性能工具记录web页面将使您了解该页面上性能瓶颈: ? 点击录制按钮,几秒钟后停止录制: ? 此时,您应该有大量数据来帮助您分析页面的性能: ?

2K20
您找到你想要的搜索结果了吗?
是的
没有找到

jQuery (二)

使用jQuery处理事件 事件处理 一个栗子,单击p背景变成灰色 由于es6箭头函数不支持this绑定,所以无法使用箭头函数,只能使用匿名函数 html <!...'gray'); }); 效果 [20180821_175532.gif] 或者使用第二个参数,添加相关属性,完成事件相关触发 // 单击任意p,使其背景变成灰色 $('', { src...)}); // 触发事件,将会添加额外属性给事件对象,如果事件以前被监听,将会被直接触发 $('#button1').trigger({ type:'click', synthetic:true }...实时事件 实时事件为,如果先前将所有a元素绑定了一个事件,接着在创建一个新a节点,如果此时触发事件,则新创建a元素不会触发事件,因为绑定不是实时事件。...,top接受两个可选参数,如果第一个为true将会清楚当前队列,否则队列将不会被清除,第二个为是否保留当前值,如果未true将会变化到终值,如果为false将会保持当前值,然后开始执行动画 // 当属性悬浮在图片上

9.3K30

Window对象

stop(): 停止页面载入,相当于点击了浏览器停止按钮。 Window对象事件 加载相关 onbeforeunload: 该事件在即将离开页面(刷新或关闭)触发。...onload: 文档加载完成后触发。 onunload: 当窗口卸载其内容和资源触发。 onerror: 当发生JavaScript运行时错误与资源加载失败触发。...动画相关 onanimationcancel: 当CSS动画意外中止,即在任何时候它停止运行而不发送animationend事件将发送此事件,例如当animation-name被改变,动画被删除等...onanimationiteration: 此事件将会在CSS动画到达每次迭代结束触发,当通过执行最后一个动画步骤完成对动画指令序列单次传递完成,迭代结束。...打印相关 onbeforeprint: 该事件在页面即将开始打印触发 onafterprint: 该事件在页面已经开始打印或者打印窗口已经关闭触发

2.4K20

「JavaScript 」动画基础 - 01

触发事件是鼠标按下mousedown,鼠标移动mousemove 鼠标松开 mouseup 拖拽过程: 鼠标移动过程中,获得最新值赋值给模态框left和top值,这样模态框可以跟着鼠标走了 鼠标按下触发事件源是最上面一行...页面被卷去头部 如果浏览器高(或宽)度不足以显示整个页面,会自动出现滚动条。当滚动条向下滚动,页面上面被隐藏掉高度,我们就称为页面被卷去头部。滚动条在滚动时会触发onscroll事件。...window.pageXOffset 获得 1.5. mouseenter 和mouseover区别 当鼠标移动到元素上就会触发mouseenter 事件 类似 mouseover,它们两者之间差别是...mouseenter 只会经过自身盒子触发 之所以这样,就是因为mouseenter不会冒泡 跟mouseenter搭配鼠标离开 mouseleave 同样不会冒泡 1.6....动画函数给不同元素记录不同定时器 如果多个元素都使用这个动画函数,每次都要var 声明定时器。我们可以给不同元素使用不同定时器(自己专门用自己定时器)。

49010

jquery事件&动画

click", "click.name1", 或者 ".myname" 参数2selector:一个选择器字符串,用于过滤和选中能触发事件后代元素 参数3data:当一个事件触发,要传递给事件处理函数...event.data 参数4handler(eventObject):事件触发,执行函数 举个例子 html代码 1...,所谓命名空间就相当于给这个事件命名,我删除事件时候就只删除对应这个,不会误伤这个事件类型其他事件 $('.box li').on('click.hello', function(){ var...3、.finish 停止当前动画,并清除动画队列中所有未完成动画,最终展示动画队列最后一帧最终状态 4、.stop( [clearQueue ] [, jumpToEnd ] ) 停止当前正在运行动画...,并清除未执行动画队列,并且展现当前执行动画最后一帧最终状态 .stop(false,false) //默认,停止当前动画,继续以下动画 .stop(true,false) //停止当前动画,并清除未执行动画队列

1.7K20

【JS】1676- 重学 JavaScript API - Page Visibility API

方法 visibilitychange:当页面的可见性状态发生变化时触发事件。...游戏应用程序 如果我们正在开发一个基于 Web 游戏,就可以使用 Page Visibility API 暂停和恢复游戏,以便玩家能够在离开游戏不会丢失任何进度。...如果需要兼容不支持 Page Visibility API 浏览器,我们可以使用 Polyfill 或者其他检测方法来实现。...根据页面的可见性来控制动画执行 在页面中创建小球,其位置随着时间推移而变化。使用 Page Visibility API,可以在页面不可见停止动画,并在页面重新变为可见恢复动画。 <!...页面可见性通过 visibilitychange 事件进行监测,当页面从可见到不可见停止动画,反之则恢复动画

14620

前端成神之路-WebAPIs05

此时可以使用 pageshow事件触发。,这个事件在页面显示触发,无论页面是否来自缓存。...在重新加载页面中,pageshow会在load事件触发触发;根据事件对象中persisted来判断是否是缓存中页面触发pageshow事件 注意这个事件给window添加。...页面被卷去头部 如果浏览器高(或宽)度不足以显示整个页面,会自动出现滚动条。当滚动条向下滚动,页面上面被隐藏掉高度,我们就称为页面被卷去头部。滚动条在滚动时会触发 onscroll事件。...window.pageXOffset 获得 1.5. mouseenter 和mouseover区别 当鼠标移动到元素上就会触发mouseenter 事件 类似 mouseover,它们两者之间差别是...动画函数给不同元素记录不同定时器 如果多个元素都使用这个动画函数,每次都要var 声明定时器。我们可以给不同元素使用不同定时器(自己专门用自己定时器)。

1.5K10

【前端动画】实现动画6种方式

在很多移动端动画性能优化时,一般使用16ms来进行节流处理连续触发浏览器事件。例如对touchmove、scroll事件进行节流等。通过这种方式减少持续事件触发频率,可以大大提升动画流畅性。...但是,另一方面元素较多且复杂动画使用svg渲染会比较慢,而且SVG格式动画绘制方式必须让内容嵌入到HTML中使用。CSS3出现让svg应用变得相对少了。...CSS3 transition transition是过度动画。但是transition并不能实现独立动画,只能在某个标签元素样式或状态改变进行平滑动画效果过渡,而不是马上改变。...大多数浏览器都会对重绘操作加以限制,不超过显示器重绘频率,因为即使超过这个频率用户体验也不会提升。 因此,最平滑动画最佳循环间隔是 1000ms/60 ,约16ms。...为它们传入第二个参数,实际上只是指定了把动画代码添加到浏览器UI线程队列中以等待执行时间。如果队列前面已经加入其他任务,那动画代码就要等前面的任务完成后再执行。

37410

Web高性能动画及渲染原理(1)CSS动画和JS动画

首先通过JS脚本来修改指定元素样式或是类名是可行,另一种方式就是利用带有交互事件属性CSS伪类(例如:hover或是:focus),当对应事件触发,新样式就会作用于指定元素,这种特性也可以理解为...,这也就不难理解为什么首屏渲染transition不会生效了。...),你可以自由地实现动画暂停或者恢复,又或者是在动画执行到某一特定时刻触发其他逻辑,很明显,JS动画在细节控制能力、过程管理能力以及多对象管理能力上都要比纯CSS动画更强大,但随之而来复杂性也是必须要付出代价...,当用户希望某些自定义方法可以在特定时刻运行时,就可以使用velocity中事件钩子将自定义方法和动画执行关联起来,很明显,这种机制存在增加了动画交互和感知性,开发者可以在各个感兴趣阶段钩入自己期望运行函数...velocity.js中提供事件钩子包括:begin(在动画开始触发),complete(动画结束触发),progress(动画过程中触发),progress钩子每次执行时可以获取到动画执行情况细节

7.5K30

JavaScript笔记(22)

mouseover和mouseenter区别 当鼠标移动到元素上就会触发mouseenter事件 mouseover: 鼠标经过自身盒子会触发,经过子盒子还会触发(冒泡). mouseenter:...只有经过自身盒子才会触发(不会冒泡) mouseenter搭配鼠标离开mouseleave也不会冒泡 接下来学习新知识:动画 动画 动画实现原理 核心原理: 通过定时器setInterval()不断移动盒子...我现在做一个试试看,让盒子向右移动,当盒子距离左侧大于600px时候就停止: 但是我们页面中可能会有很多地方都有动画,如果我们一个一个写那就会非常麻烦,所以我们可以考虑将动画函数封装起来...现在我们怎么点都不会影响效果了 到现在为止,我们动画都只是匀速,那么怎么才能够像CSS3一样变化运动速度呢?...回调函数位置: 定时器结束位置 为了方便使用,我们直接将函数封装在文件中 动画函数封装到单独JS文件中 因为以后经常使用这个动画函数,可以单独封装到一个JS文件里面,使用时候引用这个文件即可

65720

动画和实战打开 React Hooks(一):useState 和 useEffect

当我们第一次调用组件函数触发初次渲染;然后随着 props 改变,便会重新调用该组件函数,触发重渲染。 你也许会纳闷,动画里面为啥要并排画三个一样组件呢?...如果你觉得匪夷所思嘛……来简单解释一下: 每次渲染相互独立,因此每次渲染组件中状态、事件处理函数等等都是独立或者说只属于所在那一次渲染 我们在 count 为 3 时候触发了 handleAlertClick...OK,听上去还是很抽象,再来看看下面的动画吧: 动画中有以下需要注意点: 每个 Effect 必然在渲染之后执行,因此不会阻塞渲染,提高了性能 在运行每个 Effect 之前,运行前一次渲染 Effect...再来看看 useEffect 第二个参数:deps (依赖数组)。从上面的演示动画中可以看出,React 会在每次渲染后都运行 Effect。...实际效果动画如下: 可以看到,后面的所有重渲染都不会触发 Effect 执行;在组件销毁运行 Effect Cleanup 函数。

2.5K20

jQuery

选取多个元素 交集选择器 $s(“Ii.current”) 交集元素 2.1.2 层级选择器 名称 用法 描述 子代选择器 $(“ul>li”); 使用>号,获取亲儿子层级元素;注意,并不会获取孙子层级元素...3.2 jQuery效果 注意: 动画或者效果一旦触发就会执行,如果多次触发,就造成多个动画或者效果排队执行。...停止动画排队:stop() ; 这样就可以在动画执行时候停止动画 3.2.1 显示隐藏 显示隐藏:show() / hide() / toggle() ; 关于参数 参数都可以省略,无动画直接显示...第一个参数speed : 三种预定速度(show,normal,fast)或者动画时长毫秒数 第二个参数 easing:指定切换效果,默认是’swing’ 还可设为’linear’ 第三个参数...,第二个是鼠标移出触发函数 只写一个参数,鼠标移入移出都会触发它 4.1 jQuery属性操作 4.1.1 元素固有属性值 prop() 获取元素本身自带属性,有利于对表单操作 表单属性

8.4K10

Vue3 | 动画专题

也是可以正常运行 颜色过渡和位移 动画 结合 控制组合动画时长 以某一类型动画时间为准 控制组合动画时长 以自定义时长为准 分别 统一 出入场动画延 禁用CSS动画使用JS动画 最基本 多个...=[类实例名]引用data中CSS类实例即可; -- 可以准备一个触发事件,在事件中反转两个背景颜色值,由此可实现过渡动画: <!...点击按钮 触发事件后 过渡中途: ? 过渡完毕: ?... 组件名; -- 点击事件中 更改data字段 以 更换 展示子组件, 同时产生组件 入场退场,触发相关动画; -- template中 使用 标签占位, 使用is...; 列表动画 即列表增删元素,产生入场 和 出场动画; 主要是对itemView、v-for等标签套上这个特殊动画标签, 然后点击事件使用unshift

1.3K30

前端成神之路-WebAPIs06

核心算法: (目标值 - 现在位置) / 10 做为每次移动距离步长 停止条件是: 让当前盒子位置等于目标位置就停止定时器 注意步长值需要取整 1.1.2 动画函数多个目标值之间移动 可以让动画函数从...节流阀目的:当上一个函数动画内容执行完毕,再去执行下一个函数动画,让事件无法连续触发。 核心实现思路:利用回调函数,添加一个变量来控制,锁住函数和解锁函数。...案例:返回顶部 带有动画返回顶部 此时可以继续使用我们封装动画函数 只需要把所有的left 相关值改为 跟 页面垂直滚动距离相关就可以了 页面滚动了多少,可以通过 window.pageYOffset...触屏事件 1.3.1. 触屏事件概述 移动端浏览器兼容性较好,我们不需要考虑以前 JS 兼容性问题,可以放心使用原生 JS 书写效果,但是移动端也有自己独特地方。...触屏事件可响应用户手指(或触控笔)对屏幕或者触控板操作。 常见触屏事件如下: ? 1.3.2.

1.3K40

JavaScript(进阶)

(Bubble) 事件冒泡指的是事件向上传导,当后代元素上事件触发,将会导致其祖先元素上同类事件也会触发。...: 事件字符串,不要on 回调函数,当事件触发该函数会被调用 是否在捕获阶段触发事件,需要一个布尔值,一般都传false 使用addEventListener()可以同时为一个元素相同事件同时绑定多个响应函数...,向目标元素进行事件捕获,但是默认此时不会触发事件 目标阶段 事件捕获到目标元素,捕获结束开始在目标元素上触发事件 冒泡阶段 事件从目标元素向他祖先元素传递,依次触发祖先元素上事件 如果希望在捕获阶段就触发事件...,这样将关闭标识对应定时器 // clearInterval() 可以接收任意参数 // 如果参数是一个有效定时器标识,则停止对应定时器 // 如果参数不是一个有效标识,则什么也不做 clearInterval...使其停止执行动画 if(newValue == target) { //达到目标,关闭定时器 clearInterval(obj.timer); //动画执行完毕,调用回调函数

1.5K20

lottie系列文章(二):lottie最佳实践

如果项目的webpack配置在项目内,需要自行进行配置或者联系payton。 第二步 在需要使用lottie页面中,在其index.html中引入bodymovin.js。...在unmount时候,需要调用该方法 lottie-web常用事件 我们在lottie-web中可能也需要监听一些事件,比如加载完动画json文件data_ready事件。...,下面还有一些其他常用事件可以监听: * complete: 播放完成(循环播放下不会触发) * loopComplete: 当前循环下播放(循环播放/非循环播放)结束触发 * enterFrame...* data_ready: 动画json文件加载完毕触发 * DOMLoaded: 动画相关dom已经被添加到html后触发 * destroy: 将在动画删除触发 lottie-web部分高阶用法...,前端加载该动画后,相应图层class会被设置为svgClass,可以通过dom方法获取这些元素并做相应操作; 动画json文件制作及导出规范 使用该方案制作动画,有些动画效果lottie-web

5.1K31

js运动框架逐渐递进版

第一步:获取实际样式 使用offsetLeft..等获取样式, 若设置了边框, padding, 等可以改变元素宽度高度属性时会出现BUG.....(运动) 链式动画:顾名思义,就是在该次运动停止,开始下一次运动。...使用回调函数:运动停止,执行函数 添加func形参(回调函数)。 在当前属性到达目的地iCurrent === iTarget,判断是否有回调函数存在,有则执行。...等循环结束了,如果这个值是真的,则停止定时器。因为,每次运行定时器,都会初始化这个值。循环过程中,只要有一个没有到,bStop就被设定为 false。如果某个到了,此时 iCur !...= json[attr],表示速度为0 后面执行结果,也不会有变化。只有所有的都达到目标值。循环则不再改变 bStop值。此时,只要下一次运行定时器。就是初始化 bStop为真。

1.9K40
领券