日期:2014-05-16 浏览次数:20556 次
/**
* i use closure to simulate private method in OOP,because i don't wanna disturb the others js libraris you may use like jQuery,which uses $
* remember the only variable i inject to window is Slider
*
* (c)logan liu
* Email:hellouniverse@qq.com
* if you find bugs,Don't hesitate contacting me.
*/
(function(window){
function Slider(contentID, handlerID, pageNum, onePageWidth, direction, step, speed){
if ((!contentID) || (!handlerID) || (!pageNum) || (!onePageWidth)) {
alert("init error,see your paraments");
}
this.contentID = contentID;
this.handlerID = handlerID;
this.pageNum = pageNum;
this.onePageWidth = onePageWidth;
this.step = step || 10;
this.direction = direction;
this.speed = speed || 1;
}
var $ = function(id){
return document.getElementById(id);
}
var style = function(sid, key, value){
if (value)
$(sid).style[key] = value;
else
return $(sid).style[key];
};
/**
*
* @param {Object} id
* @param {Object} i
* 0-100
*/
var fade = function(id, i){
style(id, "filter", "alpha(opacity=" + i + ")");
i = i / 100;
style(id, "-moz-opacity", i);
style(id, "-khtml-opacity", i);
style(id, "opacity", i);
};
var log = function(){
if (!window.console)
return;
// console.log(arguments.callee.caller.toString());
for (var i in arguments) {
console.log(i + ":" + arguments[i]);
}
}
var addEvent = function(elm, evType, fn, useCapture){
if (elm.addEventListener) {
elm.addEventListener(evType, fn, useCapture);
}
else
if (elm.attachEvent) {
elm.attachEvent('on' + evType, fn);
}
else {
elm['on' + evType] = fn;
}
};
var dump = function(o){
for (var i in o) {
log(i + ":" + o[i]);
}
};
Slider.prototype = {
changeEvent: "onclick",
leftAndRightArrow: false,
pageHandler: true,
currentPage: 0,
transformEffect: "",
intervalId: 0,
duration: 6000,
/**
* anything can case to false stands for horizontal.and the others are vertical.
*/
direction: 0,
/**
* rend page navigator like 1,2...,so you can override it with you method such as page1,page2..or just empty.
* @param {Object} i
*/
rendPageNav: function(i){
return i == -1 || i == this.pageNum ? "" : (i + 1);
},
/**
* set navigator's class when clicked.add "current" to this.currentPage
* @param {Object} i
*/
rendNav: function(j){
var c = $(this.handlerID).children;
j = this.leftAndRightArrow ? (j + 1) : j;
for (var i = (this.leftAndRightArrow ? 1 : 0), l = (this.leftAndRightArrow ? c.length - 1 : c.length); i < l; i++) {
c[i].className = (i == j ? "current" : "");
}
},
initHandler: function(){
var tempThis = this;
for (var i = (this.leftAndRightArrow ? -1 : 0), len = (this.leftAndRightArrow ? this.pageNum + 1 : this.pageNum); i < len; i++) {
if ((!tempThis.pageHandler) && i != -1 && i != tempThis.pageNum)
continue;
var a = document.createElement("a");
a.href = "#nogo";
a.className = (i == -1 ? "left" : (i == 0 ? "current" : (i == this.pageNum ? "right"