提问人:Brian 提问时间:10/20/2023 更新时间:10/20/2023 访问量:35
如何在 JavaScript 中迭代 TouchList 中触摸事件的所有触摸事件属性?
How do I iterate over all touch event properties in the TouchList for a touch event in JavaScript?
问:
我试图理解触摸事件,但我无法让任何事情起作用。
我有一个非常简单的页面来测试这一点:
HTML格式:
<div id="TOUCHME"> TOUCH ME </div>
<div id="OUTPUT"></div>
JavaScript的:
const TOUCHME = document.getElementById('TOUCHME');
const OUTPUT = document.getElementById('OUTPUT');
TOUCHME.addEventListener('touchstart',(evt)=>{
evt.preventDefault();
let touches = evt.touches;
for(let i=0; i<touches.length; i++){
let newDiv = document.createElement('div');
newDiv.appendChild(document.createTextNode(touches[i]));
OUTPUT.appendChild(newDiv);
}
});
但是,正如您可以猜到的那样,什么都没有显示。我什至引用了 MDN,它们有一个几乎相同的示例。
我在 StackOverflow 上找到了一些信息,但他们说做这样的事情:
var touch = event.touches[0];
var x = touch.pageX;
var y = touch.pageY;
这确实有效,但是如果一个人不知道这是您需要访问的内容怎么办?除了搜索 MDN 之外,一个人应该如何知道 MDN 的所有属性,除非他们可以迭代 ?touch[0]
touch[0]
TouchList
我也试过这个:
Object.entries(evt.touches)
和
Object.entries(evt.touches[0])
但这些都没有奏效;这意味着我无法遍历任何列表,因为它们的大小始终是 .0
那么,一个人如何迭代触摸的触摸属性呢?TouchList
答:
0赞
Mue
10/20/2023
#1
您必须直接访问 Touch 事件的属性;解构任务在这里似乎行不通。
const TOUCHME = document.getElementById('TOUCHME');
const OUTPUT = document.getElementById('OUTPUT');
TOUCHME.addEventListener('touchstart', (evt) => {
evt.preventDefault();
let touches = evt.touches;
for (i = 0; i < touches.length; i++)
OUTPUT.appendChild(
document.createTextNode(
touches.item(i).identifier + " "
)
)
});
<div id="TOUCHME"> TOUCH ME </div>
<div id="OUTPUT"></div>
(i) 如果您使用的是非接触式设备,请确保在开发工具中激活触摸模拟。例如,在Firefox中,这是在这里完成的:https://firefox-source-docs.mozilla.org/devtools-user/responsive_design_mode/#controlling-responsive-design-mode(搜索“启用/禁用触摸模拟”)
评论
0赞
Brian
10/20/2023
所以没有办法“盲目地”迭代以获得所有属性?TouchList
评论