【问题标题】:Update Progress Bar Using Percentage Values?使用百分比值更新进度条?
【发布时间】:2015-01-12 01:16:25
【问题描述】:

我创建了一个响应式的自定义播放器。到目前为止,一切正常,除了我似乎无法在用户单击进度条的位置播放音频。我看到的所有教程都使用像素值,而我的播放器使用百分比,所以当我设置 barSize = 100 + '%'; 时,它会破坏代码并且我收到一条错误消息,提示“无法在 HTMLMediaElement 上设置 currentTime 属性:提供的双精度值是无限的”。

HTML

<!-- PROGRESS BAR -->
<div id="progress_bar">
    <div id="bar"></div>
</div>

JS 代码(用于进度条)

// PROGRESS BAR

// audio display
var progress = document.getElementById('bar');
//click area
var audioBar = document.getElementById('progress_bar');
var barSize = 100 + '%';

audio.addEventListener('timeupdate', updateProgress, false);


function updateProgress() {
    if (audio.currentTime > 0) {
        var value = 0;
        value = Math.floor((100 / audio.duration) * audio.currentTime);

        progress.style.width = value + '%';
    }       
    else{
        $('#play').html('<img src="img/play.png" width="70" height="70" />');

        $(curTimeDisplay).html('0:00');

        progress.style.width = 0;
    }

}

// CHANGING TIME ON PROGRESS BAR

$('#progress_bar').bind('click', function (e) {
    var $div = $(e.target);
    var $display = $div.find('#progress_bar');

    var offset = $div.offset();
    var x = e.clientX - offset.left;

    //$('#bar').width(x);

    var newtime = x*audio.duration/barSize;

    audio.currentTime = newtime;

    progress.style.width = x + '%';
});

CSS

#progress_bar {
border:1px solid #500012;
margin:1em 0;
cursor:pointer;
background:#f2f2f2;
width:100%;
height:20px;
display:inline-block;
padding:0;
}

#bar {
background:#77001A;
height:20px;
display:inline-block;
float:left;
width:0%;
}

任何帮助表示赞赏:) 谢谢!

【问题讨论】:

  • 您能否将其分解为您认为与该问题相关的代码?这是很多要阅读的代码...
  • 嗨。我相信这是需要清除的内容: var newtime = x*audio.duration/barSize;

标签: javascript click html5-audio progress


【解决方案1】:

线索在错误信息中。它需要一个双精度值,并且您的 barSize var 在您初始化它时被计算为一个字符串。当您将 + '%' 添加到任何数字时会发生这种情况 - javascript 会将其从数字更改为字符串值。对字符串进行数学运算会给你'NaN'。

但在这种情况下,您希望媒体与点击发生的位置成比例,因此将 barSize 替换为总条形区域的像素宽度。 $('#progress_bar').width() 应该给你你需要的东西。您可能希望像这样移动表达式的操作数...

替换

var newtime = x*audio.duration/barSize;

var newtime = (x / $('#progress_bar').width()) * audio.duration;

了解浏览器中的控制台和调试工具。添加断点和监视对于像这样的代码非常有用。

【讨论】:

  • 谢谢罗恩!我被困在百分比上,以至于我什至没有考虑添加上面显示的像素值。这绝对成功了!以及断点和手表的好点。我会在以后的项目中记住这一点。
  • 嗨罗恩。非常抱歉,但我需要再次打扰您以寻求您的帮助。似乎代码显示了一个奇怪的错误,一旦您单击进度条,进度条就会完全扩展(所以我假设为 100%),但在计算之后,会在正确的单击区域结束。您可以在这里亲自查看:designbyleticia.com/andy 这可以通过“先执行”命令解决吗?再次感谢您!
  • 只要改这一行progress.style.width = x + '%';对此:progress.style.width = x + 'px';
猜你喜欢
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 2015-06-03
  • 2010-11-22
相关资源
最近更新 更多