Chrome 区域外事件捕捉:如何在不支持 setCapture() 的情况下实现进度条拖动?
2024-10-29 17:19:10
0浏览
收藏
欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《Chrome 区域外事件捕捉:如何在不支持 setCapture() 的情况下实现进度条拖动?
》,这篇文章主要讲到等等知识,如果你对文章相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

Chrome 区域外事件捕捉实现
虽然 setCapture() 方法在 Google Chrome 中不受支持,并且 window.captureEvents() 已被废弃,但仍有方法可以实现进度条拖动至区域外后继续触发鼠标移动事件。
以下代码段展示了一种使用 JavaScript 事件监听器和属性的方法:
const button = document.querySelector('button');
button?.addEventListener('mousedown', handleMoveStart);
let startPoint: { x: number; y: number } | undefined;
let originalOnSelectStart: Document['onselectstart'] = null;
function handleMoveStart(e: MouseEvent) {
e.stopPropagation();
if (e.ctrlKey || [1, 2].includes(e.button)) return;
window.getSelection()?.removeAllRanges();
e.stopImmediatePropagation();
window.addEventListener('mousemove', handleMoving);
window.addEventListener('mousedown', handleMoveEnd);
originalOnSelectStart = document.onselectstart;
document.onselectstart = () => false;
startPoint = { x: e.x, y: e.y };
}
function handleMoving(e: MouseEvent) {
if (!startPoint) return;
// DO Something
}
function handleMoveEnd(e: MouseEvent) {
window.removeEventListener('mousemove', handleMoving);
window.removeEventListener('mousedown', handleMoveEnd);
startPoint = undefined;
if (document.onselectstart !== originalOnSelectStart) {
document.onselectstart = originalOnSelectStart;
}
}当用户在进度条元素上按下鼠标按钮时,handleMoveStart 函数会触发。它会阻止默认的 onselectstart 事件并捕捉鼠标移动事件,允许用户将进度条拖动到区域外。
handleMoving 函数处理用户鼠标移动事件,执行所需的逻辑(例如更新进度)。
handleMoveEnd 函数在用户释放鼠标按钮时触发,它将删除鼠标移动事件监听器并恢复原始的 onselectstart 事件行为。
今天关于《Chrome 区域外事件捕捉:如何在不支持 setCapture() 的情况下实现进度条拖动? 》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!
小程序多语言环境自动切换:如何实现用户语言的精准获取和应用?
- 上一篇
- 小程序多语言环境自动切换:如何实现用户语言的精准获取和应用?
- 下一篇
- Go 中 var 和 type 声明结构体有什么区别?

