CSS过渡(Transitions)事件监听 常见问题与易错点 问题1:何时使用transitionend? 开发者有时混淆何时应该使用transitionend事件。 如何避免 正确使用transitionend。 直接在元素上绑定此事件,以监听过渡完成。 100px; background-color: red;">
在JS30挑战中,有不少项目都存在bug,其中第四个项目弹性布局照片墙项目,当连续双击点击某一个板块时,将出现照片不变大但两侧字已经滑进来的情况,如图: 这是因为官方对两侧字体的滑入用了一个transitionend 对此,我一开始在GitHub上找到一种解决办法,就是将transitionend事件取消,全部放入click事件中,并用过渡延时对应时间来实现该过程,详情可到该处寻找:github.com/soyaine 因此我想到的办法是,从变化的逻辑出发,因为连续点击鼠标时,会触发两次click事件,并在最终完成flex过渡时触发一次transitionend事件。 这是显而易见的,因此就要去选对两种事件独一无二且互不干扰的标记,在这里我选择flex样式的值作为click事件的标记,因为每次点击后,flex值会先进行变化再发生过渡效果,即flex值与过渡效果无关;而对于transitionend ', transEnd); }; //transitionend事件对应的回调函数 function transformEnd(event){ const [flexStr, ,] = getComputedStyle
opacity是用以设置透明度的属性,单纯将opacity设置为0只能从视觉上隐藏元素,而元素本身依然占据它自己的位置并对网页的布局起作用,它也将响应用户交互例如点击事件,对于其添加过渡属性可以显示动画效果,使用transitionend optionsNode.classList.add("hide"); optionsNode.removeEventListener("transitionend ", finish); // 移除监听器 } optionsNode.addEventListener("transitionend", finish); optionsNode.classList.add("hide"); optionsNode.removeEventListener("transitionend ", finish); // 移除监听器 } optionsNode.addEventListener("transitionend", finish);
element.style.transitionDuration = '400ms'; element.style.width = width + 'px'; /*监听单个动画完结*/ //transitionend 事件在 CSS 完成过渡后触发 element.addEventListener('transitionend', function() { func() (4)transitionend transitionend事件在 CSS 完成过渡后触发,这里当做单个动画完成的信号,触发后,会告知下个动画进行 下图的实现将在下篇文章贴出: ? ----
:link,:visited,:hover,:active和:focus 通过JS修改CSS属性值 通过JS修改className值 TransitionEnd事件详解 TransitionEnd Event el.addEventListener("transitionend" , e => { const pseudoElement = e.pseudoElement / elapsedTime = e.elapsedTime // 动画的持续时间 // .................. }) 注意:每个启用TransitionCSS属性的分别对应独立的transitionend 事件 /\* 触发3个transitionend事件 \*/ transition: width 1s ease .6s, color .5s linear,
nextTransition="nextTransition" :prevTransition="prevTransition" ref="transx" @over="over" @transitionend ="transitionEnd" > <div class="demo-item" v-for="(item, index) in list" :key="index" function(isEnd) { console.log('边界到了', isEnd); } 说明:当边界为翻到第一页时isEnd为false,当边界为翻到最后一页时isEnd为true transitionend transitionEnd: function(currentIndex) { console.log("当前到第几页了: ", currentIndex); } 效果 TransX 库支持多种不同的切换效果
* @type {{off: boolean, speeds: {_default: number, fast: number, slow: number}, cssPrefix: string, transitionEnd : normalizeEvent('TransitionEnd'), //过渡结束事件 animationEnd: normalizeEvent('AnimationEnd') //动画播放结束事件 transforms 变形 cssValues设置给DOM的样式 that = this, wrappedCallback, endEvent = $.fx.transitionEnd duration > 0) { //绑定动画结束事件 this.bind(endEvent, wrappedCallback) // transitionEnd //绑定过事件还做延时处理,是transitionEnd在older Android phones不一定触发 setTimeout(function() {
以下是我在写插件时遇到的问题以及解决的问题,大概包括 jQuery 插件编写、modernizr 使用、css3 动画、transitionend 事件、洗牌算法、相邻不重复随机数、获取 transform Transitionend 事件 transitionend 事件是在 transition 动画结束之后执行的函数。说到 transitionend 事件,我有很多感想。 直到写此插件才发现一切优化都要基于 transitionend 事件。 Chrome 中的 onresize 事件 关于该问题的详情及解决方法请参考 这篇文章 ! 本文持续更新~
:link,:visited,:hover,:active和:focus 通过JS修改CSS属性值 通过JS修改className值 TransitionEnd事件详解 TransitionEnd Event el.addEventListener("transitionend" , e => { const pseudoElement = e.pseudoElement // 触发动画的伪类 elapsedTime = e.elapsedTime // 动画的持续时间 // .................. }) 注意:每个启用TransitionCSS属性的分别对应独立的transitionend 事件 /* 触发3个transitionend事件 */ transition: width 1s ease .6s, color .5s linear,
translatex + "px)"; }, 2000); 自动播放功能-无缝滚动 注意,我们判断条件是要等到图片滚动完毕再去判断,就是过渡完成后判断 此时需要添加检测过渡完成事件 transitionend 等我们过渡完成之后,再去判断 监听过渡完成的事件 transitionend ul.addEventListener("transitionend", function () { // 无缝滚动 小圆点跟随变化效果 把ol里面li带有current类名的选出来去掉类名 remove 让当前索引号的小li 加上 current add 但是,是等着过渡结束之后变化,所以这个写到 transitionend
class="header">
const setTransition = (offset = 0) => { ...新增的代码 function transitionend() { setActive(1); }, 0) } container.current.removeEventListener('transitionend ', transitionend, false); } container.current.addEventListener('transitionend', transitionend
它可以是 transitionend 或 animationend notification 功能实现跟 message类似,接下来主要说明下不同之处,相似代码将省略。 this.onClick === 'function') { this.onClick(); } }, 组件 transition 没有绑定after-leave钩子函数,而是在侦听器中添加了 transitionend $el.addEventListener('transitionend', this.destroyElement); // 添加过渡效果事件监听 } } // methods destroyElement $el.removeEventListener('transitionend', this.destroyElement); //移除过渡效果事件监听 // vm destroy && remove
+ translatex + 'px) ' ; }, 2000); 自动播放功能-无缝滚动 注意,我们判断条件是要等到图片滚动完毕再去判断,就是过渡完成后判断 此时需要添加检测过渡完成事件 transitionend 索引号要复原为 0 此时图片,去掉过渡效果,然后移动 如果索引号小于0, 说明是倒着走, 索引号等于2 此时图片,去掉过渡效果,然后移动 ul.addEventListener( 'transitionend 小圆点跟随变化效果 把ol里面li带有current类名的选出来去掉类名 remove 让当前索引号的小li 加上 current add 但是,是等着过渡结束之后变化,所以这个写到 transitionend
= 'yasuo.png' pre.classList.add('loaded') next.classList.add('loaded') next.addEventListener('transitionend ', function animationend() { pre.classList.add('hidden') next.removeEventListener('transitionend document.querySelector('.next') next.src = 'yasuo.png' next.classList.add('loaded') next.addEventListener('transitionend ', function animationend() { pre.classList.add('hidden') next.removeEventListener('transitionend
ChangeFrequency.style.transform="translateX(50px)" }) }) }) 复制代码 至于如何实现串联动画,我的第一选择是animation,第二选择是监听transitionend { ChangeFrequencyFix.style.transform="translateX(50px)" ChangeFrequencyFix.removeEventListener("transitionend ",moveBack) } ChangeFrequencyFix.addEventListener("transitionend",moveBack) 复制代码 常见错误四:怎么回事! function goTrravel(){ correctToGo.removeEventListener("transitionend",goTrravel) correctToGo.style.transition correctToGo.style.transition="transform 2s,opacity 2s" }) }) } correctToGo.addEventListener("transitionend
testEl.style.transitionProperty === undefined), speeds: { _default: 400, fast: 200, slow: 600 }, cssPrefix: prefix, transitionEnd : normalizeEvent('TransitionEnd'), animationEnd: normalizeEvent('AnimationEnd') } off: 表示浏览器是否支持过渡或动画 ,如果既没有浏览器前缀,也不支持标准的属性,则判定该浏览器不支持动画 speeds: 定义了三种动画持续的时间, 默认为 400ms cssPrefix: 样式浏览器兼容前缀,即 prefix transitionEnd cssValues = {}, cssProperties, transforms = '', that = this, wrappedCallback, endEvent = $.fx.transitionEnd callback && callback.call(this) } if (duration > 0){ this.bind(endEvent, wrappedCallback) // transitionEnd
它可以是 transitionend 或 animationend ,这取决于给元素应用的 CSS 规则。如果你使用其中任何一种,Vue 能自动识别类型并设置监听。 默认情况下,Vue 会等待其在过渡效果的根元素的第一个 transitionend 或 animationend 事件。
charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>transitionEnd class="box">
侦听 CSS 过渡事件 现在可以侦听 CSS 过渡事件,如 transitionrun,transitionstart,transitionend 和 transitioncancel。 当然是用过渡事件(transitionend)! 用功能策略API进行控制 Chrome的新功能策略可以轻松的启用、禁用或修改 API 和其他网站功能的行为。