📜  如何绑定“touchstart”和“click”事件但不响应两者?(1)

📅  最后修改于: 2023-12-03 15:09:13.903000             🧑  作者: Mango

如何绑定“touchstart”和“click”事件但不响应两者?

在移动端开发中,我们经常需要绑定touchstart和click事件来处理用户交互。但是,由于移动端的touch事件和click事件存在延迟和触发条件不同的情况,会导致用户体验不佳。

为了解决这个问题,我们可以绑定touchstart事件和click事件,但只响应其中的一个。

解决方案

根据移动端和PC端事件的区分,我们可以使用以下代码来实现:

let isTouchDevice = 'ontouchstart' in document.documentElement;
let eventType = isTouchDevice ? 'touchstart' : 'click';

element.addEventListener(eventType, function(event) {
  event.preventDefault();
  // 事件处理代码
});

上面的代码会先检测当前设备是否支持touch事件,如果支持则使用touchstart事件,否则使用click事件。同时,在事件处理函数中,我们还可以使用event.preventDefault()方法来禁止浏览器默认行为,避免出现一些意外情况。

关于返回结果

根据以上方案,我们可以得到一个函数如下:

function bindEvent(element, eventHandler) {
  let isTouchDevice = 'ontouchstart' in document.documentElement;
  let eventType = isTouchDevice ? 'touchstart' : 'click';

  element.addEventListener(eventType, function(event) {
    event.preventDefault();
    eventHandler(event);
  });
}

以上函数可以用于绑定touchstart和click事件,并且只响应其中一个事件,即在移动端使用touchstart事件,在PC端使用click事件。