你的逻辑的第一部分是错误的。.progressbar
将进度条重置为其原始状态,这是正确的。但是,由于.animate
您只是更改 css,您实际上并没有“进步”栏。
您应该在某个计算/时间段内设置一个值,而将鼠标悬停在元素上。
示例(已编辑):
html
<div id="progressbar"></div>
js
$(function () {
var progress = 0;
var updateTime = 30; // ms
var updateTimeout;
$("#progressbar").mouseenter(function () {
updateTimeout = setTimeout(animateFilling, updateTime);
});
$("#progressbar").mouseleave(function () {
progress = 0;
updateProgressbar();
clearTimeout(updateTimeout);
});
updateProgressbar(); // init the bar
function animateFilling() {
if (progress < 100) {
progress++;
updateProgressbar();
updateTimeout = setTimeout(animateFilling, updateTime);
} else {
// TODO - done loading
}
}
function updateProgressbar() {
$("#progressbar").progressbar({
value: progress
});
}
});
在这里更新了演示
鼠标悬停/鼠标悬停错误编辑
正如 OP 所指出的,即使光标没有离开 dom 元素(导致加速或重置进度条),使用 mouseover 和 mouseout 也会重新触发进度条。
这是由于进度条的内部元素和事件冒泡,如此处所述。我们可以通过使用 mouseover / mouseout 来避免这种情况。