根据设备使用 ontouchstart() 或 onclick()
use ontouchstart() or onclick() depending on device
首先,我知道有几种解决方法,such as 使 ontouchstart
和 onclick
相同。但是有没有办法检查用户是否有 smartphone/tablet/touchscreen 设备与笔记本电脑或计算机,并将 ontouchstart
的功能更改为 click
?这是解决它的一种方法的示例:
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();
html {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
<h1><span id="clicks"></span></h1>
此代码片段表明我已经 "identified" 判断它是否是触摸屏设备,并根据该信息执行了一些操作。 (仅供参考,当您 运行 代码片段时,请确保 click/tap 在空白处 space 以接收输出)
但是,我不想这样做,因为我有很多功能依赖于 <button onclick="click()">click</button>
之类的东西。如果它是触摸屏设备,我想想出一个简单的方法来将 onclick
部分更改为 ontouchstart
。我只使用 JavaScript 编写脚本,谢谢!
此外,如果您认为没有办法这样做,是否有更好的方法来根据用户是否有触摸屏或其他设备来检查和执行代码(通过单击或触摸)?
编辑:
我通常只会点击,但页面上的某些项目可能会被快速点击,或者至少快于 300 毫秒
您可以在 touchstart
上触发 click
事件,因此...
document.addEventListener('touchstart', (e) => {
// prevent duplicate clicks
e.preventDefault()
e.target.dispatchEvent(new Event('click'))
))
不过请注意,这非常脆弱,因为事件对象上的数据 — e
— 不会传播到点击事件。
首先,我知道有几种解决方法,such as 使 ontouchstart
和 onclick
相同。但是有没有办法检查用户是否有 smartphone/tablet/touchscreen 设备与笔记本电脑或计算机,并将 ontouchstart
的功能更改为 click
?这是解决它的一种方法的示例:
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();
html {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
<h1><span id="clicks"></span></h1>
此代码片段表明我已经 "identified" 判断它是否是触摸屏设备,并根据该信息执行了一些操作。 (仅供参考,当您 运行 代码片段时,请确保 click/tap 在空白处 space 以接收输出)
但是,我不想这样做,因为我有很多功能依赖于 <button onclick="click()">click</button>
之类的东西。如果它是触摸屏设备,我想想出一个简单的方法来将 onclick
部分更改为 ontouchstart
。我只使用 JavaScript 编写脚本,谢谢!
此外,如果您认为没有办法这样做,是否有更好的方法来根据用户是否有触摸屏或其他设备来检查和执行代码(通过单击或触摸)?
编辑:
我通常只会点击,但页面上的某些项目可能会被快速点击,或者至少快于 300 毫秒
您可以在 touchstart
上触发 click
事件,因此...
document.addEventListener('touchstart', (e) => {
// prevent duplicate clicks
e.preventDefault()
e.target.dispatchEvent(new Event('click'))
))
不过请注意,这非常脆弱,因为事件对象上的数据 — e
— 不会传播到点击事件。