有没有办法手动向所有用户输入DOM事件添加延迟?
对于研究实验,我正在尝试在移动浏览器上延迟用户界面(创建滞后),因为我正在研究UI延迟在WebApps中的影响。例如,如果用户滚动滚动操作仅发生(例如)50ms之后。
我已经尝试了window.addeventlistener()
,然后window.dispatchevent()
在使用settimeout()
的一定延迟后。霍弗(Howver),在滚动的情况下,手动派遣活动后没有滚动页面。使用window.scrollby()
滚动确实有效,但它会发出自己的事件。
window.addEventListener('wheel', event => {
console.log(event)
if (event.cancelable) {
event.preventDefault()
event.stopImmediatePropagation()
setTimeout(() => {
let newEvent = new WheelEvent('wheel', {
deltaX: event.deltaX,
deltaY: event.deltaY,
deltaZ: event.deltaZ,
cancelable: false,
})
window.dispatchEvent(newEvent)
// window.scrollBy({ top: 20 })
}, DELAY)
}
}, {
capture: true,
passive: false,
})
这适用于车轮事件,但不适合触摸事件。 如果有一种方法可以概括所有鼠标的行为? 理想情况下,我想处理所有DOM Mouseevent
的s,就像某种中间件一样。
For a research experiment I am trying to delay the user interface (create lag) on mobile browsers, as I am researching the effects of UI latency in webapps. For example, if a user scrolls the scroll action only happens (e.g.) 50ms later.
I've tried window.addEventListener()
, and then window.dispatchEvent()
after a certain delay with setTimeout()
. Howver, in the case of scrolling, this did not scroll the page after dispatching the event manually. Scrolling with window.scrollBy()
does work, but it fires its own event.
window.addEventListener('wheel', event => {
console.log(event)
if (event.cancelable) {
event.preventDefault()
event.stopImmediatePropagation()
setTimeout(() => {
let newEvent = new WheelEvent('wheel', {
deltaX: event.deltaX,
deltaY: event.deltaY,
deltaZ: event.deltaZ,
cancelable: false,
})
window.dispatchEvent(newEvent)
// window.scrollBy({ top: 20 })
}, DELAY)
}
}, {
capture: true,
passive: false,
})
This works for wheel events, but not for touch events.
If there a way to generalize this behaviour for all MouseEvents?
Ideally I would like to process all DOM MouseEvent
's, like some sort of middleware.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论