制作动画时少不了使用setTimeout和setInterval,特别是一个经典的情景,就是一个元素本来的display是none的。...很简单的一例子,如果使用setInterval,里面的回调函数中,需要执行比较长的事件,例如setInterval一个1秒钟的时间,然后callback中需要执行3秒,那么下一个setInterval并不会等待上一个的...setInterval的callback执行完毕才执行,这样就有可能出现同一时间触发多次setInterval的callback,然后导致页面的奇怪现象。...当页面激活的时候,动画就从上一次的停止的地方继续执行,非常有效的节省了CPU的开销。...函数节流:因为requestAnimationFrame是固定以屏幕的刷新频率去触发的,所以不会存在在高频事件中重复触发函数的情况。
因此,如果您避免对触发布局或绘制操作的CSS属性进行动画化,并坚持使用诸如转换和不透明度之类的属性,那么您将看到动画性能的显著提高,因为现代浏览器在优化这些属性方面做得非常出色。...更改仅触发复合操作的CSS属性是优化web动画性能的一个简单而有效的步骤。...将处理诸如滚动、调整大小、鼠标事件等事件的代码与使用requestAnimationFrame()处理屏幕更新的代码分离开来,是优化动画代码以提高性能的好方法。...对于不需要访问DOM的复杂JavaScript操作,可以考虑使用Web worker。工作线程执行任务时不会影响用户界面。...例如,使用性能工具记录web页面将使您了解该页面上的性能瓶颈: ? 点击录制按钮,几秒钟后停止录制: ? 此时,您应该有大量的数据来帮助您分析页面的性能: ?
使用jQuery处理事件 事件处理 一个栗子,单击p时背景变成灰色 由于es6的箭头函数不支持this的绑定,所以无法使用箭头函数,只能使用匿名函数 html <!...'gray'); }); 效果 [20180821_175532.gif] 或者使用第二个参数,添加相关的属性,完成事件的相关触发 // 单击任意p时,使其背景变成灰色 $('', { src...)}); // 触发事件时,将会添加额外的属性给事件对象,如果事件以前被监听,将会被直接触发 $('#button1').trigger({ type:'click', synthetic:true }...实时事件 实时事件为,如果先前将所有a元素绑定了一个事件,接着在创建一个新的a的节点,如果此时触发事件,则新创建的a元素不会被触发事件,因为绑定的不是实时的事件。...,top接受两个可选的参数,如果第一个为true将会清楚当前队列,否则队列将不会被清除,第二个为是否保留当前值,如果未true将会变化到终值,如果为false将会保持当前值,然后开始执行动画 // 当属性悬浮在图片上时
stop(): 停止页面载入,相当于点击了浏览器的停止按钮。 Window对象事件 加载相关 onbeforeunload: 该事件在即将离开页面(刷新或关闭)时触发。...onload: 文档加载完成后触发。 onunload: 当窗口卸载其内容和资源时触发。 onerror: 当发生JavaScript运行时错误与资源加载失败时触发。...动画相关 onanimationcancel: 当CSS动画意外中止时,即在任何时候它停止运行而不发送animationend事件时将发送此事件,例如当animation-name被改变,动画被删除等...onanimationiteration: 此事件将会在CSS动画到达每次迭代结束时触发,当通过执行最后一个动画步骤完成对动画指令序列的单次传递完成时,迭代结束。...打印相关 onbeforeprint: 该事件在页面即将开始打印时触发 onafterprint: 该事件在页面已经开始打印或者打印窗口已经关闭时触发。
触发事件是鼠标按下mousedown,鼠标移动mousemove 鼠标松开 mouseup 拖拽过程: 鼠标移动过程中,获得最新的值赋值给模态框的left和top值,这样模态框可以跟着鼠标走了 鼠标按下触发的事件源是最上面一行...页面被卷去的头部 如果浏览器的高(或宽)度不足以显示整个页面时,会自动出现滚动条。当滚动条向下滚动时,页面上面被隐藏掉的高度,我们就称为页面被卷去的头部。滚动条在滚动时会触发onscroll事件。...window.pageXOffset 获得 1.5. mouseenter 和mouseover的区别 当鼠标移动到元素上时就会触发mouseenter 事件 类似 mouseover,它们两者之间的差别是...mouseenter 只会经过自身盒子触发 之所以这样,就是因为mouseenter不会冒泡 跟mouseenter搭配鼠标离开 mouseleave 同样不会冒泡 1.6....动画函数给不同元素记录不同定时器 如果多个元素都使用这个动画函数,每次都要var 声明定时器。我们可以给不同的元素使用不同的定时器(自己专门用自己的定时器)。
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) //停止当前动画,并清除未执行的动画队列
方法 visibilitychange:当页面的可见性状态发生变化时触发该事件。...游戏应用程序 如果我们正在开发一个基于 Web 的游戏,就可以使用 Page Visibility API 暂停和恢复游戏,以便玩家能够在离开游戏时不会丢失任何进度。...如果需要兼容不支持 Page Visibility API 的浏览器,我们可以使用 Polyfill 或者其他的检测方法来实现。...根据页面的可见性来控制动画执行 在页面中创建小球,其位置随着时间的推移而变化。使用 Page Visibility API,可以在页面不可见时停止动画,并在页面重新变为可见时恢复动画。 <!...页面可见性通过 visibilitychange 事件进行监测,当页面从可见到不可见时停止动画,反之则恢复动画。
此时可以使用 pageshow事件来触发。,这个事件在页面显示时触发,无论页面是否来自缓存。...在重新加载页面中,pageshow会在load事件触发后触发;根据事件对象中的persisted来判断是否是缓存中的页面触发的pageshow事件 注意这个事件给window添加。...页面被卷去的头部 如果浏览器的高(或宽)度不足以显示整个页面时,会自动出现滚动条。当滚动条向下滚动时,页面上面被隐藏掉的高度,我们就称为页面被卷去的头部。滚动条在滚动时会触发 onscroll事件。...window.pageXOffset 获得 1.5. mouseenter 和mouseover的区别 当鼠标移动到元素上时就会触发mouseenter 事件 类似 mouseover,它们两者之间的差别是...动画函数给不同元素记录不同定时器 如果多个元素都使用这个动画函数,每次都要var 声明定时器。我们可以给不同的元素使用不同的定时器(自己专门用自己的定时器)。
在很多移动端动画性能优化时,一般使用16ms来进行节流处理连续触发的浏览器事件。例如对touchmove、scroll事件进行节流等。通过这种方式减少持续事件的触发频率,可以大大提升动画的流畅性。...但是,另一方面元素较多且复杂的动画使用svg渲染会比较慢,而且SVG格式的动画绘制方式必须让内容嵌入到HTML中使用。CSS3的出现让svg的应用变得相对少了。...CSS3 transition transition是过度动画。但是transition并不能实现独立的动画,只能在某个标签元素样式或状态改变时进行平滑的动画效果过渡,而不是马上改变。...大多数浏览器都会对重绘操作加以限制,不超过显示器的重绘频率,因为即使超过这个频率用户体验也不会提升。 因此,最平滑动画的最佳循环间隔是 1000ms/60 ,约16ms。...为它们传入的第二个参数,实际上只是指定了把动画代码添加到浏览器UI线程队列中以等待执行时间。如果队列前面已经加入其他任务,那动画代码就要等前面的任务完成后再执行。
移动轮播图 移动端轮播图与PC段轮播图,在技术选择上是有区别的,因为移动端的浏览器版本非常好,对于H5和CSS3的支持非常完美,所以很多效果可以CSS3的方式实现,比如可以使用 Transorm 属性替代原来的动画函数...动画库, 拥有简单而强大的API。...,导致不会触发这个事件 focus_img.addEventListener('transitionend', function () { /*如果index=...:如何判断: 只要用户移动手指就会触发touchmove事件,如果用户没有移动手指,不会触发这个事件 */ // 声明变量,存储手指的按下时的位置...clearInterval(timer) // 获取手指按下时的位置,赋值给startx startx = e.targetTouches
首先通过JS脚本来修改指定元素的样式或是类名是可行的,另一种方式就是利用带有交互事件属性的CSS伪类(例如:hover或是:focus),当对应的事件触发时,新的样式就会作用于指定元素,这种特性也可以理解为...,这也就不难理解为什么首屏渲染时transition不会生效了。...),你可以自由地实现动画暂停或者恢复,又或者是在动画执行到某一特定时刻时触发其他的逻辑,很明显,JS动画在细节控制能力、过程管理能力以及多对象管理能力上都要比纯CSS动画更强大,但随之而来的复杂性也是必须要付出的代价...,当用户希望某些自定义方法可以在特定时刻运行时,就可以使用velocity中的事件钩子将自定义方法和动画的执行关联起来,很明显,这种机制的存在增加了动画的交互和感知性,开发者可以在各个感兴趣的阶段钩入自己期望运行的函数...velocity.js中提供的事件钩子包括:begin(在动画开始时触发),complete(动画结束时触发),progress(动画过程中触发),progress钩子每次执行时可以获取到动画执行情况的细节
mouseover和mouseenter的区别 当鼠标移动到元素上时就会触发mouseenter事件 mouseover: 鼠标经过自身盒子会触发,经过子盒子还会触发(冒泡). mouseenter:...只有经过自身盒子才会触发(不会冒泡) mouseenter搭配鼠标离开mouseleave也不会冒泡 接下来学习新的知识:动画 动画 动画实现原理 核心原理: 通过定时器setInterval()不断移动盒子...我现在做一个试试看,让盒子向右移动,当盒子距离左侧大于600px的时候就停止: 但是我们的页面中可能会有很多地方都有动画,如果我们一个一个写那就会非常的麻烦,所以我们可以考虑将动画函数封装起来...现在我们怎么点都不会影响效果了 到现在为止,我们的动画都只是匀速的,那么怎么才能够像CSS3一样变化运动的速度呢?...回调函数的位置: 定时器结束的位置 为了方便使用,我们直接将函数封装在文件中 动画函数封装到单独的JS文件中 因为以后经常使用这个动画函数,可以单独封装到一个JS文件里面,使用的时候引用这个文件即可
当我们第一次调用组件函数时,触发初次渲染;然后随着 props 的改变,便会重新调用该组件函数,触发重渲染。 你也许会纳闷,动画里面为啥要并排画三个一样的组件呢?...如果你觉得匪夷所思嘛……来简单解释一下: 每次渲染相互独立,因此每次渲染时组件中的状态、事件处理函数等等都是独立的,或者说只属于所在的那一次渲染 我们在 count 为 3 的时候触发了 handleAlertClick...OK,听上去还是很抽象,再来看看下面的动画吧: 动画中有以下需要注意的点: 每个 Effect 必然在渲染之后执行,因此不会阻塞渲染,提高了性能 在运行每个 Effect 之前,运行前一次渲染的 Effect...再来看看 useEffect 的第二个参数:deps (依赖数组)。从上面的演示动画中可以看出,React 会在每次渲染后都运行 Effect。...实际效果动画如下: 可以看到,后面的所有重渲染都不会触发 Effect 的执行;在组件销毁时,运行 Effect Cleanup 函数。
选取多个元素 交集选择器 $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() 获取元素本身自带的属性,有利于对表单操作 表单属性
也是可以正常运行的 颜色过渡和位移 动画 结合 控制组合动画时长 以某一类型动画的时间为准 控制组合动画时长 以自定义的时长为准 分别 统一 出入场动画的时延 禁用CSS动画,使用JS动画 最基本的 多个...=[类实例名]引用data中的CSS类实例即可; -- 可以准备一个触发事件,在事件中反转两个背景颜色值,由此可实现过渡动画: <!...点击按钮 触发事件后 过渡的中途: ? 过渡完毕: ?...的 组件名; -- 点击事件中 更改data字段 以 更换 展示的子组件, 同时产生组件的 入场退场,触发相关动画; -- template中 使用 标签占位, 使用is...; 列表动画 即列表增删元素时,产生的入场 和 出场动画; 主要是对itemView、v-for等标签套上这个特殊动画标签, 然后点击事件时使用unshift
核心算法: (目标值 - 现在的位置) / 10 做为每次移动的距离步长 停止的条件是: 让当前盒子位置等于目标位置就停止定时器 注意步长值需要取整 1.1.2 动画函数多个目标值之间移动 可以让动画函数从...节流阀目的:当上一个函数动画内容执行完毕,再去执行下一个函数动画,让事件无法连续触发。 核心实现思路:利用回调函数,添加一个变量来控制,锁住函数和解锁函数。...案例:返回顶部 带有动画的返回顶部 此时可以继续使用我们封装的动画函数 只需要把所有的left 相关的值改为 跟 页面垂直滚动距离相关就可以了 页面滚动了多少,可以通过 window.pageYOffset...触屏事件 1.3.1. 触屏事件概述 移动端浏览器兼容性较好,我们不需要考虑以前 JS 的兼容性问题,可以放心的使用原生 JS 书写效果,但是移动端也有自己独特的地方。...触屏事件可响应用户手指(或触控笔)对屏幕或者触控板操作。 常见的触屏事件如下: ? 1.3.2.
.给谁加事件 //2.事件触发后处理什么业务 if(!...= 'object'){ //没dom的时候或者不是一个对象的时候 程序停止 return false; } dom.addEventListener('...= 'object'){ //没dom的时候或者不是一个对象的时候 程序停止 return false; } var isMove = false; /.../是否滑动过 var time = 0; //刚刚触摸屏幕的事件 touchstart的触发事件 dom.addEventListener('touchstart',function...(){ //记录触发这个事件的时间 time = Date.now(); //时间戳 毫秒 }); dom.addEventListener('touchmove
(Bubble) 事件的冒泡指的是事件向上传导,当后代元素上的事件被触发时,将会导致其祖先元素上的同类事件也会触发。...: 事件的字符串,不要on 回调函数,当事件触发时该函数会被调用 是否在捕获阶段触发事件,需要一个布尔值,一般都传false 使用addEventListener()可以同时为一个元素的相同事件同时绑定多个响应函数...,向目标元素进行事件的捕获,但是默认此时不会触发事件 目标阶段 事件捕获到目标元素,捕获结束开始在目标元素上触发事件 冒泡阶段 事件从目标元素向他的祖先元素传递,依次触发祖先元素上的事件 如果希望在捕获阶段就触发事件...,这样将关闭标识对应的定时器 // clearInterval() 可以接收任意参数 // 如果参数是一个有效的定时器的标识,则停止对应的定时器 // 如果参数不是一个有效的标识,则什么也不做 clearInterval...使其停止执行动画 if(newValue == target) { //达到目标,关闭定时器 clearInterval(obj.timer); //动画执行完毕,调用回调函数
如果项目的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
第一步:获取实际样式 使用offsetLeft..等获取样式时, 若设置了边框, padding, 等可以改变元素宽度高度的属性时会出现BUG.....(运动) 链式动画:顾名思义,就是在该次运动停止时,开始下一次运动。...使用回调函数:运动停止时,执行函数 添加func形参(回调函数)。 在当前属性到达目的地时iCurrent === iTarget,判断是否有回调函数存在,有则执行。...等循环结束了,如果这个值是真的,则停止定时器。因为,每次运行定时器,都会初始化这个值。循环的过程中,只要有一个没有到,bStop就被设定为 false。如果某个到了,此时 iCur !...= json[attr],表示速度为0 后面执行的结果,也不会有变化。只有所有的都达到目标值。循环则不再改变 bStop的值。此时,只要下一次运行定时器。就是初始化 bStop为真。
领取专属 10元无门槛券
手把手带您无忧上云