javascript - Vue mouseevents 在元素之外丢失了引用
问题描述
我正在尝试使用 Vue 实现一个多滑块范围组件。我发现的最合适的例子如下:https ://codesandbox.io/s/vue-price-range-slider-forked-czw1d
我正在尝试重构它的代码,但我遇到了一个问题……在第 153 行,PriceRangeSlider.vue
我们有代码循环["mouseup", "mousemove"]
以将这些事件添加到 document.body。
我已经使用 @mouseup 和 @mousemove 本机 vue 方法将这些事件直接移动到 track1 和 track2 元素。问题是现在只有当鼠标正好在这些元素内时才会发生拖动。我希望即使我移到它的元素之外,没有 mouseup,仍然会拖动。
我所做的是在这个链接上:https ://codesandbox.io/embed/vue-price-range-slider-forked-ubzxf
这是相同的代码,但我已经进行了上述更改。
谁能帮我理解为什么会发生这种情况?
解决方案
您需要在 body 上而不是在此元素上跟踪 mousemove 事件。所以这段代码
"mousemove",
"touchstart",
"touchmove",
"touchend",
].forEach((type) => {
document.querySelector(".track1").addEventListener(type, (ev) => {
ev.stopPropagation();
self[type](ev, "track1");
});
对您的情况无效。你需要的是
onclick = () => document.body.addEventListener('mousemove', yourHandler)
document.body.addEventListener([mouseup, mouseleave], () => document.body.removeEventListener('mousemove', yourHandler)
您的处理程序应将基于偏移量的值移动到上一个事件。
推荐阅读
- opengl - 将轴对齐的单位向量编码为单个浮点值
- fortran - 获取 Fortran 数组的步长
- android - How to display Login welcome message?
- excel - 在 VBA 中使用 SubTotal 但出现溢出错误
- c# - 如何解决 dot net core 2.0 Angular 项目的 VeraCode 问题“使用损坏或有风险的加密算法 (CWE ID 327)”?
- javascript - 无法处理 url 中的“/__auth/handler/”路由?
- javascript - 如何填充与在表格中单击的特定项目有关的数据?
- sed - 从 txt 中删除最后一列(pdb 文件保持其原始格式
- php - MDBTools 驱动程序在 MS Acess 备忘录数据类型上无法正常工作
- spring-boot - Axios 将 GET 和 POST 请求发送到 localhost 而不是 heroku 上的 URL