【问题标题】:JQuery hover, click and touch combinationjQuery悬停、点击和触摸组合
【发布时间】:2014-09-26 09:42:43
【问题描述】:

我想使用悬停、点击和触摸事件来显示和隐藏一个元素。这背后的想法是,您将能够将相同的元素用于触摸设备、使用鼠标的设备和组合设备,例如具有触摸功能的笔记本电脑。所以我需要结合鼠标和触摸输入。 问题是事件相互影响,当我使用触摸时会触发多个事件,导致元素一次又一次地显示和隐藏。

我怎样才能得到我想要的行为;

  • 点击和触摸切换
  • 在 mouseenter 上显示
  • 鼠标移出时隐藏

我尝试了多种实现,例如以下,但似乎没有一个是稳定的。

 $("#showMe").hide();
 $(document).on('touchstart click mouseenter mouseout', '#thingToTrigger', function (event) {
    event.stopPropagation();
    if (event.handled !== true) {
        $("#showMe").toggle(1000);
        event.handled = true;
    } else {
        return false;
    }
});

这里是 JSFiddle http://jsfiddle.net/9305f9d7/

【问题讨论】:

    标签: javascript jquery hover touch mouseevent


    【解决方案1】:

    您想要实现的主要目标是禁用默认行为。

    您可以为各种事件添加侦听器,并在事件侦听器的开头阻止其他事件。例如:

    $(document).on('touchstart click', '#thingToTrigger', function (event) {
        event.preventDefault();
        //Do Touch specific stuff, e.g. toggle()
    });
    
    $(document).on('mouseenter', '#thingToTrigger', function (event) {
        event.preventDefault();
        //Do Mouseenter specific stuff, e.g. show()
    });
    
    $(document).on('mouseout', '#thingToTrigger', function (event) {
        event.preventDefault();
        //Do Mouseout specific stuff, e.g. hide()
    });
    

    【讨论】:

      【解决方案2】:

      您可以在单击该元素时添加类。

      e.g. #div1 and #div2
      
      $("#div1").click(function(){
          $(this).toggleClass("clicked");
          $("#div2").show();
      });
      
      $("#div1").on("mouseenter",function(){
          $("#div2").show();
      });
      
      $("#div1").on("mouseout",function(){
          if($(this).hasClass("clicked")==false) $("#div2").hide();
      });
      

      希望对您有所帮助。

      【讨论】:

      • 如果我不想包含触摸,无论是否使用切换类都可以。问题不在于悬停事件也触发单击事件,而是触摸事件触发 mouseenter 事件,然后触发 mouseout 事件。添加一个类来解决这个问题与添加一个变量来跟踪显示和隐藏是一样的。这对我来说似乎不是一个非常优雅的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多