纯javascript实现四方向文本无缝滚动效果
实现一个文本无缝滚动的效果:
<!DOCTYPEhtml> <!--[ifltIE7]><htmllang="zh-CN"class="ie6"><![endif]--> <!--[ifIE7]><htmllang="zh-CN"class="ie7"><![endif]--> <!--[ifIE8]><htmllang="zh-CN"class="ie8"><![endif]--> <!--[ifIE9]><htmllang="zh-CN"class="ie9"><![endif]--> <!--[if(gtIE9)|!(IE)]><!--><htmllang="zh-CN"><!--<![endif]--> <head> <title>文字滚动</title> <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"/> <styletype="text/css"> *{margin:0;padding:0;} body{padding:20px;} .textbox{border:1pxsolid#ddd;width:auto;overflow:hidden;} .textboxul{list-style:none;position:relative;} .textboxulli{padding:5px0;} </style> </head> <bodyclass="home-page"> <divid="textbox"class="textbox"> <ul> <li>汽车|运动B级车降3万5</li> <li>家居|这么厉害的装修女人真的要坐不住了</li> <li>教育|各省前三报考华工重奖10万元/人</li> <li>汽车|运动B级车降3万5平行进口车加价11万</li> <li>健康|滥用激素酿苦果14岁男孩10年不长个儿</li> <li>数码|最新手机报价说好的宽带降费提速呢?</li> <li>汽车|平行进口车加价11万</li> <li>汽车|运动B级车降3万5</li> <li>汽车|平行进口车加价11万</li> <li>运动|恒大亚冠生死战猜比分赢正版球衣</li> </ul> <ahref="#"class="btnPrev">向左</a> <ahref="#"class="btnNext">向右</a> </div> <br> <br> <divid="textbox2"class="textbox"> <ul> <li>汽车|运动B级车降3万5</li> <li>家居|这么厉害的装修女人真的要坐不住了</li> <li>教育|各省前三报考华工重奖10万元/人</li> <li>汽车|运动B级车降3万5平行进口车加价11万</li> <li>健康|滥用激素酿苦果14岁男孩10年不长个儿</li> <li>数码|最新手机报价说好的宽带降费提速呢?</li> <li>汽车|平行进口车加价11万</li> <li>汽车|运动B级车降3万5</li> <li>汽车|平行进口车加价11万</li> <li>运动|恒大亚冠生死战猜比分赢正版球衣</li> </ul> <ahref="#"class="btnPrev">向上</a> <ahref="#"class="btnNext">向下</a> </div> <scripttype="text/javascript"src="script/jquery-1.11.1.min.js"></script> <scripttype="text/javascript"> //四方向无缝滚动 scroll('#textbox',{vis:2,btnHidden:false,dir:'prev',type:'h'}); scroll('#textbox2',{vis:3,btnHidden:false,dir:'prev',type:'v'}); functionscroll(container,options){ varbox=$(container); varboxUl=box.find('ul').eq(0); varLiHeight=0;//不包含克隆li列表高度 varcloneLiHeight=0;//包含克隆li列表高度 varLiWidth=0;//不包含克隆li列表宽度 varcloneLiWidth=0;//包含克隆li列表宽度 varLis=boxUl.children(); varbtnPrev=box.find('.btnPrev'); varbtnNext=box.find('.btnNext'); //默认参数 vardefult={ vis:2,//显示个数 autoPlay:true,//自动播放 speed:50,//滚动速度 dir:'prev',//滚动方向 btnHidden:false,//按钮是否隐藏 type:'v'//水平或者垂直方向 }; varopt=$.extend({},defult,options); //构建DOM结构 varlastClone=0;//最后克隆元素 varlastCloneHeight=0;//最后克隆元素高度 varallCloneHeight=0;//全部克隆元素总高度 varlastCloneWidth=0; varallCloneWidth=0; varvisHeight=0;//可视高度 varvisWidth=0; varboxUl_wrap; if(opt.type==="v"){//垂直方向 Lis.each(function(){ $(this).height($(this).height()); LiHeight+=$(this).outerHeight(true); }); lastClone=boxUl.children(':last').clone().addClass('clone').prependTo(boxUl); lastCloneHeight=lastClone.outerHeight(true); allCloneHeight=lastClone.outerHeight(true); for(vari=0;i<opt.vis;i++){ Lis.eq(i).clone().addClass('clone').appendTo(boxUl); allCloneHeight+=Lis.eq(i).outerHeight(true); } visHeight=allCloneHeight-lastCloneHeight; cloneLiHeight=LiHeight+allCloneHeight; boxUl_wrap=$('<div></div>').css({'width':'100%','height':visHeight,'overflow':'hidden','position':'relative'}).attr('id','ulWrap'); boxUl.css({'height':cloneLiHeight,'top':-lastCloneHeight}).wrap(boxUl_wrap); }elseif(opt.type==="h"){//水平方向 Lis.css({'whiteSpace':'nowrap','float':'left','paddingRight':'10px'}); Lis.each(function(){ $(this).width($(this).width()); LiWidth+=$(this).outerWidth(true); }); lastClone=boxUl.children(':last').clone().addClass('clone').prependTo(boxUl); lastCloneWidth=lastClone.outerWidth(true); allCloneWidth=lastClone.outerWidth(true); for(varj=0;j<opt.vis;j++){ Lis.eq(j).clone().addClass('clone').appendTo(boxUl); allCloneWidth+=Lis.eq(j).outerWidth(true); } visHeight=Lis.eq(0).outerHeight(true); visWidth=allCloneWidth-lastCloneWidth; cloneLiWidth=LiWidth+allCloneWidth; boxUl_wrap=$('<div></div>').css({'width':visWidth,'height':visHeight,'overflow':'hidden','position':'relative'}).attr('id','ulWrap'); boxUl.css({'width':cloneLiWidth,'left':-lastCloneWidth}).wrap(boxUl_wrap); box.css({'width':visWidth}); } //添加事件处理 vartimer=null; varscrollTop=function(){ clearInterval(timer); timer=setInterval(function(){ vartmp=parseInt(boxUl.css('top').replace('px',"")); tmp--; boxUl.animate({'top':tmp},0,function(){ if(tmp<=-(LiHeight+lastCloneHeight)){ boxUl.css('top',-lastCloneHeight); } }); },opt.speed); }; varscrollDown=function(){ clearInterval(timer); timer=setInterval(function(){ vartmp=parseInt(boxUl.css('top').replace('px',"")); tmp++; boxUl.animate({'top':tmp},0,function(){ if(tmp>=0){ boxUl.css('top',-(LiHeight)); } }); },opt.speed); }; varscrollLeft=function(){ clearInterval(timer); timer=setInterval(function(){ vartmp=parseInt(boxUl.css('left').replace('px',"")); tmp--; boxUl.animate({'left':tmp},0,function(){ if(tmp<=-(LiWidth+lastCloneWidth)){ boxUl.css('left',-(lastCloneWidth)); } }); },opt.speed); }; varscrollRight=function(){ clearInterval(timer); timer=setInterval(function(){ vartmp=parseInt(boxUl.css('left').replace('px',"")); tmp++; boxUl.animate({'left':tmp},0,function(){ if(tmp>=0){ boxUl.css('left',-(LiWidth)); } }); },opt.speed); }; varscrollType=function(type,dir){ if(Lis.length>=opt.vis){//显示个数不能多于列表个数,否则不显示效果 varsdir=typeofdir!=="undefined"?dir:opt.dir; switch(type){ case"v": if(sdir=="prev"){scrollTop();}else{scrollDown();} break; case"h": if(sdir=="prev"){scrollLeft();}else{scrollRight();} } } }; if(opt.autoPlay){ scrollType(opt.type); } //添加事件处理 box.find('#ulWrap').hover(function(){ clearInterval(timer); },function(){ scrollType(opt.type); }); //按钮是否隐藏 if(!opt.btnHidden){ btnPrev.unbind('mouseover'); btnNext.unbind('mouseover'); btnPrev.mouseover(function(){ scrollType(opt.type,"prev"); }); btnNext.mouseover(function(){ scrollType(opt.type,"next"); }); }else{ btnPrev.hide(); btnNext.hide(); } } </script> </body> </html>
一些問題:
本地測試沒問題,但是通過document.write()把代碼輸入執行后,垂直模式下的li的高度height()獲取會有問題。原因不明,非常不解..
以上所述就是本文的全部内容了,希望大家能够喜欢。