/********************************************
jQuery Plugin .. jq.rolling.js
url.. http://nunbi.co.kr/dev/jquery-rolling
copyright 2013 mirrh
********************************************/
(function($){
"use strict";
function Rolling(o,w,h,params){
var frame = null;
var wrapper = null;
var settings = {
items: 1,
delay: 2500,
duration: 500,
rolling: 'page',
autoscroll: 1,
flow: 0
};
var item = {
width: 0,
length: 0
};
var page = {
total: 1,
now: 1,
width: 0
};
var scroll = {
pos: 0,
width: 0,
stop: 0
}
var rollingTimeIntervalID = 0;
var self = this;
this.scroll = scroll;
init(o,w,h,params);
function init(o,w,h,params){
settings = $.extend(settings,params || {});
frame = o;
//frame.wrap("
");
wrapper = frame.parent();
//wrapper.append("");
$("li",frame).css("width",w / settings.items);
item.width = $("li",frame).outerWidth() + 1;
item.length = $("li",frame).length;
page.total = Math.ceil(item.length / settings.items);
page.width = item.width * settings.items;
frame.addClass("frame");
frame.width(settings.items * item.width);
frame.height(h);
wrapper.width(settings.items * item.width);
$("ul",frame).width((settings.items + item.length) * item.width);
setPages();
$("ul",frame).css("left",0);
scroll.width = (settings.rolling=="item") ? item.width : page.width;
if (settings.flow) cloneFlow();
if (settings.autoscroll) rollingTimeIntervalID = setInterval(rolling, settings.delay);
}
function cloneFlow(){
for (var i=0;i");
}
$(".pages li",wrapper).eq(0).addClass("active");
naviEvent();
}
function activePage(page){
$(".pages li",wrapper).removeClass("active");
$(".pages li",wrapper).eq(page-1).addClass("active");
}
function rolling(){
if (scroll.stop) return;
scroll.pos = parseInt($("ul",frame).css("left"));
scroll.pos -= scroll.width;
if (!settings.flow && scroll.pos<-page.width*(page.total-1)) scroll.pos = 0;
var p = Math.floor(scroll.pos / -page.width) + 1;
if (p==page.now){
$("ul",frame).animate({"left": scroll.pos + "px"},{duration: settings.duration, easing: "easeOutExpo", complete:function(){
if (settings.flow && parseInt($(this).css("left"))<-page.width*(page.total-1)){
page.now = 1; activePage(1);
$(this).css("left",0);
}
}});
} else self.goPage(p);
}
function naviEvent(){
var ev = (settings.autoscroll) ? "click" : "mouseover";
$(".pages li",wrapper).bind(ev,function(){
var idx = $(this).index();
self.goPage(idx+1,1);
});
$("li",frame).mouseover(function(){
self.scroll.stop = 1;
});
$("li",frame).mouseout(function(){
self.scroll.stop = 0;
});
}
this.next = function(){
this.goPage(page.now+1,1);
}
this.prev = function(){
if (page.now==1) page.now = page.total + 1;
this.goPage(page.now-1,1);
}
this.goPage = function(p,c){
if (settings.autoscroll && c){
clearInterval(rollingTimeIntervalID);
rollingTimeIntervalID = setInterval(rolling, settings.delay);
}
page.now = p;
scroll.pos = -page.width * (p-1);
activePage(p);
$("ul",frame).animate({"left": scroll.pos + "px"},{duration: settings.duration, easing: "easeOutExpo", complete:function(){
if (settings.flow && parseInt($(this).css("left"))<-page.width*(page.total-1)){
page.now = 1; activePage(1);
$(this).css("left",0);
}
}});
}
}
$.fn.rolling = function(w,h,params){
return new Rolling(this,w,h,params);
};
})(jQuery);