是否可以同时在两个不同的元素上运行两个动画?我需要与此问题相反Jquery queueing animations。
我需要做这样的事情......
$('#first').animate({ width: 200 }, 200);
$('#second').animate({ width: 600 }, 200);
但要同时运行这两个。我唯一能想到的就是每个动画使用setTimeout
一次,但我认为这不是最好的解决方案。
答案 0 :(得分:403)
$(function () {
$("#first").animate({
width: '200px'
}, { duration: 200, queue: false });
$("#second").animate({
width: '600px'
}, { duration: 200, queue: false });
});
答案 1 :(得分:17)
这将同时运行是。 如果你想同时在同一个元素上运行两个动画怎么办?
$(function () {
$('#first').animate({ width: '200px' }, 200);
$('#first').animate({ marginTop: '50px' }, 200);
});
最终排队动画。 要同时运行它们,你只能使用一行。
$(function () {
$('#first').animate({ width: '200px', marginTop:'50px' }, 200);
});
还有其他方法可以同时在同一个元素上运行两个不同的动画吗?
答案 2 :(得分:8)
如果按原样运行上述内容,它们似乎会同时运行。
这是一些测试代码:
<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>
答案 3 :(得分:8)
我相信我在jQuery文档中找到了解决方案:
将所有段落设置为左侧样式 50和不透明度1(不透明, 可见),完成动画 在500毫秒内。 它也会 在队列之外做,意思是它 将自动启动 等待轮到。
$( "p" ).animate({ left: "50px", opacity: 1 }, { duration: 500, queue: false });
只需添加:queue: false
。
答案 4 :(得分:2)
请参阅这篇关于在对象中设置动画值的精彩博客文章。然后,您可以使用这些值来动画您喜欢的任何内容,同时100%!
我这样用它来滑入/滑出:
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');
}
});
}
答案 5 :(得分:2)
虽然对动画的连续调用会给出它们同时运行的外观是真的,但根本的事实是它们是非常接近并行运行的不同动画。
为了确保动画确实在同一时间运行,请使用:
$(function() {
$('#first').animate({..., queue: 'my-animation'});
$('#second').animate({..., queue: 'my-animation'}).dequeue('my-animation');
});
可以将更多动画添加到“我的动画”中。如果最后一个动画将它们排队,则可以启动队列和所有队列。
干杯, 安东尼
答案 6 :(得分:0)
发布我的答案以帮助某人,评分最高的答案并不能解决我的疑虑。
当我从顶部回答中实现以下内容时,我的垂直滚动动画来回抖动:
$(function () {
$("#first").animate({
width: '200px'
}, { duration: 200, queue: false });
$("#second").animate({
width: '600px'
}, { duration: 200, queue: false });
});
我提到:W3 Schools Set Interval,它解决了我的问题,即“语法”部分:
setInterval(函数,毫秒,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);
编码愉快!