JQuery 动画中 stop() 和 Delay() 的问题

发布于 2024-12-07 04:07:19 字数 403 浏览 0 评论 0原文

正如您在 http://jsfiddle.net/FrelCee/5zcv3/4/ 上看到的,我想在容器悬停时为这 3 个 div 制作动画。

问题是当您多次快速悬停时会出现这个丑陋的队列。 我还尝试使用 .stop() 函数,但 delay() 不起作用。

这是一个 stop() 函数和 delay() 问题的示例: http://jsfiddle.net/FrelCee /FHC99/22/

有谁知道更好的方法吗?

提前致谢!

As you can see on http://jsfiddle.net/FrelCee/5zcv3/4/ , i want to animate those 3 divs when the container is hovered.

Problem is this ugly queue that appears when you fast hover more than once.
I also tried using .stop() function, but then the delay() isn't working.

Here is an example with stop() function and delay() problem : http://jsfiddle.net/FrelCee/FHC99/22/

Does anyone know any better way to this?

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

栖竹 2024-12-14 04:07:19

您只需要至少向 .stop(true, true) 提供第一个参数即可清除当前队列,并且您可以决定是否还想提供第二个参数以跳转到队列的末尾下一个开始时的动画(这取决于您,因为它会产生稍微不同的效果)。您还需要将 .stop() 调用放在 .delay() 之前,这样就不会清除 .delay()。请参阅 jQuery .stop() 文档以了解这两个参数.stop()。当我在这里这样做时: http://jsfiddle.net/jfriend00/pYgQr/ ,似乎处理快速悬停进/出就好了。

// On hover function
var hover = $('#container');
hover.hover(function(){

    $(this).find('#first').stop(true, true).animate({left:10}, 600);
    $(this).find('#second').stop(true, true).delay(100).animate({left:10}, 600);
     $(this).find('#third').stop(true, true).delay(250).animate({left:10}, 600);

}, function() {

    $(this).find('#first').stop(true, true).animate({left:-100}, 600);
    $(this).find('#second').stop(true, true).delay(100).animate({left:-100}, 600);
    $(this).find('#third').stop(true, true).delay(250).animate({left:-100}, 600);

}); // on mouse out hide divs

另外,我不知道你为什么一开始就这样做:

var hover = $('#container');
$(hover).hover(function(){

你可以这样做:

var container = $('#container');
container.hover(function(){

或者这样:

$('#container').hover(function(){

此外,没有理由这样做:

$(this).find('#first')

这些id在页面中必须是唯一的,所以最好use:

$('#first')

这在 jQuery 中会更快,因为它将能够在内部使用 document.getElementById('first')

You just need to supply at least the first parameter to .stop(true, true) to clear the current queue and you can decide if you also want to supply the second parameter to jump to the end of the animation when the next one starts (that's up to you as it gives a slightly different effect). You also need to place the .stop() calls before the .delay() so you aren't clearing the .delay(). See the jQuery doc for .stop() to understand the two parameters for .stop(). When I do that here: http://jsfiddle.net/jfriend00/pYgQr/, it seems to handle fast hover in/out just fine.

// On hover function
var hover = $('#container');
hover.hover(function(){

    $(this).find('#first').stop(true, true).animate({left:10}, 600);
    $(this).find('#second').stop(true, true).delay(100).animate({left:10}, 600);
     $(this).find('#third').stop(true, true).delay(250).animate({left:10}, 600);

}, function() {

    $(this).find('#first').stop(true, true).animate({left:-100}, 600);
    $(this).find('#second').stop(true, true).delay(100).animate({left:-100}, 600);
    $(this).find('#third').stop(true, true).delay(250).animate({left:-100}, 600);

}); // on mouse out hide divs

Also, I don't know why you're doing this at the beginning:

var hover = $('#container');
$(hover).hover(function(){

You can either do this:

var container = $('#container');
container.hover(function(){

or this:

$('#container').hover(function(){

In addition, there is no reason to do:

$(this).find('#first')

These are ids which must be unique in the page so it's better to use:

$('#first')

This will be faster in jQuery because it will be able to just use document.getElementById('first') internally.

悟红尘 2024-12-14 04:07:19

试试这个 http://jsfiddle.net/5zcv3/5/

你不必同时使用两者delayanimate,只需给animate不同的速度即可; 效果类似,stop 是必须的

根据我的经验,

try this http://jsfiddle.net/5zcv3/5/

you don't have to use both delay and animate, just give animate different speed; the effect is similar

based on my experience, stop is a must

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文