当移动的最后一屏移动的个数小于要展示的个数的时候 只移动(展示个数最后一屏的个数的)差值 举个例子 每一屏都要展示个但总个数才个滚动到下一屏时候用户看到的还是个这个时候需要移动的是三个
这个效果是基于jQuery写的
只是想纪念下自己的学习 话不多说了
贴代码代码如下:(function( $ ){var slider = function( elem
args ){this
config = $
extend({effect :
x
//效果 水平
xspeed :
//动画速度trigger :
mouseenter
//触发事件callback : null
// 回调函数view :
}
args || {} );this
history = [];//记录移动的历史记录this
index =
;this
el = elem;this
length = this
el
find(
li
)
length;//记录总长度this
width = this
el
find(
li
)
eq(
)
outerWidth();//记录每一个单项的宽度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;//如果记录为空
证明没有进行移动过
所以直接returnthis
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(){//如果是当前的最后一页
直接returnif(this
index == parseInt( this
length / this
config
view
) ){return;}this
index++;//这个计算很重要//计算 ( 下一页 * view ) 展示个数是否大于总长度 : 好比当前在第一页 (
+
) *
>
(总长度)//则this
step 赋值为取余
也就是剩下要移动的个数if( this
config
view * (this
index+
) > this
length ){this
step = this
length%this
config
view;}else{//否则移动展示的个数this
step = this
config
view;}//记录移动的历史记录this
history
push(this
step);var move =
* 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)开始对这个实现没有好的想法
本来想利用一个变量记录当前的移动个数的
但是后面突然想到用数组来做这样子的处理
顿时感觉清晰了
这个的实现重点是一个记录移动步骤的数组
向左移动的时候往数组里面push移动的步骤
向右移动的时候
从数组里面取最后一项 []
pop()
这样子很好的实现了需求
做的比较粗糙
麻烦各位大神提点意见