【问题标题】:jQuery - Simultaneous hover actions on multiple CSS classesjQuery - 多个 CSS 类的同时悬停动作
【发布时间】:2012-02-19 04:22:52
【问题描述】:
$(document).ready(function() {
    $('.button').hover(function() {
        $(this).toggleClass('button-hover',200);
    },function() {
        $(this).toggleClass('button-hover',200);
    });
});
$(document).ready(function() {
    $('.button-rounded').hover(function() {
        $(this).toggleClass('button-rounded-hover',200);
    },function() {
        $(this).toggleClass('button-rounded-hover',200);
    });
});

<div class="button">Add class `button-hover` to this `div` on mouse over.</div>
<div class="button button-rounded">Add class `button-hover` and 
    class `button-rounded-hover` to this `div` on mouse over.</div>

在第二个div 上,整个动画需要 400 毫秒:button-hover 切换需要 200 毫秒,button-rounded-hover 切换需要另外 200 毫秒。 如何同时执行这些切换?

注意事项:

  • 我正在使用 OOCSS,所以button-rounded 扩展了button,而button-rounded-hover 扩展了button-hover。我不想定义button-rounded-hover 几乎与button-hover 完全一样,因为那不会很干燥(不要重复自己)所以这就是为什么我在第二个div 上使用两个类和两个悬停调用.
  • 这两个动作都需要 200 毫秒。我不想将它们中的任何一个设为 0(瞬时)。

【问题讨论】:

  • 同时?你的意思是你想让两个动画响应同一个事件吗?就目前而言,您的代码为两个独立的非嵌套(因此非冒泡)事件建立了两个处理程序。
  • @Beetroot-Beetroot:是的,当用户将鼠标悬停在元素上时,我希望同时添加两个类。
  • 因此,将鼠标悬停在任一元素上会同时为两个元素设置动画?
  • @Beetroot-Beetroot 第二个 div 有两个类,所以第一个处理程序适用于两者。据我了解,OP 希望让第一个行为像现在一样,但第二个同时执行两个转换(按钮悬停和按钮圆形悬停)。现在,将鼠标悬停在 2nd 上会同时激活两个处理程序。
  • @mgibsonbr 是的,我有点慢。如果我现在理解正确,我下面的答案应该有效。

标签: jquery hover toggleclass oocss


【解决方案1】:

如果每个具有.button-rounded 类的元素也有.button 类(这就是我对“按钮圆形扩展按钮”的理解),你应该只为按钮添加一个悬停句柄,并选择要切换的类基于您的元素是否具有按钮圆形类。示例:

$(document).ready(function() {
    $('.button').hover(function() {
        $(this).toggleClass(
            ($(this).hasClass('button-rounded') ? 'button-rounded-hover ' : '') +
            'button-hover',
            200
        );
    });
});

toggleClass 还接受由空格分隔的类列表,因此您可以通过这种方式同时切换多个类。

注意:由于 "over" 和 "out" 函数是相等的,您可以使用单个函数,它将同时应用于两个事件。

【讨论】:

  • 但是在button-rounded 元素上,我需要添加两个 类,因为button-rounded-hover 扩展了button-hover。如果我只添加了button-rounded-hover,那么button-hover 中的所有样式都不会被应用。
  • 答案已更新。 toggleClass 接受空格分隔的类名,例如“button-hover button-rounded-hover”。将其传递给 toggleClass 将使两个动画同时进行。
【解决方案2】:

应该这样做:

javascript:

$(document).ready(function() {
    $('.button').hover(function() {
        $(this).toggleClass('button-hover',200);
    });
    $('.button-rounded').hover(function() {
        $(this).toggleClass('button-hover button-rounded-hover',200);
    });
});

HTML:

<div class="button">Add class `button-hover` to this `div` on mouse over.</div>
<div class="button-rounded">Add class `button-hover` and class `button-rounded-hover` to this `div` on mouse over.</div>

注意从第二个 div 中删除类 button,这可能需要重新定义这两个类的 CSS。

【讨论】:

  • 见我上面关于 OOCSS 的注释。第二个 div 需要有两个类。
  • 不得不承认,我从来没有听说过OOCSS。
  • 基本上这个想法是所有按钮都有某些规则。一些圆形的按钮有一些额外的规则。我只在button-rounded 中定义了额外的规则,而不是在两个类中定义通用规则(重复自己),然后将两个类应用于元素。面向对象的 CSS。
  • 所以 OOCSS 不是一种不同的技术,它只是对级联的利用?
  • 没错。它是一种范式,而不是一种语言。如果我在我的电脑上而不是我的 iPhone 上,我会引用一些资源。谷歌“OOCSS”和“妮可沙利文”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
  • 2019-11-23
  • 1970-01-01
  • 2012-02-09
  • 1970-01-01
相关资源
最近更新 更多