当前位置: 首页 > news >正文

国外特效网站/站长工具平台

国外特效网站,站长工具平台,电子商务网店运营,2018年互联网大会很久没发文,一直想写点东西,整理整理这阵子的心得,很多笔记都在整理中。最近给公司编写的一个JS UI,用于歌词同步,整理一下放出来,核心脚本只负责处理lrc格式的歌词和呈现,并提供同步功能。 外部…

很久没发文,一直想写点东西,整理整理这阵子的心得,很多笔记都在整理中。

最近给公司编写的一个JS UI,用于歌词同步,整理一下放出来,
核心脚本只负责处理lrc格式的歌词和呈现,并提供同步功能。

2008121112213068.jpg


lrc.jpg
外部呈现等均可以良好定制。
基本调用如下:
var lrc=new LRC({lyricTable:obj,lyricWrapper:obj,curRowClassName:'xx',lyric:'xxx',separator:'<BR>'});
if(lrc.IsLyricValid()) lrc.DoSync(60);

DoSync(t)用于同步,参数t为当前播放进度,从播放器获得。
IsLyricValid()返回歌词是否合法的LRC格式。

贴出代码,附件下载中包含2个定制示例。代码在FF下跑不了,因为音乐播放插件跑不了~

ContractedBlock.gifExpandedBlockStart.gifLrc UI
  1ExpandedBlockStart.gifContractedBlock.gif/**//*
  2InBlock.gif*   @author:    huangxu
  3InBlock.gif*   @date:      2008-11
  4InBlock.gif*   @site:  http://wsky.cnblogs.com
  5InBlock.gif*   @descript:  sync display the lyric 
  6InBlock.gif*   @usage:
  7InBlock.gif*               //import lrc.css
  8InBlock.gif*               var lrc=new LRC({lyricTable:obj,lyricWrapper:obj,curRowClassName:'xx',lyric:'xxx',separator:'<BR>'});
  9InBlock.gif*               if(lrc.IsLyricValid()) lrc.DoSync(60);
 10InBlock.gif*
 11InBlock.gif*   @note:  内部变量前缀lrc_,普通变量i,ii,index,arg..
 12ExpandedBlockEnd.gif*/

 13None.gif
 14ExpandedBlockStart.gifContractedBlock.gifLRC=function()dot.gif{this.initialize.apply(this,arguments);}
 15ExpandedBlockStart.gifContractedBlock.gifLRC.prototype=dot.gif{
 16InBlock.gif    arrLyricTime:[],
 17InBlock.gif    arrLyric:[],//全局可用,必须执行初始化
 18ExpandedSubBlockStart.gifContractedSubBlock.gif    initialize:function(arg)dot.gif{
 19InBlock.gif        //私有
 20InBlock.gif        this.lyricTable=arg.lyricTable;//目标歌词table
 21InBlock.gif        this.lyricWrapper=arg.lyricWrapper;//目标歌词容器div
 22InBlock.gif        this.curRowClassName=arg.curRowClassName;//选择行css样式名
 23InBlock.gif        this.separator=arg.separator;//歌词行分隔符 如:<BR>
 24InBlock.gif        //执行初始化
 25InBlock.gif        this.arrLyricTime=[];
 26InBlock.gif        this.arrLyric=[];
 27InBlock.gif        this.initArray(arg.lyric);
 28InBlock.gif        this.arrLyricTime=this.sort(this.arrLyricTime);
 29InBlock.gif        this.setLyricTable(this.arrLyric);
 30ExpandedSubBlockEnd.gif    }
,
 31ExpandedSubBlockStart.gifContractedSubBlock.gif    initArray:function(lyric)dot.gif{
 32InBlock.gif        var lrc_re=new RegExp('\[[0-9:.]*\]','g');//g全局标志,获取所有匹配结果必须
 33InBlock.gif        var lrc_arr=lyric.split(this.separator);
 34InBlock.gif        var lrc_temp=0;
 35InBlock.gif        var lrc_filter=0;//无效行过滤标记
 36ExpandedSubBlockStart.gifContractedSubBlock.gif        for(var i=0;i<lrc_arr.length;i++)dot.gif{
 37InBlock.gif            var lrc_txt=lrc_arr[i].replace(/\[[\w\W]*\]/g,'').Trim();//add to lyric text array
 38ExpandedSubBlockStart.gifContractedSubBlock.gif            if(lrc_txt=='')dot.gif{
 39InBlock.gif                lrc_filter++;
 40InBlock.gif                continue;
 41ExpandedSubBlockEnd.gif            }
       
 42InBlock.gif            this.arrLyric[i-lrc_filter]=lrc_txt;
 43ExpandedSubBlockStart.gifContractedSubBlock.gif            while((lrc_result = lrc_re.exec(lrc_arr[i])) != null)dot.gif{
 44InBlock.gif                var lrc_second=this.parseSecond(lrc_result.toString().replace(/\[|\]/g,''));
 45InBlock.gif                if(!isNaN(lrc_second))
 46InBlock.gif                    this.arrLyricTime[lrc_temp++]=(i-lrc_filter)+'|'+lrc_second;//arrLyricTime格式为"行号|秒",如:1|50,2|60
 47ExpandedSubBlockEnd.gif            }

 48ExpandedSubBlockEnd.gif        }

 49ExpandedSubBlockEnd.gif    }
,
 50InBlock.gif    /////
 51InBlock.gif    //  公开函数 
 52InBlock.gif    //  IsLyricValid()判断是否合法lrc歌词    
 53InBlock.gif    //  DoSync()定位歌词
 54InBlock.gif    /////
 55ExpandedSubBlockStart.gifContractedSubBlock.gif    IsLyricValid:function(arrLyricTime)dot.gif{
 56InBlock.gif        return this.arrLyricTime.length>0;
 57ExpandedSubBlockEnd.gif    }
,
 58ExpandedSubBlockStart.gifContractedSubBlock.gif    DoSync:function(curPosition)dot.gif{
 59InBlock.gif        var lrc_times=this.arrLyricTime;
 60ExpandedSubBlockStart.gifContractedSubBlock.gif        for(var i=0;i<lrc_times.length;i++)dot.gif{
 61InBlock.gif            var lrc_arrPre=lrc_times[i].split('|');
 62InBlock.gif            
 63InBlock.gif            if(i==0&&curPosition<lrc_arrPre[1]) break;//防止抖动
 64InBlock.gif            
 65ExpandedSubBlockStart.gifContractedSubBlock.gif            if(lrc_times[i+1]==undefined)dot.gif{
 66InBlock.gif                this.setRow(lrc_arrPre[0]);
 67InBlock.gif                break;
 68ExpandedSubBlockEnd.gif            }

 69InBlock.gif            
 70InBlock.gif            var lrc_arrNext=lrc_times[i+1].split('|');
 71ExpandedSubBlockStart.gifContractedSubBlock.gif            if(curPosition>=lrc_arrPre[1]&&curPosition<lrc_arrNext[1])dot.gif{
 72InBlock.gif                this.setRow(lrc_arrPre[0]);
 73InBlock.gif                break;
 74ExpandedSubBlockEnd.gif            }

 75ExpandedSubBlockEnd.gif        }
 
 76ExpandedSubBlockEnd.gif    }
,
 77InBlock.gif    /////
 78InBlock.gif    //以下为内部辅助函数
 79InBlock.gif    /////
 80ExpandedSubBlockStart.gifContractedSubBlock.gif    parseSecond:function(time)dot.gif{
 81ExpandedSubBlockStart.gifContractedSubBlock.gif        trydot.gif{
 82InBlock.gif            var lrc_arr=time.split(':');//time格式为时间格式 00:00
 83InBlock.gif            return parseInt(lrc_arr[0])*60+parseFloat(lrc_arr[1]);
 84ExpandedSubBlockStart.gifContractedSubBlock.gif        }
catch(ex)dot.gif{
 85InBlock.gif            return 0;
 86ExpandedSubBlockEnd.gif        }

 87ExpandedSubBlockEnd.gif    }
,
 88ExpandedSubBlockStart.gifContractedSubBlock.gif    setLyricTable:function(arrLyric)dot.gif{
 89InBlock.gif        this.lyricWrapper.scrollTop=0;//滚动条置顶
 90InBlock.gif        
 91ExpandedSubBlockStart.gifContractedSubBlock.gif        if(this.lyricTable.rows.length>0)dot.gif
 92InBlock.gif            this.clearTable(this.lyricTable);
 93ExpandedSubBlockEnd.gif        }

 94ExpandedSubBlockStart.gifContractedSubBlock.gif        for(var i=0;i<arrLyric.length;i++)dot.gif{
 95InBlock.gif            var lrc_tr=this.lyricTable.insertRow();
 96InBlock.gif            var lrc_cell=lrc_tr.insertCell(0);
 97InBlock.gif            lrc_cell.innerHTML=arrLyric[i];
 98ExpandedSubBlockEnd.gif        }

 99ExpandedSubBlockEnd.gif    }
