javascript - JQuery e.offsetX 跳跃值问题

标签 javascript jquery

我正在开发一个视频进度条,它应该具有搜索(拖动或单击以搜索)的能力,我遇到的问题相当令人困惑,并且与进度条的拖动功能有关。

拖动进度条时,进度条将从鼠标的位置移动到进度条的开头,而不是保持在靠近鼠标位置的正确位置。

问题的演示可用 here .

注意:不要担心松开鼠标后自动收报机不保持其值,我的问题是当用户将鼠标拖到进度上时自动收录机回到 0%栏。

最佳答案

解决方案

在不更改标记的情况下,检查触发器(该词是否存在?)是否为 #progress(或不是 #progress-bar):

$(document).on('mousemove', '#progress', function(e) {
    if (progressTicking && (e.target.id === 'progress')) {
        ...

Here's a working demo of it.

虽然仍然存在一些错误行为,例如光标在 #progress#progress-ticker 之间悬停时的差异,并且有点滞后。

解释

只要鼠标在 #progress 及其子项中移动,您的事件 mousemove 就会被触发。

它被称为事件捕获(图表来自QuirksMode.org):

               | |
---------------| |-----------------
| element1     | |                |
|   -----------| |-----------     |
|   |element2  \ /          |     |
|   -------------------------     |
|        Event CAPTURING          |
-----------------------------------

因此,每次移动都会调用您的函数两次(几乎,除非您移动得非常慢),一次由 #progress 调用,一次由 #progress-ticker 调用。

所以,e 的当前目标是一半时间,而不是您期望的元素,并且您得到了错误的 offsetX =鼠标#progress-ticker

建议

您可以使用 -webkit-appearance: slider-horizo​​ntal ( here's a list of values for webkit ) 查看浏览器对 slider 的实现,例如在 webkit 中

关于javascript - JQuery e.offsetX 跳跃值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22937757/

相关文章:

javascript - div id "wrapper"未在盒模型中运行

javascript - 面向对象的 JavaScript 最佳实践问题 : How should I configure my objects for the following

javascript - 使用每条消息将channelData发送到网络聊天

javascript - 在 python 中使用 selenium 单击相同的按钮配置

javascript - iFrame 中的 jquery 访问元素

jquery - 在手机上单击/触摸通过api启动Youtube视频

Jquery 显示/隐藏切换下一步

javascript - 如何通过服务(AngularJS)用值填充变量

javascript - 在 Mobile Safari 上执行操作(经过一段时间后)

javascript - 无法读取未定义的属性 'mode'