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() {
: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,
以下是我在写插件时遇到的问题以及解决的问题,大概包括 jQuery 插件编写、modernizr 使用、css3 动画、transitionend 事件、洗牌算法、相邻不重复随机数、获取 transform Transitionend 事件 transitionend 事件是在 transition 动画结束之后执行的函数。说到 transitionend 事件,我有很多感想。 直到写此插件才发现一切优化都要基于 transitionend 事件。 Chrome 中的 onresize 事件 关于该问题的详情及解决方法请参考 这篇文章 ! 本文持续更新~
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
charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>transitionEnd class="box">
它可以是 transitionend 或 animationend ,这取决于给元素应用的 CSS 规则。如果你使用其中任何一种,Vue 能自动识别类型并设置监听。 默认情况下,Vue 会等待其在过渡效果的根元素的第一个 transitionend 或 animationend 事件。
侦听 CSS 过渡事件 现在可以侦听 CSS 过渡事件,如 transitionrun,transitionstart,transitionend 和 transitioncancel。 当然是用过渡事件(transitionend)! 用功能策略API进行控制 Chrome的新功能策略可以轻松的启用、禁用或修改 API 和其他网站功能的行为。