,
100ExpandedSubBlockStart.gifContractedSubBlock.gif    clearTable:function(lyricTable)dot.gif{
101InBlock.gif        var lrc_rowNum=lyricTable.rows.length;
102ExpandedSubBlockStart.gifContractedSubBlock.gif        for (var i=0;i<lrc_rowNum;i++)dot.gif{
103InBlock.gif            lyricTable.deleteRow(i);
104InBlock.gif            lrc_rowNum=lrc_rowNum-1;
105InBlock.gif            i=i-1;
106ExpandedSubBlockEnd.gif        }
 
107ExpandedSubBlockEnd.gif    }
,
108ExpandedSubBlockStart.gifContractedSubBlock.gif    setRow:function(index)dot.gif{
109InBlock.gif        this.setRowClass(index);
110InBlock.gif        this.setScroll(index);
111ExpandedSubBlockEnd.gif    }
,
112ExpandedSubBlockStart.gifContractedSubBlock.gif    setRowClass:function(index)dot.gif{
113InBlock.gif        var lrc_rows=this.lyricTable.rows;
114ExpandedSubBlockStart.gifContractedSubBlock.gif        for(var i=0;i<lrc_rows.length;i++)dot.gif{
115InBlock.gif             lrc_rows[i].className='';//TODO:直接添加样式至元素,防止外部css干扰
116ExpandedSubBlockEnd.gif        }

117InBlock.gif        lrc_rows[index].className=this.curRowClassName;
118ExpandedSubBlockEnd.gif    }
,
119ExpandedSubBlockStart.gifContractedSubBlock.gif    setScroll:function(index)dot.gif{
120InBlock.gif        this.lyricWrapper.scrollTop=this.lyricTable.rows[index].offsetTop-this.lyricWrapper.offsetHeight/3;
121ExpandedSubBlockEnd.gif    }
,
122ExpandedSubBlockStart.gifContractedSubBlock.gif    sort:function(arrLyricTime)dot.gif{
123ExpandedSubBlockStart.gifContractedSubBlock.gif        for(var i=0;i<arrLyricTime.length-1;i++)dot.gif{
124ExpandedSubBlockStart.gifContractedSubBlock.gif            for(var ii=i+1;ii<arrLyricTime.length;ii++)dot.gif{
125InBlock.gif                var lrc_cur=parseFloat(arrLyricTime[i].split('|')[1]);
126InBlock.gif                var lrc_next=parseFloat(arrLyricTime[ii].split('|')[1]);
127ExpandedSubBlockStart.gifContractedSubBlock.gif                if(lrc_cur>lrc_next)dot.gif{
128InBlock.gif                    var lrc_temp=arrLyricTime[i];
129InBlock.gif                    arrLyricTime[i]=arrLyricTime[ii];
130InBlock.gif                    arrLyricTime[ii]=lrc_temp;
131ExpandedSubBlockEnd.gif                }

132ExpandedSubBlockEnd.gif            }

133ExpandedSubBlockEnd.gif        }
    
134InBlock.gif        return arrLyricTime;
135ExpandedSubBlockEnd.gif    }

