[英]For JavaScript or jQuery, how to make transitionend event not fire?
[英]How do I get my transitionend event to fire?
我正在了解<progress>
元素并尝试创建 CSS 过渡,以使其在价值增加时看起来平滑。 我想在transitionend
事件触发后执行 JS 但它不会。
我究竟做错了什么?
$("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)
实际上不会在进度元素上触发转换。 它会立即更新。 您看到的过渡是在伪元素::-webkit-progress-value
上,据我所知,它似乎不可能以 jQuery 为目标,因为它不是 DOM 的一部分。
如果我从您的伪元素的 CSS 中删除过渡,您可以看到这一点。 它不再有过渡,只是立即更新进度。
相反,您可以使用.animate
或类似的东西来更新您的进度并获得完成甚至步骤回调。 请参阅代码片段 #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.