Aks*_*pal 7 javascript jquery html5 html5-audio
我一直在尝试使用HTML5和Jquery创建自定义媒体播放器.
我遵循不同的方法,并根据我刷新页面的方式遇到了一些麻烦.
第一个案例
$(document).ready(function(){
duration = Math.ceil($('audio')[0].duration);
$('#duration').html(duration);
});
Run Code Online (Sandbox Code Playgroud)
在这种情况下,当我通过按ENTER
地址栏中的键将页面重定向到同一URL时,持续时间返回NaN .但是,当我使用reload button
或按下F5
按钮刷新时它完全正常.
第二个案例
我在一些答案中读到,loadedmetadata
事件发生后加载持续时间可能有所帮助.所以我尝试了以下方法:
$(document).ready(function(){
$('audio').on('loadedmetadata', function(){
duration = Math.ceil($('audio')[0].duration);
$('#duration').html(duration);
});
});
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,在这种情况下,发生了第一种情况的反转.在重定向的情况下,即ENTER
在地址栏中按下时,持续时间显示完全正常.但是,在使用F5
按钮刷新或者刷新的情况下reload button
,持续时间根本不会显示,甚至NaN都不会导致我认为代码根本没有被执行.
进一步阅读建议这可能是webkit浏览器中的一个错误,但我找不到任何结论性或有用的.
这种奇特行为背后的原因是什么?如果你能解释一下这个问题,那就太棒了.
编辑:我主要是寻找这种行为差异背后的解释.我想了解在重定向和刷新的情况下渲染页面背后的机制.
听起来问题在于事件处理程序设置得太晚,即音频文件在文档准备好之前就已加载其元数据。
尝试通过删除调用来尽快设置事件处理程序$(document).ready
:
$('audio').on('loadedmetadata', function(){
duration = Math.ceil($('audio')[0].duration);
$('#duration').html(duration);
});
Run Code Online (Sandbox Code Playgroud)
请注意,这要求<script>
标签位于<audio>
文档中的标签之后。
或者,您可以稍微调整您的逻辑,以便更新持续时间的代码始终运行(但如果它得到 a ,则会优雅地失败NaN
):
function updateDuration() {
var duration = Math.ceil($('audio')[0].duration);
if (duration)
$('#duration').html(duration);
}
$(document).ready(function(){
$('audio').on('loadedmetadata', updateDuration);
updateDuration();
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1054 次 |
最近记录: |