jQuery 单击滑块时音频持续时间发生变化

jQuery Audio Time Duration Change on Slider Click

我注意到以下代码在台式机和笔记本电脑上运行良好,但在我的 Android 移动设备或其他移动设备上运行不正常,用于在用户点击滑块时更改歌曲的持续时间:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    <div id="timeline-box">
    <input id="seekslider" type="range" min="0" max="100" value="0" step="1"><br>           
    </div>

    **//jQuery to detect when user changes the timeline with the seekslider
    $(document).ready(function(){
      $("#seekslider").mouseup(function(e){
                var leftOffset = e.pageX - $(this).offset().left;
                var songPercents = leftOffset / $('#seekslider').width();
                audio.currentTime = songPercents * audio.duration;
            }); 
    });**

如果有人能帮我解决这个问题,在 jQuery 或 Javascript 中单击滑块时,持续时间会发生变化,我将不胜感激。

您不能在移动设备上使用 mouseup。而是使用触摸端。这基本上相当于 mouseup。也可以使用 .on 代替包装函数。通过这样做,您可以将多个侦听器绑定到同一个元素(touchend 和 mouseup)。

//jQuery to detect when user changes the timeline with the seekslider
$(document).ready(function(){
    $("#seekslider").on('mouseup touchend',function(e){
        var leftOffset = e.pageX - $(this).offset().left;
        var songPercents = leftOffset / $('#seekslider').width();
        audio.currentTime = songPercents * audio.duration;
     }); 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    <div id="timeline-box">
    <input id="seekslider" type="range" min="0" max="100" value="0" step="1"><br>           
    </div>

一个 type=range 滑块有 2 个事件,input 和 change。如果您没有使用 type=range,那么使用鼠标或触摸事件可能会有用,但您使用了。

$("#seekslider").on("input",function(e){
    audio.currentTime = this.value * audio.duration;
})

使用合理的 min max 和 step,这样你就不必做太多的数学运算。

<input id="seekslider" type="range" min="0" max="1" value="0" step=".001">

实际上,在 Javascript 中完成此功能要容易得多。这是我需要做的:

<input type="range" id="audio-slider" min="0" value="0" step="1" onchange="seek()">

如上所示,我只需要设置输入检测"onchange"事件并触发"seek()"功能即可。

这里是javascript同步进度条到当前时间:

//set the currentTime to match users click on the progress bar
    function seek(){         
        audio.currentTime = audioSlider.value;          
        play(); 
    }