是否可以同时在两个不同的元素上运行两个动画?我需要与这个问题的相反情况类似,JQuery队列动画的相反。
我需要像这样做......
$('#first').animate({ width: 200 }, 200);
$('#second').animate({ width: 600 }, 200);
但想同时运行这两个动画,我唯一能想到的就是为每个动画使用一次setTimeout
,但我认为这不是最好的解决方案。
是否可以同时在两个不同的元素上运行两个动画?我需要与这个问题的相反情况类似,JQuery队列动画的相反。
我需要像这样做......
$('#first').animate({ width: 200 }, 200);
$('#second').animate({ width: 600 }, 200);
但想同时运行这两个动画,我唯一能想到的就是为每个动画使用一次setTimeout
,但我认为这不是最好的解决方案。
有的!
$(function () {
$("#first").animate({
width: '200px'
}, { duration: 200, queue: false });
$("#second").animate({
width: '600px'
}, { duration: 200, queue: false });
});
可以同时运行,是的。 如果您想要在同一元素上同时运行两个动画,该怎么办?
$(function () {
$('#first').animate({ width: '200px' }, 200);
$('#first').animate({ marginTop: '50px' }, 200);
});
这将导致动画排队播放。 如果要同时运行它们,您只需使用一行。
$(function () {
$('#first').animate({ width: '200px', marginTop:'50px' }, 200);
});
有没有其他方法可以同时在同一个元素上运行两个不同的动画?
我相信我在jQuery文档中找到了解决方案:
将所有段落动画化为左侧样式为50,不透明度为1(不透明,可见),并在500毫秒内完成动画。 它还将在队列之外执行,这意味着它将自动开始而不必等待轮到它。
只需简单添加:
$( "p" ).animate({ left: "50px", opacity: 1 }, { duration: 500, queue: false });
queue: false
。
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script>
$(function () {
$('#first').animate({ width: 200 }, 200);
$('#second').animate({ width: 600 }, 200);
});
</script>
<div id="first" style="border:1px solid black; height:50px; width:50px"></div>
<div id="second" style="border:1px solid black; height:50px; width:50px"></div>
虽然连续调用animate会给人以它们同时运行的假象,但实际上它们是非常接近并行运行的不同动画。
为确保动画实际上是同时运行,请使用:
$(function() {
$('#first').animate({..., queue: 'my-animation'});
$('#second').animate({..., queue: 'my-animation'});
$('#first,#second').dequeue('my-animation');
});
$('#first, #second').dequeue()
。 - GuyPaddock slide : function(id, prop, from, to) {
if (from < to) {
// Sliding out
var fromvals = { add: from, subtract: 0 };
var tovals = { add: to, subtract: 0 };
} else {
// Sliding back in
var fromvals = { add: from, subtract: to };
var tovals = { add: from, subtract: from };
}
$(fromvals).animate(tovals, {
duration: 200,
easing: 'swing', // can be anything
step: function () { // called on every step
// Slide using the entire -ms-grid-columns setting
$(id).css(prop, (this.add - this.subtract) + 'px 1.5fr 0.3fr 8fr 3fr 5fr 0.5fr');
}
});
}
$(function () {
$("#first").animate({
width: '200px'
}, { duration: 200, queue: false });
$("#second").animate({
width: '600px'
}, { duration: 200, queue: false });
});
我参考了W3 Schools Set Interval,它解决了我的问题,即“语法”部分:
setInterval(function, milliseconds, param1, param2, ...)
我的参数形式为{ duration: 200, queue: false }
,强制持续时间为零,只查看参数以获取指导。
长话短说,这是我的代码,如果你想了解它为什么有效,请阅读链接或分析预期的间隔参数:
var $scrollDiv = '#mytestdiv';
var $scrollSpeed = 1000;
var $interval = 800;
function configureRepeats() {
window.setInterval(function () {
autoScroll($scrollDiv, $scrollSpeed);
}, $interval, { queue: false });
};
'autoScroll' 是什么:
$($scrollDiv).animate({
scrollTop: $($scrollDiv).get(0).scrollHeight
}, { duration: $scrollSpeed });
//Scroll to top immediately
$($scrollDiv).animate({
scrollTop: 0
}, 0);
编程愉快!
animate()
工作原理的理解,它们应该同时运行。 - chaos