javascript <audio>: 无法更新当前时间
javascript <audio>: cant update currentTime
我正在尝试为我的 html5 音频播放器制作进度条,并制作通过点击更改曲目播放时间的功能。我决定用输入 [范围] 来做,但是当我点击当前播放时间栏时不更新,曲目只是从头开始播放:
我的html:
<audio controls='controls' class="track">
<source src="{{ user_lib.audio_file.url }}" type="audio/mpeg">
<source src="{{ user_lib.audio_file.url }}" type='audio/ogg; codecs=vorbis' />
<p>Your user agent does not support the HTML5 Audio element.</p>
</audio>
<div class="progress-bar">
<input type="range" min="0" max="100" value="0" step="1" class="track-pb"
onchange="PBtap()" id="track-pb"/>
</div>
我的 js:
function PBtap() {
$('#track-pb').on('input propertychange', function() {
var currenttrack = $('.track')[0];
var val = parseInt($(this).val() * currenttrack.duration / 100, 10)
$('#track-pb').prop("value", val);
currenttrack.currentTime = val;
})
}
我尝试使用
$(currenttrack).bind('canplay', function() {
this.currentTime = val;
});
我做错了什么?
这应该有效:
function PBtap(trackpb) {
var currenttrack = $('.track')[0];
var val = parseInt($(trackpb).val() * currenttrack.duration / 100, 10)
currenttrack.currentTime = val;
}
然后在 HTML 中,将 onchange="PBtap()"
更改为 onchange="PBtap(this)"
。这样使用onchange时,默认无法访问this
您还可以添加以下内容以在音频播放时更改范围值:
setInterval(function () {
var track = $(".track")[0];
$("#track-pb")[0].value = track.currentTime / track.duration * 100;
}, 100);
如果在 HTML 中将 onchange
更改为 oninput
,这会更好用。
这看起来像是范围问题。在 $(currenttrack).bind('canplay', function() {
中,currenttrack
未定义,因为它是在函数中声明的。
此外,您使用内联 onchange
调用一个函数...并且该函数注册一个更改处理程序,jQuery 方式。非此即彼。
试试这个:
var currenttrack = $('.track')[0];
var val = 0;
$('#track-pb').on('input change propertychange', function() {
val = parseInt($(this).val() * currenttrack.duration / 100, 10)
$('#track-pb').prop("value", val);
currenttrack.currentTime = val;
});
currenttrack.on('canplay', function() {
this.currentTime = val;
});
并从您的标记中删除 onchange="PBtap()"
。
另外...不要使用已弃用的 .bind()
。请改用 .on()
。
我正在尝试为我的 html5 音频播放器制作进度条,并制作通过点击更改曲目播放时间的功能。我决定用输入 [范围] 来做,但是当我点击当前播放时间栏时不更新,曲目只是从头开始播放:
我的html:
<audio controls='controls' class="track">
<source src="{{ user_lib.audio_file.url }}" type="audio/mpeg">
<source src="{{ user_lib.audio_file.url }}" type='audio/ogg; codecs=vorbis' />
<p>Your user agent does not support the HTML5 Audio element.</p>
</audio>
<div class="progress-bar">
<input type="range" min="0" max="100" value="0" step="1" class="track-pb"
onchange="PBtap()" id="track-pb"/>
</div>
我的 js:
function PBtap() {
$('#track-pb').on('input propertychange', function() {
var currenttrack = $('.track')[0];
var val = parseInt($(this).val() * currenttrack.duration / 100, 10)
$('#track-pb').prop("value", val);
currenttrack.currentTime = val;
})
}
我尝试使用
$(currenttrack).bind('canplay', function() {
this.currentTime = val;
});
我做错了什么?
这应该有效:
function PBtap(trackpb) {
var currenttrack = $('.track')[0];
var val = parseInt($(trackpb).val() * currenttrack.duration / 100, 10)
currenttrack.currentTime = val;
}
然后在 HTML 中,将 onchange="PBtap()"
更改为 onchange="PBtap(this)"
。这样使用onchange时,默认无法访问this
您还可以添加以下内容以在音频播放时更改范围值:
setInterval(function () {
var track = $(".track")[0];
$("#track-pb")[0].value = track.currentTime / track.duration * 100;
}, 100);
如果在 HTML 中将 onchange
更改为 oninput
,这会更好用。
这看起来像是范围问题。在 $(currenttrack).bind('canplay', function() {
中,currenttrack
未定义,因为它是在函数中声明的。
此外,您使用内联 onchange
调用一个函数...并且该函数注册一个更改处理程序,jQuery 方式。非此即彼。
试试这个:
var currenttrack = $('.track')[0];
var val = 0;
$('#track-pb').on('input change propertychange', function() {
val = parseInt($(this).val() * currenttrack.duration / 100, 10)
$('#track-pb').prop("value", val);
currenttrack.currentTime = val;
});
currenttrack.on('canplay', function() {
this.currentTime = val;
});
并从您的标记中删除 onchange="PBtap()"
。
另外...不要使用已弃用的 .bind()
。请改用 .on()
。