2011-11-22 91 views
0

我在我的網站上使用Coin Slider,但今天遇到了一個非常意外的驚喜,當時我的客戶要求我在最後一張幻燈片上放映幻燈片。顯然它不是內置的,沒有選擇讓它停止。Coinslider ...添加代碼來停止循環

我希望有人能幫我找到它在腳本中循環的地方,並提出一種方法來添加這個選項。

我甚至不介意有2個版本的腳本,一個循環,一個不循環。

function loadContent(elementSelector, sourceURL) { 
    $(""+elementSelector+"").load("http://localhost/auxtest/"+sourceURL+""); 
} 

(function($) { 

var params  = new Array; 
var order  = new Array; 
var images  = new Array; 
var links  = new Array; 
var linksTarget = new Array; 
var titles  = new Array; 
var interval = new Array; 
var imagePos = new Array; 
var appInterval = new Array;  
var squarePos = new Array;  
var reverse  = new Array; 

$.fn.coinslider= $.fn.CoinSlider = function(options){ 

    init = function(el){ 

     order[el.id]  = new Array(); // order of square appereance 
     images[el.id]  = new Array(); 
     links[el.id]  = new Array(); 
     linksTarget[el.id] = new Array(); 
     titles[el.id]  = new Array(); 
     imagePos[el.id]  = 0; 
     squarePos[el.id] = 0; 
     reverse[el.id]  = 1;       

     params[el.id] = $.extend({}, $.fn.coinslider.defaults, options); 

     // create images, links and titles arrays 
     $.each($('#'+el.id+' img'), function(i,item){ 
      images[el.id][i]  = $(item).attr('src'); 
      links[el.id][i]   = $(item).parent().is('a') ? $(item).parent().attr('href') : ''; 
      linksTarget[el.id][i] = $(item).parent().is('a') ? $(item).parent().attr('target') : ''; 
      titles[el.id][i]  = $(item).next().is('span') ? $(item).next().html() : ''; 
      $(item).hide(); 
      $(item).next().hide(); 
     });   


     // set panel 
     $(el).css({ 
      'background-image':'url('+images[el.id][0]+')', 
      'width': params[el.id].width, 
      'height': params[el.id].height, 
      'position': 'relative', 
      'background-position': 'top left' 
     }).wrap("<div class='coin-slider' id='coin-slider-"+el.id+"' />"); 


     // create title bar 
     $('#'+el.id).append("<div class='cs-title' id='cs-title-"+el.id+"' style='position:absolute; bottom:0; left:0; z-index: 1000;'></div>"); 

     $.setFields(el); 

     if(params[el.id].navigation) 
      $.setNavigation(el); 

     $.transition(el,0); 
     $.transitionCall(el); 

    } 

    // squares positions 
    $.setFields = function(el){ 

     tWidth = sWidth = parseInt(params[el.id].width/params[el.id].spw); 
     tHeight = sHeight = parseInt(params[el.id].height/params[el.id].sph); 

     counter = sLeft = sTop = 0; 
     tgapx = gapx = params[el.id].width - params[el.id].spw*sWidth; 
     tgapy = gapy = params[el.id].height - params[el.id].sph*sHeight; 

     for(i=1;i <= params[el.id].sph;i++){ 
      gapx = tgapx; 

       if(gapy > 0){ 
        gapy--; 
        sHeight = tHeight+1; 
       } else { 
        sHeight = tHeight; 
       } 

      for(j=1; j <= params[el.id].spw; j++){ 

       if(gapx > 0){ 
        gapx--; 
        sWidth = tWidth+1; 
       } else { 
        sWidth = tWidth; 
       } 

       order[el.id][counter] = i+''+j; 
       counter++; 

       if(params[el.id].links) 
        $('#'+el.id).append("<a href='"+links[el.id][0]+"' class='cs-"+el.id+"' id='cs-"+el.id+i+j+"' style='width:"+sWidth+"px; height:"+sHeight+"px; float: left; position: absolute;'></a>"); 
       else 
        $('#'+el.id).append("<div class='cs-"+el.id+"' id='cs-"+el.id+i+j+"' style='width:"+sWidth+"px; height:"+sHeight+"px; float: left; position: absolute;'></div>"); 

       // positioning squares 
       $("#cs-"+el.id+i+j).css({ 
        'background-position': -sLeft +'px '+(-sTop+'px'), 
        'left' : sLeft , 
        'top': sTop 
       }); 

       sLeft += sWidth; 
      } 

      sTop += sHeight; 
      sLeft = 0;     

     } 


     $('.cs-'+el.id).mouseover(function(){ 
      $('#cs-navigation-'+el.id).show(); 
     }); 

     $('.cs-'+el.id).mouseout(function(){ 
      $('#cs-navigation-'+el.id).hide(); 
     }); 

     $('#cs-title-'+el.id).mouseover(function(){ 
      $('#cs-navigation-'+el.id).show(); 
     }); 

     $('#cs-title-'+el.id).mouseout(function(){ 
      $('#cs-navigation-'+el.id).hide(); 
     }); 

     if(params[el.id].hoverPause){ 
      $('.cs-'+el.id).mouseover(function(){ 
       params[el.id].pause = true; 
      }); 

      $('.cs-'+el.id).mouseout(function(){ 
       params[el.id].pause = false; 
      }); 

      $('#cs-title-'+el.id).mouseover(function(){ 
       params[el.id].pause = true; 
      }); 

      $('#cs-title-'+el.id).mouseout(function(){ 
       params[el.id].pause = false; 
      }); 
     } 


    }; 


    $.transitionCall = function(el){ 

     clearInterval(interval[el.id]); 
     delay = params[el.id].delay + params[el.id].spw*params[el.id].sph*params[el.id].sDelay; 
     interval[el.id] = setInterval(function() { $.transition(el) }, delay); 

    } 

    // transitions 
    $.transition = function(el,direction){ 

     if(params[el.id].pause == true) return; 

     $.effect(el); 

     squarePos[el.id] = 0; 
     appInterval[el.id] = setInterval(function() { $.appereance(el,order[el.id][squarePos[el.id]]) },params[el.id].sDelay); 

     $(el).css({ 'background-image': 'url('+images[el.id][imagePos[el.id]]+')' }); 

     if(typeof(direction) == "undefined") 
      imagePos[el.id]++; 
     else 
      if(direction == 'prev') 
       imagePos[el.id]--; 
      else 
       imagePos[el.id] = direction; 

     if (imagePos[el.id] == images[el.id].length) { 
      imagePos[el.id] = 0; 
     } 

     if (imagePos[el.id] == -1){ 
      imagePos[el.id] = images[el.id].length-1; 
     } 

     $('.cs-button-'+el.id).removeClass('cs-active'); 
     $('#cs-button-'+el.id+"-"+(imagePos[el.id]+1)).addClass('cs-active'); 

     if(titles[el.id][imagePos[el.id]]){ 
      $('#cs-title-'+el.id).css({ 'opacity' : 0 }).animate({ 'opacity' : params[el.id].opacity }, params[el.id].titleSpeed); 
      $('#cs-title-'+el.id).html(titles[el.id][imagePos[el.id]]); 
     } else { 
      $('#cs-title-'+el.id).css('opacity',0); 
     }    

    }; 

    $.appereance = function(el,sid){ 

     $('.cs-'+el.id).attr('href',links[el.id][imagePos[el.id]]).attr('target',linksTarget[el.id][imagePos[el.id]]); 

     if (squarePos[el.id] == params[el.id].spw*params[el.id].sph) { 
      clearInterval(appInterval[el.id]); 
      return; 
     } 

     $('#cs-'+el.id+sid).css({ opacity: 0, 'background-image': 'url('+images[el.id][imagePos[el.id]]+')' }); 
     $('#cs-'+el.id+sid).animate({ opacity: 1 }, 300); 
     squarePos[el.id]++; 

    }; 

    // navigation 
    $.setNavigation = function(el){ 
     // create prev and next 
     $(el).append("<div id='cs-navigation-"+el.id+"'></div>"); 
     $('#cs-navigation-'+el.id).hide(); 

     $('#cs-navigation-'+el.id).append("<a href='#' id='cs-prev-"+el.id+"' class='cs-prev'>&nbsp;</a>"); 
     $('#cs-navigation-'+el.id).append("<a href='#' id='cs-next-"+el.id+"' class='cs-next'>&nbsp;</a>"); 
     $('#cs-navigation-'+el.id).append("<a href='javascript:loadContent('#world', 'auxworld.php');' id='cs-back-"+el.id+"' class='cs-back'>&nbsp;</a>"); 
     $('#cs-prev-'+el.id).css({ 
      'position' : 'absolute', 
      'top'  : params[el.id].height/2 - 15, 
      'left'  : 0, 
      'z-index' : 1001, 
      'line-height': '30px', 
      'opacity' : params[el.id].opacity 
     }).click(function(e){ 
      e.preventDefault(); 
      $.transition(el,'prev'); 
      $.transitionCall(el);  
     }).mouseover(function(){ $('#cs-navigation-'+el.id).show() }); 

     $('#cs-next-'+el.id).css({ 
      'position' : 'absolute', 
      'top'  : params[el.id].height/2 - 15, 
      'right'  : 0, 
      'z-index' : 1005, 
      'line-height': '30px', 
      'opacity' : params[el.id].opacity 
     }).click(function(e){ 
      e.preventDefault(); 
      $.transition(el); 
      $.transitionCall(el); 
     }).mouseover(function(){ $('#cs-navigation-'+el.id).show() }); 

     $('#cs-back-'+el.id).css({ 
      'position' : 'absolute', 
      'top'  : params[el.id].height/2 - 15, 
      'right'  : 0, 
      'z-index' : 1001, 
      'line-height': '30px', 
      'opacity' : params[el.id].opacity 
     }).click(function(){ 
      window.location.replace('index.php'); 
      // loadContent('#world', 'auxworld.php'); 
     }).mouseover(function(){ $('#cs-navigation-'+el.id).show() }); 



     // image buttons 
     $("<div id='cs-buttons-"+el.id+"' class='cs-buttons'></div>").appendTo($('#coin-slider-'+el.id)); 


     for(k=1;k<images[el.id].length+1;k++){ 
      $('#cs-buttons-'+el.id).append("<a href='#' class='cs-button-"+el.id+"' id='cs-button-"+el.id+"-"+k+"'>"+k+"</a>"); 
     } 

     $.each($('.cs-button-'+el.id), function(i,item){ 
      $(item).click(function(e){ 
       $('.cs-button-'+el.id).removeClass('cs-active'); 
       $(this).addClass('cs-active'); 
       e.preventDefault(); 
       $.transition(el,i); 
       $.transitionCall(el);    
      }) 
     }); 

     $('#cs-navigation-'+el.id+' a').mouseout(function(){ 
      $('#cs-navigation-'+el.id).hide(); 
      params[el.id].pause = false; 
     });      

     $("#cs-buttons-"+el.id).css({ 
      'left'   : '50%', 
      'margin-left' : -images[el.id].length*15/2-5, 
      'position'  : 'relative' 

     }); 


    } 




    // effects 
    $.effect = function(el){ 

     effA = ['random','swirl','rain','straight']; 
     if(params[el.id].effect == '') 
      eff = effA[Math.floor(Math.random()*(effA.length))]; 
     else 
      eff = params[el.id].effect; 

     order[el.id] = new Array(); 

     if(eff == 'random'){ 
      counter = 0; 
       for(i=1;i <= params[el.id].sph;i++){ 
       for(j=1; j <= params[el.id].spw; j++){ 
        order[el.id][counter] = i+''+j; 
        counter++; 
       } 
       } 
      $.random(order[el.id]); 
     } 

     if(eff == 'rain') { 
      $.rain(el); 
     } 

     if(eff == 'swirl') 
      $.swirl(el); 

     if(eff == 'straight') 
      $.straight(el); 

     reverse[el.id] *= -1; 
     if(reverse[el.id] > 0){ 
      order[el.id].reverse(); 
     } 

    } 


    // shuffle array function 
    $.random = function(arr) { 

     var i = arr.length; 
     if (i == 0) return false; 
     while (--i) { 
     var j = Math.floor(Math.random() * (i + 1)); 
     var tempi = arr[i]; 
     var tempj = arr[j]; 
     arr[i] = tempj; 
     arr[j] = tempi; 
     } 
    } 

    //swirl effect by milos popovic 
    $.swirl = function(el){ 

     var n = params[el.id].sph; 
     var m = params[el.id].spw; 

     var x = 1; 
     var y = 1; 
     var going = 0; 
     var num = 0; 
     var c = 0; 

     var dowhile = true; 

     while(dowhile) { 

      num = (going==0 || going==2) ? m : n; 

      for (i=1;i<=num;i++){ 

       order[el.id][c] = x+''+y; 
       c++; 

       if(i!=num){ 
        switch(going){ 
         case 0 : y++; break; 
         case 1 : x++; break; 
         case 2 : y--; break; 
         case 3 : x--; break; 

        } 
       } 
      } 

      going = (going+1)%4; 

      switch(going){ 
       case 0 : m--; y++; break; 
       case 1 : n--; x++; break; 
       case 2 : m--; y--; break; 
       case 3 : n--; x--; break;  
      } 

      check = $.max(n,m) - $.min(n,m);    
      if(m<=check && n<=check) 
       dowhile = false; 

     } 
    } 

    // rain effect 
    $.rain = function(el){ 
     var n = params[el.id].sph; 
     var m = params[el.id].spw; 

     var c = 0; 
     var to = to2 = from = 1; 
     var dowhile = true; 


     while(dowhile){ 

      for(i=from;i<=to;i++){ 
       order[el.id][c] = i+''+parseInt(to2-i+1); 
       c++; 
      } 

      to2++; 

      if(to < n && to2 < m && n<m){ 
       to++; 
      } 

      if(to < n && n>=m){ 
       to++; 
      } 

      if(to2 > m){ 
       from++; 
      } 

      if(from > to) dowhile= false; 

     }   

    } 

    // straight effect 
    $.straight = function(el){ 
     counter = 0; 
     for(i=1;i <= params[el.id].sph;i++){ 
      for(j=1; j <= params[el.id].spw; j++){ 
       order[el.id][counter] = i+''+j; 
       counter++; 
      } 

     } 
    } 

    $.min = function(n,m){ 
     if (n>m) return m; 
     else return n; 
    } 

    $.max = function(n,m){ 
     if (n<m) return m; 
     else return n; 
    }  

this.each (
    function(){ init(this); } 
); 


}; 


// default values 
$.fn.coinslider.defaults = {  
    width: 1230, // width of slider panel 
    height: 500, // height of slider panel 
    spw: 20, // squares per width 
    sph: 1, // squares per height 
    delay: 7000, // delay between images in ms 
    sDelay: .1, // delay beetwen squares in ms 
    opacity: 0.9, // opacity of title and navigation 
    titleSpeed: 1160, // speed of title appereance in ms 
    effect: 'rain', // random, swirl, rain, straight 
    navigation: true, // prev next and buttons 
    links : false, // show images as links 
    hoverPause: true // pause on hover    
}; 

})(jQuery); 
+0

你是否希望它停在最後一張幻燈片上,就是這樣 - 沒有恢復的選項?另外 - 當用戶點擊最後一個迷你廣場(即導航*或其他)應該停止在那一點騎車時,或者再次運行一次,然後在到達最後一個幻燈片後停止,會發生什麼情況? – WTK

+0

↺請在打印此問題前考慮環境。 :) –

+0

@wtk它應該停在最後一張幻燈片,就是這樣。導航並不需要改變,因爲我們仍然希望用戶能夠在幻燈片之間來回切換。 – nero

回答

0

我會嘗試修改$.transitionCall函數。這個集合是顯示下一個元素的新超時。

也許你可以在這裏找到,如果它要呈現的最後一個元素,然後跳到設定的時間間隔

$.transitionCall = function(el) { 

    clearInterval(interval[el.id]); 
    delay = params[el.id].delay + params[el.id].spw * params[el.id].sph * params[el.id].sDelay; 
    interval[el.id] = setInterval(function() { 
     $.transition(el) 
    }, delay); 

} 

另一種選擇不停止間隔設置params[el.id].pause = true;