jQuery圖片滾動圖片的效果(另類實(shí)現(xiàn))
需求 : 圖片切換的時候下一屏不允許出現(xiàn)空白的項(xiàng),換句話說就是 :
1、當(dāng)移動的最后一屏移動的個數(shù)小于要展示的個數(shù)的時候 ,只移動(展示個數(shù)-最后一屏的個數(shù)的)差值。 舉個例子: 每一屏都要展示7個,但總個數(shù)才10個,滾動到下一屏?xí)r候用戶看到的還是7個,這個時候需要移動的是三個
這個效果是基于jQuery寫的,只是想紀(jì)念下自己的學(xué)習(xí) 話不多說了,貼代碼
(function( $ ){
var slider = function( elem , args ){
this.config = $.extend({
effect : 'x', //效果 水平 - x
speed : 600 , //動畫速度
trigger : 'mouseenter', //觸發(fā)事件
callback : null , // 回調(diào)函數(shù)
view : 7
}, args || {} );
this.history = [];//記錄移動的歷史記錄
this.index = 0;
this.el = elem;
this.length = this.el.find('li').length;//記錄總長度
this.width = this.el.find('li').eq(0).outerWidth();//記錄每一個單項(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;//如果記錄為空,證明沒有進(jìn)行移動過,所以直接return
this.index--;
var step = this.history.pop();//取最后的移動步驟
var move = step * this.width;//算出移動寬度
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)前的最后一頁,直接return
if(this.index == parseInt( this.length / this.config.view , 10 ) ){
return;
}
this.index++;
//這個計算很重要
//計算 ( 下一頁 * view ) 展示個數(shù)是否大于總長度 : 好比當(dāng)前在第一頁 (1+1) *7 > 12(總長度)
//則this.step 賦值為取余 ,也就是剩下要移動的個數(shù)
if( this.config.view * (this.index+1) > this.length ){
this.step = this.length%this.config.view;
}else{
//否則移動展示的個數(shù)
this.step = this.config.view;
}
//記錄移動的歷史記錄
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)
開始對這個實(shí)現(xiàn)沒有好的想法,本來想利用一個變量記錄當(dāng)前的移動個數(shù)的,但是后面突然想到用數(shù)組來做這樣子的處理,頓時感覺清晰了。
這個的實(shí)現(xiàn)重點(diǎn)是一個記錄移動步驟的數(shù)組。向左移動的時候往數(shù)組里面push移動的步驟,向右移動的時候,從數(shù)組里面取最后一項(xiàng) [].pop()。
這樣子很好的實(shí)現(xiàn)了需求,做的比較粗糙,麻煩各位大神提點(diǎn)意見
相關(guān)文章
Jquery實(shí)現(xiàn)列表(隔行換色,全選,鼠標(biāo)滑過當(dāng)前行)效果實(shí)例
Jquery實(shí)現(xiàn)列表(隔行換色,全選,鼠標(biāo)滑過當(dāng)前行)效果實(shí)例,需要的朋友可以參考一下2013-06-06
使用jQuery獲取所有標(biāo)簽的實(shí)現(xiàn)代碼
在前端開發(fā)中,使用jQuery能夠方便地操作DOM元素,有時候我們需要獲取頁面上所有的HTML標(biāo)簽,可以通過jQuery來實(shí)現(xiàn),本文將介紹如何使用jQuery獲取所有的標(biāo)簽,并展示一個簡單的示例代碼,需要的朋友可以參考下2024-09-09
jQuery中document與window以及l(fā)oad與ready 區(qū)別詳解
這篇文章主要介紹了jQuery中document與window以及l(fā)oad與ready 區(qū)別詳解,需要的朋友可以參考下2014-12-12
jQuery獲取單選按鈕radio選中值與去除所有radio選中狀態(tài)的方法
下面小編就為大家?guī)硪黄猨Query獲取單選按鈕radio選中值與去除所有radio選中狀態(tài)的方法。2017-05-05
jquery配合css簡單實(shí)現(xiàn)返回頂部效果
返回頂部效果想必大家并不陌生吧,其實(shí)實(shí)現(xiàn)方法有很多,在本文為大家介紹下使用jquery是如何輕易實(shí)現(xiàn)的,感興趣的朋友可以參考下2013-09-09
使用jQuery或者原生js實(shí)現(xiàn)鼠標(biāo)滾動加載頁面新數(shù)據(jù)
這篇文章主要介紹了使用jQuery或者原生js實(shí)現(xiàn)鼠標(biāo)滾動加載頁面新數(shù)據(jù)的方法,即控制滾動條下拉時的加載事件,需要的朋友可以參考下2016-03-03
jQuery對底部導(dǎo)航進(jìn)行跳轉(zhuǎn)并高亮顯示的實(shí)例代碼
這篇文章主要介紹了jQuery對底部導(dǎo)航進(jìn)行跳轉(zhuǎn)并高亮顯示的實(shí)例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-04-04
基于jQuery實(shí)現(xiàn)選取月份插件附源碼下載
這是一個基于jQuery的可以選擇年份和月份的月份拾取插件,你可以設(shè)置點(diǎn)擊頁面上的任意元素觸發(fā)彈出年月選擇面板,可以是一個鏈接也可以是一個輸入框,廣泛應(yīng)用于月份查詢,而無需設(shè)置select表單。2015-12-12

