【问题标题】:Create a custom event like 'click' for longtap为 longtap 创建一个自定义事件,如“点击”
【发布时间】:2019-11-09 02:46:47
【问题描述】:

我想做一个自定义事件,我可以像这样使用

$('.entry').on('click', function().......

我需要它来检测移动设备的长按。我想这样称呼它:

$('.entry').on('longtap', function().......

我阅读了很多关于创建事件的内容,但大多数方法是使用绑定和触发器。那么有没有办法做到这一点?

【问题讨论】:

  • longtap 应该何时触发?
  • 我有一张有很多行的表。如果用户长按一行,我想触发,以便我可以选择它。

标签: javascript jquery mouseevent dom-events


【解决方案1】:

这是实现长按的一种方法:

var clickStart;

document.getElementById("cool_button").addEventListener('mousedown', function() {
  console.log('mouse down');
  this.clickStart = new Date().getTime();
});

document.getElementById("cool_button").addEventListener('mouseup', function() {
  console.log('mouse up');
  if ((new Date().getTime() - this.clickStart) >= 1000) {
    console.log('this is a long tap');
  }
});
<button id="cool_button">i'm a long tap button</button>

【讨论】:

    【解决方案2】:
    1. 您可以使用其中一种手工解决方案,提供here
    2. 您可以将其附加为third-party script
    3. jQuery Mobile 有一个特殊的taphold 事件。

    【讨论】:

    • 我不能使用 jquery mobile,因为它对我的前端做了很多奇怪的事情——如果我只使用没有 css 的 js 文件。我会看看第三方脚本。这似乎是一个很好的解决方案。
    • 我使用了第三方脚本,非常小巧方便。我做了一些小的修改以满足我的需要,所以它有效!谢谢大家!
    • 我很高兴这有帮助!
    【解决方案3】:

    正如here 所说,你不需要为longtap创建自定义事件,你只需要js定时器和两个已经存在的事件,如mouseup、mousedown:

    var pressTimer;
    
    $(".entry").mouseup(function(){
      clearTimeout(pressTimer);
      // Clear timeout
      return false;
    }).mousedown(function(){
      // Set timeout
      pressTimer = window.setTimeout(function() {
      console.log("hi!")
      },1000);
      return false; 
    });
    

    我给你做了个例子

    https://jsfiddle.net/sOoN92/74rbc2ph/

    【讨论】:

      猜你喜欢
      • 2013-02-18
      • 2014-10-31
      • 2011-05-22
      • 2016-08-11
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多