(function($) { $.fn.rollslide = function(obj) { var $self = this, orientation = obj.orientation || 'left', num = obj.num || 1, v = (typeof obj.v === 'number') ? obj.v : 0, mintime = (typeof obj.space === 'number') ? ((obj.space >= 100) ? obj.space : 100) : 100, space = mintime + v || 5000 + v, isroll = obj.isroll, isstart = true, roll = function(ori, n, v) { var $ul = $self.find('.roll__list'), $item = $ul.find('li'), range = 0, i, len = $item.length, sliceitem = [], clonesliceitem = [], starttime = (new date()).gettime(), memory = function() { var arr = []; if (ori === 'left' || ori === 'top') { for (i = 0; i < n; i++) { range += ori === 'left' ? $($item[i]).outerwidth(true) : $($item[i]).outerheight(true); arr.push($item[i]); } } else if (ori === 'right' || ori === 'bottom') { for (i = len - n; n > 0; n--, i++) { range += ori === 'right' ? $($item[i]).outerwidth(true) : $($item[i]).outerheight(true); arr.push($item[i]); } } return arr; }; isstart = false; sliceitem = memory(); clonesliceitem = $(sliceitem).clone(); switch (ori) { case 'left': $ul.append(clonesliceitem); $ul.animate({ 'left': -range + 'px' }, v, function() { $(this).css({ 'left': 0 }); $(sliceitem).remove(); isstart = true; }); break; case 'right': $ul.prepend(clonesliceitem); $ul.css('left', -range + 'px'); $ul.animate({ 'left': 0 }, v, function() { $(sliceitem).remove(); isstart = true; }); break; case 'top': $ul.append(clonesliceitem); $ul.animate({ 'top': -range + 'px' }, v, function() { $(this).css({ 'top': 0 }); $(sliceitem).remove(); isstart = true; }); break; case 'bottom': $ul.prepend(clonesliceitem); $ul.css('top', -range + 'px'); $ul.animate({ 'top': 0 }, v, function() { $(sliceitem).remove(); isstart = true; }); break; } }, init = function() { var $ul = $self.find('.roll__list'), $item = $ul.find('li'), len = $item.length, timer; num = num <= len ? num : len; if (len > 1) { $self.on('click', '.pre', function() { if (isstart) { if (orientation === 'left' || orientation === 'right') { roll('right', num, v); } else { roll('bottom', num, v); } } }).on('click', '.next', function() { if (isstart) { if (orientation === 'left' || orientation === 'right') { roll('left', num, v); } else { roll('top', num, v); } } }).hover(function() { clearinterval(timer); }, function() { if (isroll) { timer = setinterval(function() { roll(orientation, num, v); }, space); } }).trigger('mouseout'); } }; init(); }; $.fn.rollnointerval = function() { var $self = this, $ul = $self.find('.roll__list'), $item = $ul.find('li'), len = $item.length, timer; var left = function() { var offset, i, range, $sliceitem; $sliceitem = $($item[0]); range = $sliceitem.outerwidth(true); timer = setinterval(function() { offset = $ul.css('left'); offset = parseint(offset); if (offset > -range) { i = offset - 1; $ul.css('left', i + 'px'); offset = $ul.css('left'); } else { $sliceitem.detach(); $ul.css('left', 0); $ul.append($sliceitem); $sliceitem = $($ul.find('li')[0]); range = $sliceitem.outerwidth(true); } }, 50); $self.hover(function() { clearinterval(timer); }, function() { var offset, i, range, $sliceitem; $sliceitem = $($item[0]); range = $sliceitem.outerwidth(true); timer = setinterval(function() { offset = $ul.css('left'); offset = parseint(offset); if (offset > -range) { i = offset - 1; $ul.css('left', i + 'px'); offset = $ul.css('left'); } else { $sliceitem.detach(); $ul.css('left', 0); $ul.append($sliceitem); $sliceitem = $($ul.find('li')[0]); range = $sliceitem.outerwidth(true); } }, 50); }); }, right = function() { var offset, i, range, $sliceitem; $sliceitem = $($item[len - 1]); range = $sliceitem.outerwidth(true); timer = setinterval(function() { offset = $ul.css('right'); offset = parseint(offset); if (offset > -range) { i = offset - 1; $ul.css('right', i + 'px'); offset = $ul.css('right'); } else { $sliceitem.detach(); $ul.css('right', 0); $ul.prepend($sliceitem); $sliceitem = $($ul.find('li')[len - 1]); range = $sliceitem.outerwidth(true); } }, 50); }, top = function() { var offset, i, range, $sliceitem; $sliceitem = $($item[0]); range = $sliceitem.outerheight(true); timer = setinterval(function() { offset = $ul.css('top'); offset = parseint(offset); if (offset > -range) { i = offset - 1; $ul.css('top', i + 'px'); offset = $ul.css('top'); } else { $sliceitem.detach(); $ul.css('top', 0); $ul.append($sliceitem); $sliceitem = $($ul.find('li')[0]); range = $sliceitem.outerheight(true); } }, 50); }, bottom = function() { var offset, i, range, $sliceitem; $sliceitem = $($item[len - 1]); range = $sliceitem.outerheight(true); timer = setinterval(function() { offset = $ul.css('bottom'); offset = parseint(offset); if (offset > -range) { i = offset - 1; $ul.css('bottom', i + 'px'); offset = $ul.css('bottom'); } else { $sliceitem.detach(); $ul.css('bottom', 0); $ul.prepend($sliceitem); $sliceitem = $($ul.find('li')[len - 1]); range = $sliceitem.outerheight(true); } }, 50); }, init = function() { $self.hover(function() { clearinterval(timer); }, function() { console.dir($self); }); }; return { left: left, right: right, top: top, bottom: bottom, timer: timer } } })(jquery);