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ō)了,貼代碼
(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)意見
- jquery圖片滾動(dòng)放大代碼分享(2)
- jquery圖片滾動(dòng)放大代碼分享(1)
- jquery實(shí)現(xiàn)多行文字圖片滾動(dòng)效果示例代碼
- 一個(gè)jquery實(shí)現(xiàn)的不錯(cuò)的多行文字圖片滾動(dòng)效果
- JQuery 圖片滾動(dòng)輪播示例代碼
- jquery實(shí)現(xiàn)圖片滾動(dòng)效果的簡(jiǎn)單實(shí)例
- jQuery bxCarousel實(shí)現(xiàn)圖片滾動(dòng)切換效果示例代碼
- Jquery圖片滾動(dòng)與幻燈片的實(shí)例代碼
- jQuery+css實(shí)現(xiàn)圖片滾動(dòng)效果(附源碼)
- jquery實(shí)現(xiàn)圖片平滑滾動(dòng)詳解
相關(guān)文章
jQuery讓控件左右移動(dòng)的三種實(shí)現(xiàn)方法
常用的方法就是把控件的CSS position屬性設(shè)置為relative或 absolute,大家也可以學(xué)習(xí)下本文提供的其他方法2013-09-09jQuery教程 $()包裝函數(shù)來(lái)實(shí)現(xiàn)數(shù)組元素分頁(yè)效果
最近一周在做中文站搜索禮品widget的需求,這個(gè)需求中有一個(gè)分頁(yè)的功能2013-08-08jQuery插件擴(kuò)展實(shí)例【添加回調(diào)函數(shù)】
這篇文章主要介紹了jQuery插件擴(kuò)展的方法,結(jié)合實(shí)例形式分析了jQuery插件添加回調(diào)函數(shù)與事件觸發(fā)機(jī)制的相關(guān)操作技巧,需要的朋友可以參考下2016-11-11jQuery中innerWidth()方法用法實(shí)例
這篇文章主要介紹了jQuery中innerWidth()方法用法,實(shí)例分析了innerWidth()方法的功能、定義及獲取第一個(gè)匹配元素內(nèi)部區(qū)域?qū)挾鹊氖褂眉记?需要的朋友可以參考下2015-01-01jQuery手動(dòng)點(diǎn)擊實(shí)現(xiàn)圖片輪播特效
這篇文章主要為大家詳細(xì)介紹了jQuery手動(dòng)點(diǎn)擊實(shí)現(xiàn)圖片輪播特效,手動(dòng)點(diǎn)擊數(shù)字卡片實(shí)現(xiàn)圖片輪播,對(duì)圖片輪播感興趣的小伙伴們可以參考一下2015-12-12jQuery實(shí)現(xiàn)輸入框的放大和縮小功能示例
這篇文章主要介紹了jQuery實(shí)現(xiàn)輸入框的放大和縮小功能,涉及jQuery基于事件響應(yīng)的頁(yè)面元素屬性動(dòng)態(tài)變換相關(guān)操作技巧,需要的朋友可以參考下2018-07-07ASP.NET中使用后端代碼注冊(cè)腳本 生成JQUERY-EASYUI的界面錯(cuò)位的解決方法
上一篇解決了用了JQUERY-EASYUI時(shí) 后端注冊(cè)腳本重復(fù)執(zhí)行的問(wèn)題.今天又發(fā)現(xiàn),通過(guò)后端代碼 生成的界面有錯(cuò)位現(xiàn)象.2010-06-06