zoukankan      html  css  js  c++  java
  • 让《百度随心听》轮播收藏的歌曲

      当时想法很简单,自己喜欢这个网站,但是不能轮播收藏的歌曲却是一大遗憾(想要实现这功能对百度来说非常简单,只是他不想,我想和“随心”两个字有关,如今有红心频道),只能自己动手,去尝试在客户端实现这种功能。

      不得不说,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);
            var timeRemainToNum = Number(timeRemainArr[0]*60*1000) + Number(timeRemainArr[1]*1000);
            timeRemain = timeRemainToNum-5000>0? timeRemainToNum-5000:300000;
            return timeRemain;    
        }

        $('#userinfo-lovecount').trigger('click');
        setTimeout(beginInterval,2000);
    })();

      最后要注意的是,得有类似FirefoxFirebug,每次进入这个网站都需要运行一次代码哦,希望能帮到你:)

      

  • 相关阅读:
    字符串倒序
    字符串反转问题
    linux系统性能分析
    操作系统基础知识
    两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值,b[i] = a[0]*a[1]*a[2]…*a[N-1]/a[i];
    用加法模拟乘法
    2015年最新中国知网CNKI免费账号直接入口
    nginx模块开发(18)—日志分析
    nginx基本配置
    三层架构和MVC
  • 原文地址:https://www.cnblogs.com/cy056/p/2949863.html
Copyright © 2011-2022 走看看