自定义audio标签在chrome浏览器下面第二次播放时设置currentTIme一直为0

最近在写项目的时候需要开发一个自定义的audio组件,因为原生的audio组件不符合产品的要求。

简单的play()和pause()是没有问题的,但是需要点击进度条播放时就遇到了一些问题,现在记录一下。

提前说明一下,火狐的audio组件和chrome的audio存在不同的,这篇文章并没有解决任何问题.

下面这个函数时绑定在播放掉的onMouseDown这个事件下面的

function handleClick(e: any) {
  //279是css样式设置的宽度
  const rate = e.nativeEvent.offsetX / 279;
  /**在第一次播放完成之后,继续赋值点击赋值,currentTime打印出来就一直是0了(chrome和edge下面存在) 
   *但是在火狐下面可以赋值时成功的
*/   audioRef.current.currentTime = Math.ceil(props.duration * rate);   console.log("当前录音时间:", audioRef.current?.currentTime);   setWidth(e.nativeEvent.offsetX);   setStartTime(transformTime(Math.ceil(props.duration * rate))); }

然后网上看到重新赋值src可能会解决问题,发现还是没有解决

/**这个参数时绑定在录音audio的onEnded方法上面*/
function endAutioTime() { setStartTime(transformTime(Math.ceil(0))); audioRef.current?.pause();
    audioRef.current.src = props.source;
    console.log('src重新加载')
    setPlayStatus("暂停");
    setWidth(0);
    console.log("endddd");
  }
/**这个绑定在onLoadedMetadata*/
function loadedMetadata(){
  console.log('src加载完成')
}
 

通过上面这个方法重新绑定src之后

在chrome下面src可以可以被重新加载两次,第三次loadeMetadata这个函数就不会执行,同时点击play的时候会报错,找不到src这个资源

在火狐下面src可以可以被重新加载一次,第二次loadeMetadata这个函数就不会执行,同时点击play的时候会报错,找不到src这个资源

 

posted @ 2022-02-21 16:38  zeal666  阅读(607)  评论(0)    收藏  举报