停止元素跳动jquery

发布于 2024-12-07 16:02:50 字数 578 浏览 0 评论 0原文

我有以下 jquery,它使按钮链接跳动。

 $('#BtnBoxGreeting').effect('pulsate', { times: 3 }, 800,function(){
                                        setInterval(function(){
                                        $('#BtnBoxGreeting').show('pulsate', { times: 3 }, 800, '');
                                        },8000);
                                         });
                <% end %>
                $('#BtnBoxGreeting').click(function(){
                    $(this).stop();
                });

我希望效果在单击按钮时停止,但由于间隔循环,它只是继续进行。 单击按钮时如何停止动画?

I have the following jquery that pulsates a button link.

 $('#BtnBoxGreeting').effect('pulsate', { times: 3 }, 800,function(){
                                        setInterval(function(){
                                        $('#BtnBoxGreeting').show('pulsate', { times: 3 }, 800, '');
                                        },8000);
                                         });
                <% end %>
                $('#BtnBoxGreeting').click(function(){
                    $(this).stop();
                });

I want the effect to stop when the button is clicked but it just keeps on going because of the interval loop.
How can I stop the animation when the button is clicked?

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

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

发布评论

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

评论(4

左秋 2024-12-14 16:02:50
  1. 创建一个外部变量,例如 var pulsatingInterval
  2. 为其分配 setInterval 调用:

    pulsatingInterval = setInterval(...);

  3. 单击按钮时清除此间隔

    clearInterval(pulsatingInterval);

  1. Make an external variable, say var pulsatingInterval
  2. Assign setInterval call to it:

    pulsatingInterval = setInterval(...);

  3. Clear this interval on button click

    clearInterval(pulsatingInterval);

悲凉≈ 2024-12-14 16:02:50

我发现以下解决方案对我来说最简单并且效果很好。

我为我想要脉动的元素提供了一个“脉动”类,如下所示:

<div id="buttons">
<%= link_to '', new_greeting_path, :remote => true, :id => "BtnBoxGreeting", :class => "button-post pulsate" %>
</div>

在“单击”按钮时,我删除了该类:

var greeting_timing = 8000;
             $('.pulsate').effect('pulsate', { times: 3 }, 800,function(){
                                    setInterval(showPulsating, greeting_timing);
                                });
                                function showPulsating(){
                                    $('.pulsate').effect('pulsate', { times: 3 }, 800, ''); 
                                }
                $("div#buttons>a").click(function(){
                    $(this).removeClass("pulsate");
                });

这样我就不必担心间隔再次开始。

I found the following solution the easiest for me and works very well.

I give a class 'pulsate' to the element I want to pulsate as follows:

<div id="buttons">
<%= link_to '', new_greeting_path, :remote => true, :id => "BtnBoxGreeting", :class => "button-post pulsate" %>
</div>

On the 'click' of the button I remove the class:

var greeting_timing = 8000;
             $('.pulsate').effect('pulsate', { times: 3 }, 800,function(){
                                    setInterval(showPulsating, greeting_timing);
                                });
                                function showPulsating(){
                                    $('.pulsate').effect('pulsate', { times: 3 }, 800, ''); 
                                }
                $("div#buttons>a").click(function(){
                    $(this).removeClass("pulsate");
                });

This way I did not have to worry about the Interval starting again.

套路撩心 2024-12-14 16:02:50

当你 $(this).stop();这部分指的是按钮的点击动作,而不是效果。
在此处查看 .stop() 选项: http://api.jquery.com/stop/

我打赌像 $('#BtnBoxGreeting').stop() 这样的东西会起作用。

when you $(this).stop(); the THIS part refers to the click action of the button, not the effect.
check out the .stop() option here: http://api.jquery.com/stop/

I bet something like $('#BtnBoxGreeting').stop() will work.

一刻暧昧 2024-12-14 16:02:50

我认为您需要设置一个变量来指示是否单击停止。如果是这样,请勿在 setinterval 方法中执行脉动操作(在该变量上包含 if)。当然,一旦超时,就无法再停止脉动动作了。

例子:

var stopped = false;

$('#BtnBoxGreeting').effect('pulsate', { times: 3 }, 800,function(){ 
    setInterval(showPulsating, 8000); 
}); 

function showPulsating(){
   if(!stopped)
      $('#BtnBoxGreeting').show('pulsate', { times: 3 }, 800, ''); 
}

$('#BtnBoxGreeting').click(function(){ 
   stopped = true;
}); 

I think you need to set a variable that indicates whether stop is being clicked. If so, do not execute the pulsate action in the setinterval method (include an if on that variable there). Of course, once the timeout is expired, you cannot stop the pulsate action anymore.

Example:

var stopped = false;

$('#BtnBoxGreeting').effect('pulsate', { times: 3 }, 800,function(){ 
    setInterval(showPulsating, 8000); 
}); 

function showPulsating(){
   if(!stopped)
      $('#BtnBoxGreeting').show('pulsate', { times: 3 }, 800, ''); 
}

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