【问题标题】:Use jQuery to playback video when mouse moves on x axis当鼠标在 x 轴上移动时使用 jQuery 播放视频
【发布时间】:2016-10-11 17:22:00
【问题描述】:

当光标在 x 轴上移动时,我正在使用一点点 jQuery 在视频中来回滑动。

var mouseX;

$(document).mousemove( function moveFunc(e) {
mouseX = e.clientX;
var timV = $("#deko_vid").get(0).duration;
var valV = (timV*mouseX/$(document).width());
$("#deko_vid").get(0).currentTime = valV;

});

Codepen Example

但我遇到了一些问题:

-在 Safari 中按预期工作,但在 Chrome 中明显滞后(尚未测试 IE/Edge)。 我查找了与我相似的问题,并找到了this,但我不确定如何最好地继续前进。我是否需要创建一个覆盖文档的 div 并将 .mousemove() 绑定到该文档?找到不同的解决方案?使用 greensock 创建补间?

非常感谢任何关于如何前进的建议、想法和建设性的批评!

【问题讨论】:

标签: javascript jquery html css html5-video


【解决方案1】:

Chrome 中的 mousemove 存在很多问题。该事件在某些 html 元素上显示出严重的滞后(文档就是其中之一 - 因为它没有不断触发该事件)。因此,将事件侦听器移动到另一个元素会有所帮助。禁用捕获鼠标移动的元素的用户选择也很有帮助。 最后,在您的情况下,它似乎有助于降低计算时间的精度。结果仍然没有 safari 中那么顺利,但是……你自己决定吧:updated codepen demo here

在 Javascript 中,它只是修改后的选择器和时间的舍入。

var mouseX;
// using the video element instead of the complete document 
$('video').mousemove( function moveFunc(e) {
    mouseX = e.clientX;
    var valV = (timV * mouseX/ $(document).width()),
        timV = $("#deko_vid").get(0).duration;
    // reducing the precision of calculation
    valV = Math.round(valV * 100) / 100;
    $("#deko_vid").get(0).currentTime = valV;
});

在 CSS 中避免用户选择的语法。

video  {
  display: block;
   -moz-user-select: none;
   -webkit-user-select: none;
   user-select:none;
   ::selection: none;  
}

【讨论】:

  • 感谢您的建议/示例!立即注意到 Chrome 的改进。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
  • 2013-11-15
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多