我一直在尝试使用 HTML5和 Jquery创建自定义媒体播放器.

我遵循不同的方法,并根据我刷新页面的方式遇到了一些麻烦.

第一个案例

$(document).ready(function(){
    duration = Math.ceil($('audio')[0].duration);
    $('#duration').html(duration);
});

在这种情况下,当我通过按地址栏中的ENTER键将页面重定向到同一URL时,持续时间返回NaN.但是,当我使用重新加载按钮或按F5按钮刷新时,它完全正常.

第二个案例

我在一些答案中读到了在loadedMetadataevent之后加载持续时间可能会有所帮助.所以我尝试了以下内容:

$(document).ready(function(){
    $('audio').on('loadedMetadata',function(){
        duration = Math.ceil($('audio')[0].duration);
        $('#duration').html(duration);
    });
});

令人惊讶的是,在这种情况下,发生了第一种情况的反转.在重定向的情况下,持续时间显示完全正常,即在地址栏中按ENTER.但是,在使用F5按钮或重新加载按钮刷新的情况下,持续时间根本不会显示,甚至NaN也不会导致我认为代码根本没有被执行.

进一步阅读建议这可能是webkit浏览器中的一个错误,但我找不到任何结论性或有用的东西.

这种奇特行为背后的原因是什么?
如果你能解释一下这个问题,那就太棒了.

编辑:
我主要是在寻找这种行为差异背后的解释.我想了解在重定向和刷新的情况下渲染页面背后的机制.

解决方法

听起来问题是事件处理程序设置得太晚,即音频文件在文档准备就绪之前加载了元数据.

尝试通过删除$(document).ready调用尽快设置事件处理程序:

$('audio').on('loadedMetadata',function(){
    duration = Math.ceil($('audio')[0].duration);
    $('#duration').html(duration);
});

请注意,这需要< script>标签在< audio>之后文档中的标记.

或者,您可以稍微调整一下您的逻辑,以便更新持续时间的代码始终运行(但如果它获得NaN则优雅地失败):

function updateDuration() {
    var duration = Math.ceil($('audio')[0].duration);
    if (duration)
        $('#duration').html(duration);
}

$(document).ready(function(){
    $('audio').on('loadedMetadata',updateDuration);
    updateDuration();
});

javascript – 某些页面请求操作的音频持续时间NaN的更多相关文章

  1. 如何查看浏览器对html5的支持情况

    这篇文章主要介绍了如何查看浏览器对html5的支持情况,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. 在Swift中凑成一个CGFloat

    如何在Swift中完成CGFloat?我试过ceil,但只适用于iPadAir&iPhone5S。当在另一个模拟设备上运行时,我收到一个错误,说’NSNumber’不是’CGFloat’的子类型,更新:苹果现在定义了一些CGFloat特定版本的常见功能,如ceil:…专门处理32/64位差异。如果你简单地使用ceil与CGFloat的参数,它现在应该在所有的架构工作。

  3. swift – 有没有办法结合开关和包含?

    假设我有三个包含扩展的集合:和一个简单的枚举:现在我想要做的是实现一个函数,该函数根据传递给它的字符串返回FileType选项,哪个集合包含它:它应该按预期工作,但我想知道是否有一种方法将if语句转换为一个switch语句,尤其是在使用枚举时,switch语句是更好的选择避免错误.如果使用switch语句无法实现,我也会感谢任何优雅的替代方案.我认为你的整个问题是你试图为每种类型维护3个独立集合,而不是直接将它们连接到给定的文件类型:

  4. 在Android浏览器中使用HTML5播放音频

    我想在Android浏览器中播放音频,使用html5标签.它在iPhone浏览器中运行良好,但在Android中不行.我正在使用Android虚拟设备4.0.3.有谁知道为什么?

  5. Android模拟器声音 – ubuntu

    使用Ubuntu10.0464位进行Android开发,一切顺利,除了声音.我使用-audio选项和-audio-out使用alsa作为后端参数,但没有运气.任何的想法?注意命令行“-no-audio”选项的替代方法是调整AVD管理器中的Android虚拟设备,并在“硬件”下添加“音频播放支持:否”和“音频录制支持:否”.通过这些更改,我可以从Eclipse启动模拟器并在其中运行我的应用程序.

  6. android – 三星设备上的AcousticEchoCanceler无法正常工作

    解决方法试试这些:

  7. 给定Android音乐播放列表名称,如何找到播放列表中的歌曲?

    可以通过MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI上的查询找到播放列表名称然后查看MediaStore.Audio.PlaylistsColumns.NAME列.还有一个数据列,MediaStore.Audio.PlaylistsColumns._DATA,但它返回null.歌曲列表(MediaStore.Audio.Media.EXTERNAL

  8. android – 我想阻止我的音乐播放器应用程序每次应用程序启动时扫描目录中的音频文件.我怎样才能做到这一点?

    我想阻止我的音乐播放器应用程序在每次应用程序启动时扫描目录中的音频文件.我怎样才能做到这一点?我一直在使用以下代码来扫描音频文件.我希望应用程序只在有新文件时进行扫描.因为如果我每次都扫描整张SD卡,那么启动应用程序需要花费太多时间.请帮帮我解决方法无需将所有歌曲保留在本地应用列表中.要显示mp3list,您可以使用带限制的内容提供者光标列表适配器查询(逐页滚动查询)要直接搜索使用contentp

  9. android – 如何通过MediaRecorder.start()来静音“嘟嘟”?

    解决方法虽然我来不及回答它.它仍然可以帮助所有人都在谷歌搜索同样的问题.在开始媒体记录器之前添加以下两行代码..它会静音手机声音..启动录音机后等待一到两秒钟并取消静音,你可以使用以下可运行的…

  10. android – 如何使用MediaStore.Audio.Albums.ALBUM_ART显示专辑封面?

    我正在尝试构建一个MP3播放器,我希望ImageView能够显示各个歌曲的专辑封面.我尝试了以下,但它不起作用.当我尝试播放歌曲时,我得到的只是ImageView中的空白屏幕.解决方法这是我如何获得一首歌的专辑封面:albumId指的是该歌曲的MediaStore.Audio.Media.ALBUM_ID.如果您正在寻找特定歌曲的专辑封面(而不是专辑列表),据我所知,这是一个两阶段的过程,因为AL

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部