【问题标题】:Initialize a hover state only once the mouse has clicked and moused out of the element仅在鼠标单击并移出元素后才初始化悬停状态
【发布时间】:2015-02-04 21:29:17
【问题描述】:

我有一个简单的链接,每次点击都会切换。当链接处于“单击”状态时,还有一个悬停状态会添加到链接中。请参见下面的示例:

<style>
  .added {
    &:hover {
      background-color: red;
    }
  }
</style>

<script>
  $('a').on('click', function() {

    var $link = $(this);

    if ( $link.hasClass('added') ) {

      $link
        .removeClass('added')
        .html('Add Me!')

    } else {

      $link
        .addClass('added')
        .html('Added');

  });
</script>

<a href='#'>Add Me!</a>

这里的挑战是,我希望按钮在单击“添加我!”后立即变为红色(因为鼠标在技术上仍然悬停在链接上)。只有在我单击、移开然后返回时,它才会变为红色。

有没有使用 CSS 和/或 jQuery 的简洁方法?

【问题讨论】:

    标签: javascript jquery html css sass


    【解决方案1】:

    您可以使用 jQuery 的 mouseout() 函数来实现这一点。

    在这里,我修改了您现有的代码(进行了一些小修复)以包括对 mouseout 的检查以添加 .ready 类:

      $('a').click(function() {
        var link = $(this);
        if ( link.hasClass('added') ) {
          link.removeClass('added').removeClass('ready').html('Add Me!');
        } else {
          link.addClass('added').html('Added');
          // Check if .ready is applied already
          if(!link.hasClass('ready')){
            link.mouseout(function(){
              link.addClass('ready');
            });
          }
        }
      });
    

    并修改您的 SASS 以包含 .ready:

      .added.ready{
        &:hover {
          background-color: red;
        }
      }
    

    你可以在这个小提琴上看到它的实际效果:http://jsfiddle.net/easL77fa/

    【讨论】:

    • 这个解决方案非常接近。除了类之外,您还需要删除 mouseout 事件。当切换回“添加我!”然后鼠标移出,“就绪”类再次放置在链接上。这会导致它在下次立即变为红色,而不是等待鼠标移出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 2010-12-12
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多