【问题标题】:Is there a better way to handle a "hover" event on touch devices?有没有更好的方法来处理触摸设备上的“悬停”事件?
【发布时间】:2016-05-26 00:09:01
【问题描述】:

有没有比使用全局事件处理程序来检测用户何时点击其他东西更好的方法来处理触摸设备上的“悬停”(此点击,然后生效直到点击其他内容)事件?


例如,此代码可能有效,但它依赖于附加到文档正文的事件侦听器,因此在性能方面存在问题。

//note a namespace is used on the event to clear it without clearing all event listeners
$('myDiv').on('touchstart.temp', function () {
    //do stuff
    $('body').not(this).on('touchstart.temp', function () {
        //undo stuff
        $('body').not(this).off('touchstart.temp');
    });
});

【问题讨论】:

    标签: javascript jquery touch


    【解决方案1】:

    将来您应该能够使用适用于特定元素的touchentertouchleave 事件。

    $("myDiv").on("touchenter mouseover", function() {
        // do hover start code
    }).on("touchleave mouseleave", function() {
        // do hover end code
    });
    

    但根据MDN的说法,这只是一个尚未实施的提案。

    如果您使用 jQuery Mobile,则可以使用 vmouseovervmouseleave 事件,它们在移动设备上模拟鼠标事件。

    【讨论】:

      【解决方案2】:

      Javascript onmouseover 和 onmouseout 事件可以正常工作! :)

      它不适用于移动设备,但我相信你已经预料到了。

      编辑:我还注意到您包含了 JQuery 标记。如果您愿意,也可以使用 JQuery hover 方法。

      $('div').hover(function(){
          $(this).css('background-color', 'red');
          }, function(){
          $(this).css('background-color', 'blue');
      });
      

      示例:https://jsfiddle.net/sofdz0s2/

      至于在所有触控设备上悬停,在所有触控设备之间不是恒定的。点击后我的不会一直悬停。 (我尝试点击更改的 div,然后点击绿色 div,但点击后它一直悬停。)

      编辑 2:

      正如 cmets 中所说,touchenter 和 touchleave 可能是您想要的。

      我希望这会有所帮助!

      【讨论】:

      • 不,我需要它在移动设备上工作,任何触摸设备,这就是问题所在。
      • @Barmar 我应该吗?在决定是否值得为其添加更多库功能之前,我尝试至少知道如何在 vanilla JS 中做事。
      • @Viziionary 我看到了 jQuery 标记,所以我认为您不反对使用库来简化它。我猜原版 JS 应该是 touchstart 和 touchend?
      • @Barmar 以及 JQuery mobile 将是一个单独的库来添加对吗?但如果它有一个好的解决方案,我不会反对它。我至少可以看看他们的源代码是如何做到的。
      • 也许这就是您要找的东西? javascriptkit.com/javatutors/touchevents.shtml
      猜你喜欢
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多