如何在Wavesurfer缩放时获取时间线点击位置的对应时间?
解决wavesurfer.js Timeline插件缩放时点击时间线获取正确时间的问题
- 首先,不要硬编码媒体时长,改用
wavesurfer.getDuration()动态获取实际总时长,避免固定值导致的误差:
this.player.on("seek", (position) => { // 动态获取媒体总时长 const totalDuration = this.player.getDuration(); // position是0-1之间的比例,对应总时长的位置 const currentTime = position * totalDuration; this.updateVideoCurrentTime(currentTime); });
如果你使用的是wavesurfer内置的缩放功能(通过
this.player.zoom(level)方法调整缩放),上述代码完全适用——seek事件返回的position始终是相对于媒体总时长的比例,不受缩放、滚动操作影响,直接计算就能得到正确的点击时间。如果你是自定义实现了Timeline的可视范围缩放(比如只显示媒体的某一段),可以通过
getVisibleRegion()方法获取当前可视区域的起始和结束时间,再结合点击位置的比例计算:
this.player.on("seek", (position) => { const visibleRegion = this.player.getVisibleRegion(); // 可视区域的时间跨度 const visibleDuration = visibleRegion.end - visibleRegion.start; // 点击位置在可视区域内的比例对应的时间 const currentTime = visibleRegion.start + position * visibleDuration; this.updateVideoCurrentTime(currentTime); });
注意:getVisibleRegion()返回的start和end是当前可视区域对应的媒体时间(单位:秒),仅当你通过滚动或缩放改变了可视范围时需要用这种方式。
内容的提问来源于stack exchange,提问作者rook
相关产品推荐
相关产品推荐