136ExpandedBlockEnd.gif}

137None.gif
138None.gif
139None.gif/////
140None.gif//外部函数
141None.gif/////
142None.gifString.prototype.Trim = function()
143ExpandedBlockStart.gifContractedBlock.gifdot.gif{    
144InBlock.gif    return this.replace(/^\s*|\s*$/g,"");
145ExpandedBlockEnd.gif}

146None.gif

 

Demo下载:http://files.cnblogs.com/wsky/lrcUI_wsky.rar

转载于:https://www.cnblogs.com/wsky/archive/2008/12/11/1352666.html

http://www.lbrq.cn/news/1562383.html

相关文章:

  • 域名服务器ip/麒麟seo
  • 慈善公益网站建设/建站模板网站
  • 有哪些做网站好的公司好/武汉seo优化排名公司
  • 怎么分析竞争对手网站/网络营销成功案例
  • 做暖暖免费视频网站/新的数据新闻
  • 用css做网站的好处/北京网络营销招聘
  • 代办公司注册流程及材料/seo推广服务
  • b站推广引流最佳方法/seo推广有哪些方式
  • 快速迁移网站/seo模拟点击软件源码
  • 响应式企业网站制作公司/行者seo无敌
  • 郑州郑东新区网站建设/长尾词排名优化软件
  • 东营 网站建设/如何提高自己在百度的排名
  • 传奇做网站/seo网站推广什么意思
  • 网站视频链接/西安网站建设推广专家
  • 网站开发 例子/卢松松外链工具
  • 广州市建设监理协会网站/哪些店铺适合交换友情链接
  • 装饰公司营销型网站建设/西安关键词排名推广
  • 平顶山市建设委员会网站/郑州搜索引擎优化
  • 西安高校定制网站建设公司推荐/优化网站平台
  • 做游戏陪玩网站/推广文案范例
  • 网站建设市场分析报告/口碑营销案例ppt
  • 江苏句容市疫情最新情况/青岛seo网站关键词优化
  • 有人在相亲网站骗人做传销/单页面seo搜索引擎优化
  • 网站筛选功能/我在百度下的订单如何查询
  • 路由器 东莞网站建设/建站流程主要有哪些
  • 免费网站模板下载大全下载/百度快照是干嘛的
  • 网站开发有限公司/青岛seo外包公司
  • 企业网站主页设计图片/最热门的短期培训课程
  • 网站制作的基本流程/长沙优化网站推广
  • 2018爱情动做网站/2345浏览器主页网址
  • FPGA串口通信实现方案
  • Flutter Provider 模式实现:基于 InheritedWidget 的状态管理实现
  • Mac(一)常用的快捷键整理
  • 神经网络 小土堆pytorch记录
  • JAVA文件管理系统:如何玩转文件操作
  • RxJava Android 创建操作符实战:从数据源到Observable