1. 程式人生 > >jquery滾動實現原理之一,自制滾動函式例項

jquery滾動實現原理之一,自制滾動函式例項

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htmlxmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type"content="text/html; charset=utf-8" /> <link rel='stylesheet' href='left.css'type='text/css' title='left'/> <link rel='alternate stylesheet'href='right.css' type='text/css'title='right'\> <title>dddddddd</title> <style type='text/css' > .content{width:500px;height:100px; border:1px solidred;} .next,.prev{margin:5px; height:90px;width:10px;float:left;border:1px solid #5d8;} .con {width:440px; height:90px; background:#dee;float:left;padding:0; margin:5px; overflow:hidden; position:relative} .con ul {list-style:none;  height:90px;padding:0 ;margin:0;position:absolute;left:0px;} .con li{height: 70px; margin:10px; width:125px; border:1pxsolid #333;float:left; text-align:center;line-height:70px;} </style> <scriptsrc='http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'type='text/javascript'></script> <scripttype='text/javascript'> var jq = jQuery.noConflict();  functionleft_right_scroll(conclss,outclass,inclass,num,tnum,speed,intername){//左右圖片滾動效果 if(!arguments[6]) intername = "MyMar";  //迴圈計算器的名稱,確保各個模組之間不相互干擾,這個引數是預設引數 var kWidth = jq(inclass+' li').outerWidth(true);//一個框的寬度 var width = num*tnum*kWidth; //獲取li列表總寬度 jq(inclass).css('width',width*2+'px').append(jq(inclass).html()); //複製原來的一段新增到這裡形成第二段,這裡是滾動實現的關鍵所在 jq('.next').click(function(){ zWinScorll(outclass,inclass,jq(this),tnum,width,kWidth,num,speed);//點擊向後按鈕執行向後滾動函式 }); jq('.prev').click(function(){ fWinScorll(outclass,inclass,jq(this),tnum,width,kWidth,num,speed);//點擊向前按鈕執行向滾動函式 }); intername=setInterval(function(){jq(conclss+'.next').trigger('click');},5000);//定義自動滾動函式,迴圈執行模擬當前當前下點選,其實迴圈執行正向滾動函式也行。.next 前加上了conclass變數是定義傳入不同範圍內點選,實現相互不干擾 jq(conclss).mouseover(function(){ clearInterval(intername); }).mouseout(function(){ intername=setInterval(function(){jq(conclss+'.next').trigger('click');},5000); }); } functionzWinScorll(outclass,inclass,mes,tnum,width,kWidth,num,speed){  //定義正向滾動函式 var me = mes.siblings(outclass).find(inclass); //"非同步處理",就是點next頁面上的框不是都滾動,而是通過邏輯關係來處理是哪個滾動 if(!me.is(':animated')){ //判斷當前元素是否處於動畫狀態,不處於才追加動畫 me.stop().animate({'left':'-='+kWidth*num+'px'},speed,function(){//將元素的left -= 3個元素的寬度以顯示下三元素/可以通過改變num的值來顯示滾動的個數 if(me.css('left') == -width+'px'){me.css('left','0px');}//判斷滾動的是原來的寬度時將left設為0,實現迴圈滾動 }); }; } functionfWinScorll(outclass,inclass,mes,tnum,width,kWidth,num,speed){  //定義反向滾動函式 var me = mes.siblings(outclass).find(inclass); if(me.css('left') == '0px'){me.css('left','-'+width+'px');}//判斷如果現在是顯示的第一個,現在再向前滾動的情況下應該先讓他顯示第二段的頭,這樣他前面還有內容可滾動顯示。 if(!me.is(':animated')){ me.stop().animate({'left':'+='+kWidth*num+'px'},speed,function(){ }); } } </script> </head> <body id='bodyid'name='bodyid'> <div class='content content1'style=""> <divclass='prev'></div> <div class='concon1'><!--外部div相對定位  relative--> <ul class='conul conul1'><!--外部div絕對定位 absolute--> <li>111</li><li>222</li><li>333</li><li>444</li><li>555</li><li>666</li> </ul> </div> <divclass='next'>ee</div> </div> <scripttype='text/javascript'> left_right_scroll('.content1','.con1','.conul1',3,2,1000,'aa'); </script> <hr> <div class='content content2'style=""> <divclass='prev'></div> <div class='concon2'><!--外部div相對定位  relative--> <ul class='conul conul2'><!--外部div絕對定位 absolute--> <li>111</li><li>222</li><li>333</li><li>444</li><li>555</li><li>666</li> </ul> </div> <divclass='next'>dd</div> </div> <scripttype='text/javascript'> left_right_scroll('.content2','.con2','.conul2',3,2,1000,'dd'); </script> <hr> <div class='content content3'style=""> <divclass='prev'></div> <div class='concon3'><!--外部div相對定位  relative--> <ul class='conul conul3'><!--外部div絕對定位 absolute--> <li>111</li><li>222</li><li>333</li><li>444</li><li>555</li><li>666</li> </ul> </div> <divclass='next'>dd</div> </div> <scripttype='text/javascript'> left_right_scroll('.content3','.con3','.conul3',3,2,1000,'ee'); </script> <hr> </body> </html>