当时想法很简单,自己喜欢这个网站,但是不能轮播收藏的歌曲却是一大遗憾(想要实现这功能对百度来说非常简单,只是他不想,我想和“随心”两个字有关,如今有红心频道),只能自己动手,去尝试在客户端实现这种功能。
不得不说,Firebug却是非常强大,可以让加载好的代码“自由编辑”,变成你想要的。
我观察了一下加载的JS中有JQuery,那这样子就简单多了。 最简单的例子就是,在Firebug控制台中的代码编辑器中输入$('html').empty(); 这样子就清空当前页面(如果命令行编辑器没有默认打开的话,点击右下角的红色按钮)。
既然页面可以改变,尝试事件触发也是可行的(JQ中的trigger很好用,完全可以代替手动操作)。通过连续地触发固有的事件,可以轻松地实现点击下一首、翻页,但是这样做有个明显的缺点就是,触发以后,会执行一些你不需要的代码,但是你不得不忍受,因为你是”捡现成“的,比如说点了收藏目录的一首歌以后,他会切换到播放界面, 不得不通过点击“红心”再让他点回来,但是点回来的时候又重新请求一次刷新了列表,列表会到第一页,又带来另一个问题,需要回复到之前的第N页,又得触发一次。 还有就是每次请求都是需要时间的,请求未完成的时候页面或许并没有你想要的元素,所以到处是setTimeout,最后需要注意的就是最后一首歌曲放完以后,得让他回到第一页,当然这个情况已经考虑了。
问题当然还是有的,当时只是想让“随心听” 变成背景音乐,就是人不去选歌,让他自动放。 不然会引起一个问题就是,你点的这首歌没放到一半就到下一首了,其他没什么影响。
单曲循环也是很容易的。
(function(){
var cySongNth = 0,cyPages = 0,cyCurrentPage = 0,cyRecycledPlayBackId = 0,cybuttons = null;
function clickNextLoveSong(){
if(!cybuttons.length){
alert('你的延迟有点高,不建议循环播放');
setTimeout(function(){cyPages = $("#like-songs-wrapper .PNNW-S").length;cybuttons = $('#like-songs-wrapper .song-play');clickNextLoveSong()},3000);
return;
}
if(cySongNth == cybuttons.length){
$(window).scrollTop(0);
clearTimeout(cyRecycledPlayBackId);
cySongNth = 0;
cyCurrentPage == cyPages-1? cyCurrentPage=0 : cyCurrentPage++;
$("#like-songs-wrapper .PNNW-S:eq("+cyCurrentPage+")").trigger('click');
setTimeout(beginInterval,5000);
return;
}
$('#like-songs-wrapper .song-play').eq(cySongNth).trigger('click');
cySongNth++;
setTimeout(function(){
$("#userinfo-lovecount").trigger("click");
setTimeout(function(){
var remianTime = caculateSongTimeReamined();
//console.log(remianTime);
cyRecycledPlayBackId = setTimeout(clickNextLoveSong,remianTime);
$("#like-songs-wrapper .PNNW-S:eq("+cyCurrentPage+")").trigger('click');
setTimeout(function(){
var current = $('#like-songs-wrapper .white').eq(cySongNth-1);
var scrollTop = current.offset().top-200;
$(window).scrollTop(scrollTop);
current.find('.song-play').closest('.white').css('backgroundColor','#0B366D').prev().css('backgroundColor','#EFEFEF');
},2000);
},2000);
},2000);
}
function beginInterval(){
cyPages = $("#like-songs-wrapper .PNNW-S").length;
cybuttons = $('#like-songs-wrapper .song-play');
clickNextLoveSong();
}
function caculateSongTimeReamined(){
var timeRemain = $('#playerpanel-timeinfo').text();
var timeRemainArr = timeRemain.match(/\d+/g);
timeRemain = timeRemainToNum-5000>0? timeRemainToNum-5000:300000;
return timeRemain;
}
$('#userinfo-lovecount').trigger('click');
setTimeout(beginInterval,2000);
})();
最后要注意的是,得有类似Firefox的Firebug,每次进入这个网站都需要运行一次代码哦,希望能帮到你:)