Я хочу создать панель обработки, которая выполняет функцию foo()
, когда она вырастет до 100% ширины.Панель обработки с остановкой при наведении
HTML:
<div></div>
CSS:
position: absolute;
top: 0px;
left: 0px;
height: 2px;
width: 0px;
background-color: rgba(0, 0, 0, 0.3);
Так что я попробовал сделать это с помощью CSS анимации.
JS:
var duration = parseInt("15");
var bar = $("[...] div");
doSomething = (function() {
bar.css({
"animation-duration" : duration+"s",
"animation-name" : "expand",
"animation-timing-function" : "linear"
});
bar.on("animationend oAnimationEnd MSAnimationEnd mozAnimationEnd webkitAnimationEnd", function(e) {
bar.css("animation-name", "none");
foo();
$(this).off(e);
});
doSomething();
});
Это отлично работает в первом запуске, но это не цикл.
Но с этим решением я могу добавить остановку в hover
легко с:
CSS:
animation-play-state: paused;
Я попробовал решение с JQuery animate()
, работ цикла, но я не знаю, как добавьте остановку при наведении и приостановите анимацию, потому что в jQuery нет возможности сделать что-то подобное. Конечно, я могу остановить анимацию, но когда я запускаю ее снова, она воспроизводит остальную часть ширины с одинаковой продолжительностью.
JS:
doSomething = (function() {
/* First try
interval = setInterval(function(){
bar.animate({
width: "100%",
}, duration, "linear", function() {
bar.css("width", "0px");
foo();
});
}, 0);*/
bar.animate({
width: "100%",
}, duration, "linear", function() {
bar.css("width", "0px");
foo();
});
});
$("[parent of bar]")
.mouseenter(function() {
bar.stop();
})
.mouseleave(function() {
bar.finish(); /* Animate: 100% - currentWidth in duration */
});
Поэтому любые другие идеи?
Возможно, демонстрация поможет, но с помощью CSS-решения вам придется повторно присоединить анимацию через определенный промежуток времени (например, тайм-аут или задержка) или после выполнения «foo()» для нее перезапуск. В противном случае анимация не будет выполнена из-за параметра «анимация-имя: нет». – Harry