欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

jQuery圖片滾動(dòng)圖片的效果(另類實(shí)現(xiàn))

 更新時(shí)間:2013年06月02日 15:43:53   作者:  
jQuery圖片滾動(dòng)圖片的效果(另類實(shí)現(xiàn)),需要的朋友可以參考一下

需求 : 圖片切換的時(shí)候下一屏不允許出現(xiàn)空白的項(xiàng),換句話說(shuō)就是 :

  1、當(dāng)移動(dòng)的最后一屏移動(dòng)的個(gè)數(shù)小于要展示的個(gè)數(shù)的時(shí)候 ,只移動(dòng)(展示個(gè)數(shù)-最后一屏的個(gè)數(shù)的)差值。 舉個(gè)例子: 每一屏都要展示7個(gè),但總個(gè)數(shù)才10個(gè),滾動(dòng)到下一屏?xí)r候用戶看到的還是7個(gè),這個(gè)時(shí)候需要移動(dòng)的是三個(gè)

這個(gè)效果是基于jQuery寫的,只是想紀(jì)念下自己的學(xué)習(xí) 話不多說(shuō)了,貼代碼

復(fù)制代碼 代碼如下:

(function( $ ){
     var slider = function( elem , args ){
         this.config = $.extend({
             effect   : 'x', //效果  水平 - x
             speed    : 600 , //動(dòng)畫速度
             trigger  : 'mouseenter', //觸發(fā)事件
             callback : null , // 回調(diào)函數(shù)
             view     : 7
         }, args || {}  );

         this.history = [];//記錄移動(dòng)的歷史記錄
         this.index = 0;
         this.el = elem;
         this.length = this.el.find('li').length;//記錄總長(zhǎng)度
         this.width = this.el.find('li').eq(0).outerWidth();//記錄每一個(gè)單項(xiàng)的寬度
         this.init();
     }
     slider.prototype = {
         constructor : slider,
         init : function(){
             this.bindEvents();
         },
         bindEvents : function(){
             this.prev();
             this.next();
         },
         prev :  function(){
             this.el.find('[data-type="left"]').click( $.proxy(function(){

                 if( !this.history.length ) return;//如果記錄為空,證明沒(méi)有進(jìn)行移動(dòng)過(guò),所以直接return

                 this.index--;
                 var step = this.history.pop();//取最后的移動(dòng)步驟
                 var move =  step * this.width;//算出移動(dòng)寬度
                 this.el.find("ul").animate( { "left" : "+="+move+"px" } , this.config.speed )

             } , this));
         },
         next : function(){
             this.el.find('[data-type="right"]').click( $.proxy(function(){
                 //如果是當(dāng)前的最后一頁(yè),直接return
                 if(this.index == parseInt( this.length / this.config.view , 10 ) ){
                     return;
                 }
                 this.index++;
                 //這個(gè)計(jì)算很重要
                 //計(jì)算 ( 下一頁(yè) * view ) 展示個(gè)數(shù)是否大于總長(zhǎng)度 : 好比當(dāng)前在第一頁(yè) (1+1) *7 > 12(總長(zhǎng)度)
                 //則this.step 賦值為取余 ,也就是剩下要移動(dòng)的個(gè)數(shù)
                 if( this.config.view * (this.index+1) > this.length ){
                     this.step =  this.length%this.config.view;
                 }else{
                     //否則移動(dòng)展示的個(gè)數(shù)
                     this.step = this.config.view;
                 }
                 //記錄移動(dòng)的歷史記錄
                 this.history.push(this.step);
                 var move = -1 * this.step * this.width;
                 this.el.find("ul").animate( { "left" : "+="+move+"px" } , this.config.speed )

             } , this));
         }
     }

     $.fn.slider = function( args ){
         return this.each(function(){
             var el = this;
             var plugins = new slider( $( el ) , args );
             $(el).data("slider" , plugins );
         });
     }
 })(jQuery)

開始對(duì)這個(gè)實(shí)現(xiàn)沒(méi)有好的想法,本來(lái)想利用一個(gè)變量記錄當(dāng)前的移動(dòng)個(gè)數(shù)的,但是后面突然想到用數(shù)組來(lái)做這樣子的處理,頓時(shí)感覺清晰了。

這個(gè)的實(shí)現(xiàn)重點(diǎn)是一個(gè)記錄移動(dòng)步驟的數(shù)組。向左移動(dòng)的時(shí)候往數(shù)組里面push移動(dòng)的步驟,向右移動(dòng)的時(shí)候,從數(shù)組里面取最后一項(xiàng) [].pop()。

這樣子很好的實(shí)現(xiàn)了需求,做的比較粗糙,麻煩各位大神提點(diǎn)意見

相關(guān)文章

最新評(píng)論