我正在使用JQuery .animate()方法来动画div
的增长,而动画正在播放/动画,我想每x个毫秒进行一次函数调用直到动画已经完成了。
progress
选项似乎可以完成这项工作,但它只执行一次,而不是间隔执行,但还没有尝试多个progress
选项,但我不想要沿着这条路走下去,因为我可能有一个运行10秒的动画和一个每100毫秒调用一次的功能。
答案 0 :(得分:0)
要执行此操作,您可以使用step
对象的options
属性。但请注意,它会在动画的每次迭代中执行一次。这不能保证在调用之间设置为ms,因为它取决于很多因素,例如动画的速度,客户端PC可以多快地呈现更改等。这是一个有效的例子:
$('.foo').animate({
left: 300
},{
duration: 3000,
step: function() {
console.log($(this).css('left'))
}
});
.foo {
position: absolute;
top: 30px;
left: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="foo">Foo</div>
或者,您可以在动画开始时启动间隔计时器,并在动画结束时将其清除,如下所示:
var $foo = $('.foo');
$('button').click(function() {
var interval = setInterval(update, 100);
$foo.animate({
left: 300
}, 3000, function() {
clearInterval(interval);
});
});
function update() {
console.log($foo.css('left'));
}
.foo {
position: absolute;
top: 30px;
left: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="foo">Foo</div>
<button>Start</button>
答案 1 :(得分:0)
您可以使用clearInterval()
<button>Button</button>
<div style = "background-color :black; height:100px; width: 100px; ">Div</div>
$("button").click(function(){
var myVar = setInterval(function() {
console.log("Happening...");
// whatever you want to do here
},100);
$("div").animate({
opacity: 0,
}, 5000, function() {
clearInterval(myVar);
}
);
});
</script>