You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在wavesurfer.js中获取波形栏点击位置的对应时间?

解决WaveSurfer点击波形获取对应位置时间的问题

你遇到的问题是因为wavesurfer.getCurrentTime()返回的是当前媒体的播放进度,而非点击位置对应的时间——点击波形时,默认的位置跳转逻辑还未执行,所以拿到的是跳转前的旧值。

有两种可靠的解决方式:

方法一:监听WaveSurfer实例的click事件

WaveSurfer本身提供的click事件会直接返回点击位置的进度比例(0到1之间),结合总时长就能算出对应时间:

wavesurfer.on("click", (event, progress) => {
  const clickTime = progress * wavesurfer.getDuration();
  console.log(clickTime);
});

这里的progress参数是点击位置占整个波形宽度的比例,乘以媒体总时长(getDuration())就是点击点对应的时间。

方法二:通过坐标手动计算(若需保留drawer事件)

如果必须使用drawer的点击事件,可以通过点击坐标计算位置对应的时间:

wavesurfer.drawer.on("click", (event) => {
  // 获取波形容器的位置和尺寸
  const wrapperRect = wavesurfer.drawer.wrapper.getBoundingClientRect();
  // 计算点击位置相对于容器的X坐标
  const relativeX = event.clientX - wrapperRect.left;
  // 计算进度比例
  const progress = relativeX / wrapperRect.width;
  // 换算成时间
  const clickTime = progress * wavesurfer.getDuration();
  console.log(clickTime);
});

这两种方式都能直接拿到点击位置对应的时间,无需依赖播放进度的更新。

内容的提问来源于stack exchange,提问作者Saman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:30:21