简体   繁体   English

如何让我的 transitionend 事件触发?

[英]How do I get my transitionend event to fire?

I'm learning about the <progress> element and trying to create a CSS transition to make it look smooth as it's value increases.我正在了解<progress>元素并尝试创建 CSS 过渡,以使其在价值增加时看起来平滑。 I want to execute JS after the transitionend event fires but it won't.我想在transitionend事件触发后执行 JS 但它不会。

What am I doing wrong?我究竟做错了什么?

 $("button").on("click", function () { $("progress").val(100); }); $("progress[value]").on( "transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd", function () { $("progress").val(0); alert("Completed"); } );
 body { margin: 0; padding: 0; text-align: center; } button { margin: 10px; text-transform: uppercase; font-size: 1em; }.loadPageProgress progress { display: block; width: 100%; height: 5px; border: none; border-radius: 0; background-color: green; appearance: none; -webkit-appearance: none; -moz-appearance: none; }.loadPageProgress progress[value] { background-color: green; transition: all 1000ms ease-in-out; -webkit-transition: all 1000ms ease-in-out; -moz-transition: all 1000ms ease-in-out; -o-transition: all 1000ms ease-in-out; }.loadPageProgress progress[value]::-webkit-progress-bar { width: 100%; height: 5px; border: none; border-radius: 0; background-color: grey; }.loadPageProgress progress[value]::-webkit-progress-value { background-color: green; transition: all 1000ms ease-in-out; -webkit-transition: all 1000ms ease-in-out; -moz-transition: all 1000ms ease-in-out; -o-transition: all 1000ms ease-in-out; }.loadPageProgress progress[value]::-moz-progress-bar { width: 100%; height: 5px; border: none; border-radius: 0; background-color: grey; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="loadPageProgress"> <progress value="0" max="100"></progress> </div> <button>start transition</button>

.val(x) does not actually fire a transition on the progress element. .val(x)实际上不会在进度元素上触发转换。 It updates instantly.它会立即更新。 Your transition you are seeing is on the pseudo element ::-webkit-progress-value , which to my knowledge seems to be impossible to target with jQuery because it's not part of the DOM.您看到的过渡是在伪元素::-webkit-progress-value上,据我所知,它似乎不可能以 jQuery 为目标,因为它不是 DOM 的一部分。

You can see this if I remove the transitions from your pseudo-element's CSS.如果我从您的伪元素的 CSS 中删除过渡,您可以看到这一点。 It no longer has a transition and just updates the progress instantly.它不再有过渡,只是立即更新进度。

Instead, you might use .animate or something similar to update your progress and get completion or even step callbacks.相反,您可以使用.animate或类似的东西来更新您的进度并获得完成甚至步骤回调。 See code snippet #2 for an implementation of that.请参阅代码片段 #2 以了解其实现。

Snippet 1: Psuedo Transitions Removed.片段 1:已删除伪过渡。

 $("button").on("click", function () { $("progress").val(100); }); $("progress[value]").on( "transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd", function () { $("progress").val(0); alert("Completed"); } );
 body { margin: 0; padding: 0; text-align: center; } button { margin: 10px; text-transform: uppercase; font-size: 1em; }.loadPageProgress progress { display: block; width: 100%; height: 5px; border: none; border-radius: 0; background-color: green; appearance: none; -webkit-appearance: none; -moz-appearance: none; }.loadPageProgress progress[value] { background-color: green; transition: all 1000ms ease-in-out; -webkit-transition: all 1000ms ease-in-out; -moz-transition: all 1000ms ease-in-out; -o-transition: all 1000ms ease-in-out; }.loadPageProgress progress[value]::-webkit-progress-bar { width: 100%; height: 5px; border: none; border-radius: 0; background-color: grey; }.loadPageProgress progress[value]::-webkit-progress-value { background-color: green; }.loadPageProgress progress[value]::-moz-progress-bar { width: 100%; height: 5px; border: none; border-radius: 0; background-color: grey; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="loadPageProgress"> <progress value="0" max="100"></progress> </div> <button>start transition</button>

Snippet 2: Animate片段 2:动画

 $("button").on("click", function () { $("progress").animate({value:100},{ duration:2000, step: function(x){ }, complete: function(){ console.log("Done;"); } }); });
 body { margin: 0; padding: 0; text-align: center; } button { margin: 10px; text-transform: uppercase; font-size: 1em; }.loadPageProgress progress { display: block; width: 100%; height: 5px; border: none; border-radius: 0; background-color: green; appearance: none; -webkit-appearance: none; -moz-appearance: none; }.loadPageProgress progress[value] { background-color: green; transition: all 1000ms ease-in-out; -webkit-transition: all 1000ms ease-in-out; -moz-transition: all 1000ms ease-in-out; -o-transition: all 1000ms ease-in-out; }.loadPageProgress progress[value]::-webkit-progress-bar { width: 100%; height: 5px; border: none; border-radius: 0; background-color: grey; }.loadPageProgress progress[value]::-webkit-progress-value { background-color: green; }.loadPageProgress progress[value]::-moz-progress-bar { width: 100%; height: 5px; border: none; border-radius: 0; background-color: grey; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="loadPageProgress"> <progress value="0" max="100"></progress> </div> <button>start transition</button>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 对于JavaScript或jQuery,如何使Transitionend事件不触发? - For JavaScript or jQuery, how to make transitionend event not fire? 当我的动画结束时,transitionend事件不会触发 - transitionend event doesn't fire when my animation finishes &#39;transitionend&#39;事件不会持续发射 - 'transitionend' event does not fire consistently addlistener怎么了…我该如何触发我的活动 - What's wrong with addlistener… how do i fire my event 当 chrome 选项卡在后台时,transitionend 事件不会触发 - on transitionend event not fire when chrome tab is in background 如何创建自定义事件来处理所有 transitionend 事件? - How can I create a custom event to handle all transitionend events? 在Dojo或Javascript中,如何使我的事件处理程序在其他事件处理程序之前启动? - In Dojo or Javascript how do I make my event handler fire before other event handlers? 如何触发JavaScript事件触发器? - How do I fire a JavaScript event trigger? 向元素添加`transitionend`事件侦听器只会导致动画反向触发 - Addidng a `transitionend` event listener to an element only causes the animation to fire in reverse 有时需要两次轻击才能触发事件。 我该如何解决? - Sometimes it takes two taps to fire an event. How do I get around this?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM