【发布时间】:2017-06-13 04:52:03
【问题描述】:
我需要帮助将 URL 一次性加载到 HTML5 音频播放器中,然后能够单击元素以执行其他控制。
这是目前为止的代码:
<div class="primary">
<article id="145">
<div class="loaddata" data-rel="http://www.jplayer.org/audio/mp3/Miaow-01-Tempered-song.mp3" onclick="setTimeout(function() { document.getElementById('145').classList.add('dataloaded'); }, 1)"> Load "Song1" </div>
</article>
<article id="139">
<div class="loaddata" data-rel="http://feeds.soundcloud.com/stream/327164631-scott-johnson-27-tms-1281.mp3" onclick="setTimeout(function() { document.getElementById('139').classList.add('dataloaded'); }, 1)"> Load "Song2" </div>
</article>
<article id="133" class="dataloaded">
<div class="loaddata" data-rel="http://archive.org/download/DTH20170611/DTH20170611.mp3" onclick="setTimeout(function() { document.getElementById('133').classList.add('dataloaded'); }, 1)"> Load "Song3" </div>
</article>
玩家:
<div class="audio-player-wrapper">
<div class="mejs__button mejs__group-left">
<div class="rewind-btn">
<button title="Rewind 15 seconds">15</button>
</div>
<div class="playpause-btn">
<button title="Play" class="play" id="ppbtn"></button>
</div>
<div class="forward-btn">
<button title="Forward 15 seconds">15</button>
</div>
</div>
<div class="current-time">00:00</div>
<div class="duration-time">00:00</div>
<div class="mejs__button mobile-mute">
<button class="mobile-mute-btn mobile-mute-off"></button>
</div>
<audio width="100%" height="75px" id="audio-player" controls="controls">
<source id="sourceMp3" src="#" type="audio/mp3">
</audio>
</div>
JS:
$(".loaddata").on("click", function() {
var mp3Url = $(this).data('rel');
$("#audio-player_html5").attr('src', mp3Url);
});
$(".loaddata").click(function(){
$('.dataloaded').removeClass();
$('#ppbtn').click();
});
上面的代码所做的是当用户点击loaddata 时,JS 将data-rel 中的url 加载到src 中sourceMP3 中。然后它会扫描“主要”以查找任何名为dataloaded 的类并将其删除。一毫秒后,它将dataloaded 添加到文章ID。然后播放器开始在 jquery $('#ppbtn').click(); 中播放加载的 URL。
我想要找到的是一种在第一次点击时加载 URL 然后能够在第一次点击后控制播放/暂停按钮的方法。我尝试在加载一次 URL 时执行 .one(),但是当所有三个元素都被单击一次时,它不会在单击的元素中加载 URL,并且所有三个元素 div.loaddata 都可以控制播放器。
我想解释它的简单方法:删除现有的.dataloaded,将URL添加到播放器,将.dataloaded添加到被点击的文章中,然后只能点击@上的播放/暂停按钮987654335@ 带有“已加载数据”。
新问题:有没有办法在单击元素时更改功能?喜欢新的 onclick?
【问题讨论】:
-
为什么在相同的元素上有 3 个单独的点击处理程序?你为什么不直接写
$(".loaddata").click(function(){ var mp3Url = $(this).data('rel'); $("#audio-player_html5").attr('src', mp3Url); $('.dataloaded').removeClass(); $('#ppbtn').click(); $(this).addClass('.dataloaded'); });? -
“更改功能”是什么意思?您可以调用另一个函数或将不同的值作为参数传递(给现有函数).. 函数的美妙之处在于它可以重复使用..
-
如何调用另一个函数?
-
我想我想找到的另一种方法是从
<div onclick="first()" class "loaddata">到<div onclick="second()" class "loaddata"> -
您更改了函数可访问的变量的值。例子:
var second = false; function firstOrSecond() { if (isSecond) { second(); } else { first(); } }; $('#someElement').click(firstOrSecond); $('#someOtherElement).click(function() { second = true; });在这个例子中,如果你点击#someElement,那么它会调用first,除非#someOtherElement在过去的某个时间点被点击过,在这种情况下它会调用second。
标签: javascript jquery html5-audio mediaelement.js