【问题标题】:Toggle class with delay on click切换类与点击延迟
【发布时间】:2018-02-21 21:30:47
【问题描述】:

我有一个按钮,当单击它时,我希望它延迟切换另一个元素的类。所以逻辑是:

  1. 点击按钮
  2. 延迟 500 毫秒
  3. 添加类
  4. 再次点击相同的按钮
  5. 延迟 500 毫秒
  6. 删除类

这是我目前得到的:

jQuery(".menu-button").click(function(){
    jQuery(".nav-bar-logo").delay(500).queue(function() {
        jQuery(this).toggleClass("nav-bar-logo-active");
    });
});

我知道在处理延迟和addClassremoveClass 时需要排队,但它似乎不适用于toggleClass

我得到的代码部分有效:类在初始点击延迟后切换,但再次点击时它什么也不做。

有人想解决这个问题吗?

【问题讨论】:

  • .delay() 用于动画效果。你想要.setTimeout()
  • 我认为this 不是你想的那样。
  • .delay 在这里应该没问题,结合 .queue。它具有在后续点击时与队列结合的额外好处。

标签: jquery


【解决方案1】:

正如 cmets 中所说,您正在寻找 .setTimeout()。根据您在下面的评论,您想切换.nav-bar-logo,您可以这样做:

jQuery('.menu-button').click(function() {
  window.setTimeout(function() {
    jQuery('.nav-bar-logo').toggleClass('nav-bar-logo-active');
  }, 500);
});

这里有一个小DEMO

jQuery('.menu-button').click(function() {
  window.setTimeout(function() {
    jQuery('.nav-bar-logo').toggleClass('nav-bar-logo-active');
  }, 500);
});
.nav-bar-logo {
  padding: 50px;
  background: red
}

.nav-bar-logo-active {
  background: green
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="menu-button">
  toggle button
</button>
<div class="nav-bar-logo">
  I'm going to change color when button toggled
</div>

【讨论】:

  • 您好,感谢您的回答,但我想将课程定位在一个名为 nav-bar-logo 的单独元素上
【解决方案2】:

this 不可用,因为它在延迟函数中,但我们可以访问点击事件:

jQuery(".menu-button").click(function(){
        window.setTimeout(function(){
                jQuery('.nav-bar-logo').toggleClass("nav-bar-logo-active");
            }, 500);
    });

【讨论】:

  • 你好,我在上面做了同样的评论。我需要将类定位在一个单独的元素上。感谢您的回答以为我不知道 this 在延迟功能中不可用
  • 那么我们就不需要这个事件了。我读这个比它更复杂一点。 window.setTimeout 应该适合您延迟操作的需要。
  • 感谢您的回答!这基本上就是上面那个人所做的,他提供了一个例子,所以我不得不接受他的。不过我支持你
猜你喜欢
  • 2023-04-04
  • 2016-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多