首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据设备的不同使用ontouchstart()或onclick()

根据设备的不同使用ontouchstart()或onclick()
EN

Stack Overflow用户
提问于 2017-12-10 04:39:16
回答 2查看 1.8K关注 0票数 0

首先,我知道有几种方法可以解决这个问题,such as使ontouchstartonclick保持一致。但是,是否有办法检查用户是否有智能手机/平板电脑/触摸屏设备与笔记本电脑或计算机,并将ontouchstart的功能更改为click?下面是一个解决这个问题的方法:

代码语言:javascript
复制
var touchScreen = false;
var touches = 0;
var clicks = 0;

document.addEventListener("touchstart", function() {
  touchScreen = true;

  function touch() {
    touches++;
    console.log(touches);
    console.log(clicks);
    document.getElementById("clicks").innerHTML = "touches = " + touches + ", clicks = " + clicks;
  }
  touch();

});

function click() {
  if (touchScreen === false) {
    document.addEventListener("click", function(event) {
      clicks++;
      console.log(touches);
      console.log(clicks);
      document.getElementById("clicks").innerHTML = "touches = " + touches + ", clicks = " + clicks;
    });
  }
}
click();
代码语言:javascript
复制
html {
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
代码语言:javascript
复制
<h1><span id="clicks"></span></h1>

这个代码片段显示,我已经“识别”了它是否是触摸屏设备,并根据这些信息执行了一些操作。(在运行代码片段时,请确保单击/点击空格以接收输出)

但是,我不想这样做,因为我有许多函数依赖于诸如<button onclick="click()">click</button>之类的东西。如果onclick部件是触摸屏设备,我想找一种简单的方法将它更改为ontouchstart。我只在脚本中使用JavaScript,谢谢!

此外,如果您认为没有办法这样做,是否有更好的方法来检查和执行代码(点击或触摸)的基础上,如果用户有一个触摸屏或其他设备?

编辑:

我通常只需要点击,但是页面上的一些项目可能会以快速的速度点击,或者至少比300 of更快。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-10 07:52:03

您可以在click上触发touchstart事件,因此.

代码语言:javascript
复制
document.addEventListener('touchstart', (e) => {
  // prevent duplicate clicks
  e.preventDefault()

  e.target.dispatchEvent(new Event('click'))
))

注意,这是非常脆弱的,因为事件对象- e - will上的数据不会传播到单击事件。

票数 0
EN

Stack Overflow用户

发布于 2022-07-06 19:10:21

我这样做的方式是,我检查是否'ontouchstart' in window,并根据答案,我要么订阅touchstartclick

类似于:

代码语言:javascript
复制
if ('ontouchstart' in window) {
  document.addEventListener("touchstart", () => { /*...*/ });
} else {
  document.addEventListener("click", () => { /*...*/ });
}

编辑:在related SO questions上找到更多解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47735928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档