[英]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 以了解其实现。
$("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>
$("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.