javascript - 如何阻止 WordPress 音频播放列表自动播放下一个音轨

标签 javascript wordpress audio

Wordpress 有一个很酷的音频播放列表,但不幸的是,它每次播放完歌曲时都会自动跳转到下一个轨道,这很烦人。我所知道的是它“可能”与位于此处的 wp-playlist.min.js 有关:

wordpress\wp-includes\js\mediaelement

我这么说是因为我用谷歌搜索了一下,我可以通过更改这一行来阻止它循环:

(this.index=0,this.setCurrent())}

对此:

(this.index=0)

但问题是我如何阻止它自行跳转到下一个轨道?

以下是与 wp-playlist.min.js 相关的代码:

!function(a,b,c){"use strict";var d=c.View.extend({initialize:function(d){this.index=0,this.settings={},this.data=d.metadata||a.parseJSON(this.$("script.wp-playlist-script").html()),this.playerNode=this.$(this.data.type),this.tracks=new c.Collection(this.data.tracks),this.current=this.tracks.first(),"audio"===this.data.type&&(this.currentTemplate=wp.template("wp-playlist-current-item"),this.currentNode=this.$(".wp-playlist-current-item")),this.renderCurrent(),this.data.tracklist&&(this.itemTemplate=wp.template("wp-playlist-item"),this.playingClass="wp-playlist-playing",this.renderTracks()),this.playerNode.attr("src",this.current.get("src")),b.bindAll(this,"bindPlayer","bindResetPlayer","setPlayer","ended","clickTrack"),b.isUndefined(window._wpmejsSettings)||(this.settings=b.clone(_wpmejsSettings)),this.settings.success=this.bindPlayer,this.setPlayer()},bindPlayer:function(a){this.mejs=a,this.mejs.addEventListener("ended",this.ended)},bindResetPlayer:function(a){this.bindPlayer(a),this.playCurrentSrc()},setPlayer:function(a){this.player&&(this.player.pause(),this.player.remove(),this.playerNode=this.$(this.data.type)),a&&(this.playerNode.attr("src",this.current.get("src")),this.settings.success=this.bindResetPlayer),this.player=new MediaElementPlayer(this.playerNode.get(0),this.settings)},playCurrentSrc:function(){this.renderCurrent(),this.mejs.setSrc(this.playerNode.attr("src")),this.mejs.load(),this.mejs.play()},renderCurrent:function(){var a,b="wp-includes/images/media/video.png";"video"===this.data.type?(this.data.images&&this.current.get("image")&&-1===this.current.get("image").src.indexOf(b)&&this.playerNode.attr("poster",this.current.get("image").src),a=this.current.get("dimensions").resized,this.playerNode.attr(a)):(this.data.images||this.current.set("image",!1),this.currentNode.html(this.currentTemplate(this.current.toJSON())))},renderTracks:function(){var b=this,c=1,d=a('<div class="wp-playlist-tracks"></div>');this.tracks.each(function(a){b.data.images||a.set("image",!1),a.set("artists",b.data.artists),a.set("index",b.data.tracknumbers?c:!1),d.append(b.itemTemplate(a.toJSON())),c+=1}),this.$el.append(d),this.$(".wp-playlist-item").eq(0).addClass(this.playingClass)},events:{"click .wp-playlist-item":"clickTrack","click .wp-playlist-next":"next","click .wp-playlist-prev":"prev"},clickTrack:function(a){a.preventDefault(),this.index=this.$(".wp-playlist-item").index(a.currentTarget),this.setCurrent()},ended:function(){this.index+1<this.tracks.length?this.next():(this.index=0)},next:function(){this.index=this.index+1>=this.tracks.length?0:this.index+1,this.setCurrent()},prev:function(){this.index=this.index-1<0?this.tracks.length-1:this.index-1,this.setCurrent()},loadCurrent:function(){var a=this.playerNode.attr("src")&&this.playerNode.attr("src").split(".").pop(),b=this.current.get("src").split(".").pop();this.mejs&&this.mejs.pause(),a!==b?this.setPlayer(!0):(this.playerNode.attr("src",this.current.get("src")),this.playCurrentSrc())},setCurrent:function(){this.current=this.tracks.at(this.index),this.data.tracklist&&this.$(".wp-playlist-item").removeClass(this.playingClass).eq(this.index).addClass(this.playingClass),this.loadCurrent()}});a(document).ready(function(){a(".wp-playlist").each(function(){return new d({el:this})})}),window.WPPlaylistView=d}(jQuery,_,Backbone);

最佳答案

我使用以下脚本完成了此操作,将其添加到您的(子)主题functions.php:

add_action( 'wp_footer', function () {
?>
<script>
jQuery(function ($) {
    $('.mejs-mediaelement video').on('ended', function (e) {
        e.preventDefault();
        $(this)[0].player.pause();
    });
});
</script>
<?php
},99);

关于javascript - 如何阻止 WordPress 音频播放列表自动播放下一个音轨,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37012165/

相关文章:

php - WordPress 网站被黑,生成巨大的 error_log 文件

php - CORS 预检请求未通过访问控制检查 : It does not have HTTP ok status

iphone - AudioFileWriteBytes随机返回错误-50

c++ - SDL - 音频回调函数有时没有及时调用

javascript - 如何修改外部JS文件中的元素?

javascript - 仅在一个页面上使用的大型 javascript 文件(和 html5 样板文件)

javascript - IE7 和 8 使用 jQuery 的 .slice 抛出错误

javascript - 淡入淡出使用纯 javascript

css - 过滤 'current-menu-item' 类以使用 'active' 代替

ios - 使用 Monotouch 在 iPhone 上重用音频和录音