【问题标题】:How to add or remove audio attribute of html5 <audio>?如何添加或删除 html5 <audio> 的音频属性?
【发布时间】:2017-09-04 23:02:23
【问题描述】:

我用 html5 和 javascript 创建了一个多轨播放器。

var track_1 = document.getElementById('audio_1');

我已经制作了自定义控制按钮:音量、播放、停止、暂停,例如:

$bt_play_audio_mixette_1.click(function() {
    if (track_1.paused == false) {
        track_1.pause();
    } else {
        track_1.play();
    }
});

我有一个“循环”按钮,我想动态修改为&lt;audio&gt; 属性loop

我尝试过使用.attr();.prop();,但没有成功。

你知道这段代码有什么问题吗:

var loop_1_active = true;
$bt_loop_audio_1.click(function() {
    if (track_1.prop("autoplay", true)) {
        track_1.prop("autoplay", false);
        loop_1_active = false;
    } else {
        track_1.prop('loop', true)
        track_1.attr("autoplay", true);
    }
});

编辑:

如果我使用 jquery 对象:

var track_1_B = $('#audio_1');

我不能使用pause();

error :ReferenceError: track_1 is not defined track_1.pause();

如果我使用纯 JS:

var track_1 = document.getElementById('audio_1'); 

我可以使用pause();,但我无法更改循环属性

【问题讨论】:

  • 你确定track_1是jquery的一个实例(这样初始化:var track_1 = $(#the_audio_element"))?
  • 你应该在track_1初始化的地方添加一段代码
  • @freedev 我已经用初始化代码更新了问题。
  • @Szymkowski 我已经用初始化代码更新了这个问题。
  • @Peter Szymkowski “所以这是个问题”是什么意思?

标签: javascript jquery html html5-audio


【解决方案1】:

也使用 jquery:

var $track_1 = $('#audio_1'); // jquery object
var track_1 = document.getElementById('audio_1'); // pure js DOM element

并且只在 jquery 对象上使用 jquery 方法。

$track1.click(//...
$track1.attr(//...
$track1.prop(//...

DOM 元素的其他方法

trakck1.pause();

【讨论】:

  • 我总是阅读 concole,实际上我只有一个错误:ReferenceError: autoplay is not defined if (track_1.prop(autoplay, true)) {
  • @SébastienGicquel 我不知道您使用的是什么浏览器/调试工具,但if I try to run it 我的控制台显示错误track_1.attr is not a function
  • 是的,那条消息告诉你attr函数所以track_1不是jquery的实例
  • 我不明白为什么如果我使用 jquery 对象,我不能使用 pause();错误 :ReferenceError: track_1 未定义 track_1.pause();如果我使用纯 JS var track_1 = document.getElementById('audio_1');我可以使用暂停();但我无法更改循环属性
【解决方案2】:

if (track_1.prop("autoplay", true)) { 实际上将 autoplay 属性设置为 true,而不是检查它是否为 true,并且总是返回一个真实的值。请改用if (track_1.prop("autoplay")) {。我现在看到 track_1 是一个 dom 元素而不是 jQuery 对象,因此需要将其转换为一个才能使用 prop()... 例如$(track_1).prop("autoplay")。您也可以直接访问元素属性,无需使用 jQuery

var track_1 = document.getElementById('audio_1');
var loop_1_active = true;
$bt_loop_audio_1.click(function() {
    if (track_1.autoplay) {
        track_1.autoplay = false;
        loop_1_active = false;
    } else {
        track_1.loop = true;
        track_1.autoplay = true;
    }
});

【讨论】:

  • 这段代码运行良好。但是,我有时注意到 chrome 和循环属性的错误。我在 google 上看到了很多关于这个 bug 的话题,所以这不是你的代码,而是 Chrome 的 bug。
猜你喜欢
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
  • 2013-04-20
  • 1970-01-01
相关资源
最近更新 更多