; (function (root, struct, undefined) { "use strict"; var version = '2.3.2'; var lasttime = 0, nextframe = root.requestanimationframe || root.webkitrequestanimationframe || root.mozrequestanimationframe || root.msrequestanimationframe || function (callback) { var currtime = +new date, delay = math.max(1000 / 60, 1000 / 60 - (currtime - lasttime)); lasttime = currtime + delay; return settimeout(callback, delay); }, cancelframe = root.cancelanimationframe || root.webkitcancelanimationframe || root.webkitcancelrequestanimationframe || root.mozcancelrequestanimationframe || root.mscancelrequestanimationframe || cleartimeout, doc = root.document, divstyle = doc.createelement('div').style, cssvendor = function () { var tests = "-webkit- -moz- -o- -ms-".split(" "), prop; while (prop = tests.shift()) { if (camelcase(prop + 'transform') in divstyle) { return prop; } } return ''; }(), opacity = csstest('opacity'), transform = csstest('transform'), perspective = csstest('perspective'), transformstyle = csstest('transform-style'), transformorigin = csstest('transform-origin'), backfacevisibility = csstest('backface-visibility'), preserve3d = transformstyle && function () { divstyle[transformstyle] = 'preserve-3d'; return divstyle[transformstyle] == 'preserve-3d'; }(), tostring = object.prototype.tostring, slice = [].slice, class2type = {}, event2type = {}, event2code = { click: 4, mousewheel: 5, dommousescroll: 5, keydown: 6 }, pointertypes = { 2: 'touch', 3: 'pen', 4: 'mouse', pen: 'pen' }, startevent = [], moveevent = [], event = function () { var ret = {}, states = { start: 1, down: 1, move: 2, end: 3, up: 3, cancel: 3 }; each("mouse touch pointer mspointer-".split(" "), function (prefix) { var _prefix = /pointer/i.test(prefix) ? 'pointer' : prefix; ret[_prefix] = ret[_prefix] || {}; pointertypes[_prefix] = _prefix; each(states, function (endfix, code) { var ev = camelcase(prefix + endfix); ret[_prefix][ev] = code; event2type[ev.tolowercase()] = _prefix; event2code[ev.tolowercase()] = code; if (code == 1) { startevent.push(ev); } else { moveevent.push(ev); } }); }); return ret; }(), pointers = { touch: {}, pointer: {}, mouse: {} }, ease = { linear: function (t, b, c, d) { return c * t / d + b; }, ease: function (t, b, c, d) { return -c * ((t = t / d - 1) * t * t * t - 1) + b; }, 'ease-in': function (t, b, c, d) { return c * (t /= d) * t * t + b; }, 'ease-out': function (t, b, c, d) { return c * ((t = t / d - 1) * t * t + 1) + b; }, 'ease-in-out': function (t, b, c, d) { if ((t /= d / 2) < 1) return c / 2 * t * t * t + b; return c / 2 * ((t -= 2) * t * t + 2) + b; }, bounce: function (t, b, c, d) { if ((t /= d) < (1 / 2.75)) { return c * (7.5625 * t * t) + b; } else if (t < (2 / 2.75)) { return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b; } else if (t < (2.5 / 2.75)) { return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b; } else { return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b; } } }, transition = { fade: function (cpage, cp, tpage, tp) { if (opacity) { cpage.style.opacity = 1 - math.abs(cp); if (tpage) { tpage.style.opacity = math.abs(cp); } } else { cpage.style.filter = 'alpha(opacity=' + (1 - math.abs(cp)) * 100 + ')'; if (tpage) { tpage.style.filter = 'alpha(opacity=' + math.abs(cp) * 100 + ')'; } } } }; each("boolean number string function array date regexp object error".split(" "), function (name) { class2type["[object " + name + "]"] = name.tolowercase(); }); each("x y ".split(" "), function (name) { var xy = { x: 'left', y: 'top' }, fire3d = perspective ? ' translatez(0)' : ''; transition['scroll' + name] = function (cpage, cp, tpage, tp) { var prop = name || ['x', 'y'][this.direction]; transform ? cpage.style[transform] = 'translate' + prop + '(' + cp * 100 + '%)' + fire3d : cpage.style[xy[prop]] = cp * 100 + '%'; if (tpage) { transform ? tpage.style[transform] = 'translate' + prop + '(' + tp * 100 + '%)' + fire3d : tpage.style[xy[prop]] = tp * 100 + '%'; } } transition['scroll3d' + name] = function (cpage, cp, tpage, tp) { var prop = name || ['x', 'y'][this.direction], fix = cp < 0 ? -1 : 1, abscp = math.abs(cp), deg; if (perspective) { if (abscp < .05) { deg = abscp * 1200; cp = 0; tp = fix * -1; } else if (abscp < .95) { deg = 60; cp = (cp - .05 * fix) / .9; tp = (tp + .05 * fix) / .9; } else { deg = (1 - abscp) * 1200; cp = fix; tp = 0; } cpage.parentnode.style[transform] = 'perspective(1000px) rotatex(' + deg + 'deg)'; cpage.style[transform] = 'translate' + prop + '(' + cp * 100 + '%)'; if (tpage) { tpage.style[transform] = 'translate' + prop + '(' + tp * 100 + '%)'; } } else transition['scroll' + name].apply(this, arguments); } transition['slide' + name] = function (cpage, cp, tpage, tp) { transition['slidecoverreverse' + name].apply(this, arguments); } transition['flow' + name] = function (cpage, cp, tpage, tp) { transition['flowcoverin' + name].apply(this, arguments); } transition['slice' + name] = function () { var createwrap = function (node, container) { var wrap = doc.createelement('div'); wrap.style.csstext = 'position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;'; wrap.appendchild(node); container.appendchild(wrap); }, fixblock = function (cpage, tpage, pages, container) { each(pages, function (page) { if (page.parentnode == container) return; if (cpage != page && tpage != page) { page.parentnode.style.display = 'none'; } else { page.parentnode.style.display = 'block'; } }); }; return function (cpage, cp, tpage, tp) { var prop = name || ['x', 'y'][this.direction], len = prop == 'x' ? 'width' : 'height', total = this.container[camelcase('client-' + len)], m = math.abs(cp) * 100, n = math.abs(tp) * 100, end = cp == 0 || tp == 0; cpage.style[len] = end ? '100%' : total + 'px'; if (cpage.parentnode == this.container) { createwrap(cpage, this.container); } cpage.parentnode.style.zindex = cp > 0 ? 0 : 1; cpage.parentnode.style[len] = (math.min(cp, 0) + 1) * 100 + '%'; if (tpage) { tpage.style[len] = end ? '100%' : total + 'px'; if (tpage.parentnode == this.container) { createwrap(tpage, this.container); } tpage.parentnode.style.zindex = cp > 0 ? 1 : 0; tpage.parentnode.style[len] = (math.min(tp, 0) + 1) * 100 + '%'; } fixblock(cpage, tpage, this.pages, this.container); } }(); transition['flip' + name] = function (cpage, cp, tpage, tp) { var prop = name || ['x', 'y'][1 - this.direction], fix = prop == 'x' ? -1 : 1; if (perspective) { cpage.style[backfacevisibility] = 'hidden'; cpage.style[transform] = 'perspective(1000px) rotate' + prop + '(' + cp * 180 * fix + 'deg)' + fire3d; if (tpage) { tpage.style[backfacevisibility] = 'hidden'; tpage.style[transform] = 'perspective(1000px) rotate' + prop + '(' + tp * 180 * fix + 'deg)' + fire3d; } } else transition['scroll' + name].apply(this, arguments); } transition['flip3d' + name] = function () { var inited; return function (cpage, cp, tpage, tp) { var prop = name || ['x', 'y'][1 - this.direction], fe = prop == 'x' ? -1 : 1, fix = fe * (cp < 0 ? 1 : -1), zh = cpage['offset' + (prop == 'x' ? 'height' : 'width')] / 2; if (preserve3d) { if (!inited) { inited = true; cpage.parentnode.parentnode.style[perspective] = '1000px'; cpage.parentnode.style[transformstyle] = 'preserve-3d'; } cpage.parentnode.style[transform] = 'translatez(-' + zh + 'px) rotate' + prop + '(' + cp * 90 * fe + 'deg)'; cpage.style[transform] = 'rotate' + prop + '(0) translatez(' + zh + 'px)'; if (tpage) { tpage.style[transform] = 'rotate' + prop + '(' + (fix * 90) + 'deg) translatez(' + zh + 'px)'; } } else transition['scroll' + name].apply(this, arguments); } }(); transition['flipclock' + name] = function () { var createwrap = function (node, container, prop, off) { var wrap = node.parentnode, len = prop == 'x' ? 'height' : 'width', pos = prop == 'x' ? 'top' : 'left', origin = ['50%', (off ? 0 : 100) + '%'][prop == 'x' ? 'slice' : 'reverse']().join(' '); if (!wrap || wrap == container) { wrap = doc.createelement('div'); wrap.style.csstext = 'position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;display:none;'; wrap.style[transformorigin] = origin; wrap.style[backfacevisibility] = 'hidden'; wrap.appendchild(node); container.appendchild(wrap); } wrap.style[len] = '50%'; wrap.style[pos] = off * 100 + '%'; node.style[len] = '200%'; node.style[pos] = -off * 200 + '%'; return wrap; }, fixblock = function (cpage, tpage, pages, container) { each(pages, function (page) { if (page.parentnode == container) return; if (cpage != page && tpage != page) { page.parentnode.style.display = page._clone.parentnode.style.display = 'none'; } else { page.parentnode.style.display = page._clone.parentnode.style.display = 'block'; } }); }; return function (cpage, cp, tpage, tp) { var prop = name || ['x', 'y'][1 - this.direction], isself = this.pages[this.current] == cpage, zindex = number(math.abs(cp) < .5), fix = prop == 'x' ? 1 : -1, m, n; if (perspective) { createwrap(cpage, this.container, prop, 0); createwrap(cpage._clone || (cpage._clone = cpage.clonenode(true)), this.container, prop, .5); m = n = -cp * 180 * fix; cp > 0 ? n = 0 : m = 0; cpage.parentnode.style.zindex = cpage._clone.parentnode.style.zindex = zindex; cpage.parentnode.style[transform] = 'perspective(1000px) rotate' + prop + '(' + m + 'deg)'; cpage._clone.parentnode.style[transform] = 'perspective(1000px) rotate' + prop + '(' + n + 'deg)'; if (tpage) { createwrap(tpage, this.container, prop, 0); createwrap(tpage._clone || (tpage._clone = tpage.clonenode(true)), this.container, prop, .5); m = n = -tp * 180 * fix; cp > 0 ? m = 0 : n = 0; tpage.parentnode.style.zindex = tpage._clone.parentnode.style.zindex = 1 - zindex; tpage.parentnode.style[transform] = 'perspective(1000px) rotate' + prop + '(' + m + 'deg)'; tpage._clone.parentnode.style[transform] = 'perspective(1000px) rotate' + prop + '(' + n + 'deg)'; } fixblock(cpage, tpage, this.pages, this.container); if (0 == cp || tp == 0) { cpage = this.pages[this.current]; cpage.style.height = cpage.style.width = cpage.parentnode.style.height = cpage.parentnode.style.width = '100%'; cpage.style.top = cpage.style.left = cpage.parentnode.style.top = cpage.parentnode.style.left = 0; cpage.parentnode.style.zindex = 2; } } else transition['scroll' + name].apply(this, arguments); } }(); transition['flippaper' + name] = function () { var backdiv; return function (cpage, cp, tpage, tp) { var prop = name || ['x', 'y'][this.direction], len = prop == 'x' ? 'width' : 'height', m = math.abs(cp) * 100; if (!backdiv) { backdiv = doc.createelement('div'); backdiv.style.csstext = 'position:absolute;z-index:2;top:0;left:0;height:0;width:0;background:no-repeat #fff;'; try { backdiv.style.backgroundimage = cssvendor + 'linear-gradient(' + (prop == 'x' ? 'right' : 'bottom') + ', #aaa 0,#fff 20px)'; } catch (e) { } this.container.appendchild(backdiv); } transition['slice' + name].apply(this, arguments); backdiv.style.display = cp == 0 || tp == 0 ? 'none' : 'block'; backdiv.style.width = backdiv.style.height = '100%'; backdiv.style[len] = (cp < 0 ? m : 100 - m) + '%'; backdiv.style[xy[prop]] = (cp < 0 ? 100 - 2 * m : 2 * m - 100) + '%'; } }(); transition['zoom' + name] = function (cpage, cp, tpage, tp) { var zindex = number(math.abs(cp) < .5); if (transform) { cpage.style[transform] = 'scale' + name + '(' + math.abs(1 - math.abs(cp) * 2) + ')' + fire3d; cpage.style.zindex = zindex; if (tpage) { tpage.style[transform] = 'scale' + name + '(' + math.abs(1 - math.abs(cp) * 2) + ')' + fire3d; tpage.style.zindex = 1 - zindex; } } else transition['scroll' + name].apply(this, arguments); } transition['bomb' + name] = function (cpage, cp, tpage, tp) { var zindex = number(math.abs(cp) < .5), val = math.abs(1 - math.abs(cp) * 2); if (transform) { cpage.style[transform] = 'scale' + name + '(' + (2 - val) + ')' + fire3d; cpage.style.opacity = zindex ? val : 0; cpage.style.zindex = zindex; if (tpage) { tpage.style[transform] = 'scale' + name + '(' + (2 - val) + ')' + fire3d; tpage.style.opacity = zindex ? 0 : val; tpage.style.zindex = 1 - zindex; } } else transition['scroll' + name].apply(this, arguments); } transition['skew' + name] = function (cpage, cp, tpage, tp) { var zindex = number(math.abs(cp) < .5); if (transform) { cpage.style[transform] = 'skew' + name + '(' + cp * 180 + 'deg)' + fire3d; cpage.style.zindex = zindex; if (tpage) { tpage.style[transform] = 'skew' + name + '(' + tp * 180 + 'deg)' + fire3d; tpage.style.zindex = 1 - zindex; } } else transition['scroll' + name].apply(this, arguments); } each(" reverse in out".split(" "), function (type) { transition['scrollcover' + type + name] = function (cpage, cp, tpage, tp) { var prop = name || ['x', 'y'][this.direction], zindex = number(type == 'in' || !type && cp < 0 || type == 'reverse' && cp > 0), cr = 100, tr = 100; zindex ? cr = 20 : tr = 20; transform ? cpage.style[transform] = 'translate' + prop + '(' + cp * cr + '%)' + fire3d : cpage.style[xy[prop]] = cp * cr + '%'; cpage.style.zindex = 1 - zindex; if (tpage) { transform ? tpage.style[transform] = 'translate' + prop + '(' + tp * tr + '%)' + fire3d : tpage.style[xy[prop]] = tp * tr + '%'; tpage.style.zindex = zindex; } } transition['slidecover' + type + name] = function (cpage, cp, tpage, tp) { var prop = name || ['x', 'y'][this.direction], zindex = number(type == 'in' || !type && cp < 0 || type == 'reverse' && cp > 0); if (transform) { cpage.style[transform] = 'translate' + prop + '(' + cp * (100 - zindex * 100) + '%) scale(' + ((1 - math.abs(zindex && cp)) * .2 + .8) + ')' + fire3d; cpage.style.zindex = 1 - zindex; if (tpage) { tpage.style[transform] = 'translate' + prop + '(' + tp * zindex * 100 + '%) scale(' + ((1 - math.abs(zindex ? 0 : tp)) * .2 + .8) + ')' + fire3d; tpage.style.zindex = zindex; } } else transition['scrollcover' + type + name].apply(this, arguments); } transition['flowcover' + type + name] = function (cpage, cp, tpage, tp) { var prop = name || ['x', 'y'][this.direction], zindex = number(type == 'in' || !type && cp < 0 || type == 'reverse' && cp > 0); if (transform) { cpage.style[transform] = 'translate' + prop + '(' + cp * (100 - zindex * 50) + '%) scale(' + ((1 - math.abs(cp)) * .5 + .5) + ')' + fire3d; cpage.style.zindex = 1 - zindex; if (tpage) { tpage.style[transform] = 'translate' + prop + '(' + tp * (50 + zindex * 50) + '%) scale(' + ((1 - math.abs(tp)) * .5 + .5) + ')' + fire3d; tpage.style.zindex = zindex; } } else transition['scrollcover' + type + name].apply(this, arguments); } transition['flipcover' + type + name] = function (cpage, cp, tpage, tp) { var prop = name || ['x', 'y'][1 - this.direction], zindex = number(type == 'in' || !type && cp < 0 || type == 'reverse' && cp > 0); if (perspective) { zindex ? cp = 0 : tp = 0; cpage.style[transform] = 'perspective(1000px) rotate' + prop + '(' + cp * -90 + 'deg)' + fire3d; cpage.style.zindex = 1 - zindex; if (tpage) { tpage.style[transform] = 'perspective(1000px) rotate' + prop + '(' + tp * -90 + 'deg)' + fire3d; tpage.style.zindex = zindex; } } else transition['scroll' + name].apply(this, arguments); } transition['skewcover' + type + name] = function (cpage, cp, tpage, tp) { var zindex = number(type == 'in' || !type && cp < 0 || type == 'reverse' && cp > 0); if (transform) { zindex ? cp = 0 : tp = 0; cpage.style[transform] = 'skew' + name + '(' + cp * 90 + 'deg)' + fire3d; cpage.style.zindex = 1 - zindex; if (tpage) { tpage.style[transform] = 'skew' + name + '(' + tp * 90 + 'deg)' + fire3d; tpage.style.zindex = zindex; } } else transition['scroll' + name].apply(this, arguments); } transition['zoomcover' + type + name] = function (cpage, cp, tpage, tp) { var zindex = number(type == 'in' || !type && cp < 0 || type == 'reverse' && cp > 0); if (transform) { zindex ? cp = 0 : tp = 0; cpage.style[transform] = 'scale' + name + '(' + (1 - math.abs(cp)) + ')' + fire3d; cpage.style.zindex = 1 - zindex; if (tpage) { tpage.style[transform] = 'scale' + name + '(' + (1 - math.abs(tp)) + ')' + fire3d; tpage.style.zindex = zindex; } } else transition['scroll' + name].apply(this, arguments); } transition['bombcover' + type + name] = function (cpage, cp, tpage, tp) { var zindex = number(type == 'in' || !type && cp < 0 || type == 'reverse' && cp > 0); if (transform) { zindex ? cp = 0 : tp = 0; cpage.style[transform] = 'scale' + name + '(' + (1 + math.abs(cp)) + ')' + fire3d; cpage.style.zindex = 1 - zindex; if (tpage) { tpage.style[transform] = 'scale' + name + '(' + (1 + math.abs(tp)) + ')' + fire3d; tpage.style.zindex = zindex; } transition.fade.apply(this, arguments); } else transition['scroll' + name].apply(this, arguments); } }); }); function type(obj) { if (obj == null) { return obj + ""; } return typeof obj == 'object' || typeof obj == 'function' ? class2type[tostring.call(obj)] || "object" : typeof obj; } function isarraylike(elem) { var tp = type(elem); return !!elem && tp != 'function' && tp != 'string' && (elem.length === 0 || elem.length && (elem.nodetype == 1 || (elem.length - 1) in elem)); } function camelcase(str) { return (str + '').replace(/^-ms-/, 'ms-').replace(/-([a-z]|[0-9])/ig, function (all, letter) { return (letter + '').touppercase(); }); } function csstest(name) { var prop = camelcase(name), _prop = camelcase(cssvendor + prop); return (prop in divstyle) && prop || (_prop in divstyle) && _prop || ''; } function isfunction(func) { return type(func) == 'function'; } function pointerlength(obj) { var len = 0, key; if (type(obj.length) == 'number') { len = obj.length; } else if ('keys' in object) { len = object.keys(obj).length; } else { for (key in obj) { if (obj.hasownproperty(key)) { len++; } } } return len; } function pointeritem(obj, n) { return 'item' in obj ? obj.item(n) : function () { var i = 0, key; for (key in this) { if (i++ == n) { return this[key]; } } }.call(obj, n); } function each(arr, iterate) { if (isarraylike(arr)) { if (type(arr.foreach) == 'function') { return arr.foreach(iterate); } var i = 0, len = arr.length, item; for (; i < len; i++) { item = arr[i]; if (type(item) != 'undefined') { iterate(item, i, arr); } } } else { var key; for (key in arr) { iterate(key, arr[key], arr); } } } function children(elem) { var ret = []; each(elem.children || elem.childnodes, function (elem) { if (elem.nodetype == 1) { ret.push(elem); } }); return ret; } function getstyle(elem, prop) { var style = root.getcomputedstyle && root.getcomputedstyle(elem, null) || elem.currentstyle || elem.style; return style[prop]; } function addlistener(elem, evstr, handler) { if (type(evstr) == 'object') { return each(evstr, function (evstr, handler) { addlistener(elem, evstr, handler); }); } each(evstr.split(" "), function (ev) { if (elem.addeventlistener) { elem.addeventlistener(ev, handler, false); } else if (elem.attachevent) { elem.attachevent('on' + ev, handler); } else elem['on' + ev] = handler; }); } function offlistener(elem, evstr, handler) { if (type(evstr) == 'object') { return each(evstr, function (evstr, handler) { offlistener(elem, evstr, handler); }); } each(evstr.split(" "), function (ev) { if (elem.removeeventlistener) { elem.removeeventlistener(ev, handler, false); } else if (elem.detachevent) { elem.detachevent('on' + ev, handler); } else elem['on' + ev] = null; }); } function removerange() { var range; if (root.getselection) { range = getselection(); if ('empty' in range) range.empty(); else if ('removeallranges' in range) range.removeallranges(); } else { doc.selection.empty(); } } function filterevent(oldevent) { var ev = {}, which = oldevent.which, button = oldevent.button, pointers, pointer; each("wheeldelta detail which keycode".split(" "), function (prop) { ev[prop] = oldevent[prop]; }); ev.oldevent = oldevent; ev.type = oldevent.type.tolowercase(); ev.eventtype = event2type[ev.type] || ev.type; ev.eventcode = event2code[ev.type] || 0; ev.pointertype = pointertypes[oldevent.pointertype] || oldevent.pointertype || ev.eventtype; ev.target = oldevent.target || oldevent.srcelement || doc.documentelement; if (ev.target.nodetype === 3) { ev.target = ev.target.parentnode; } ev.preventdefault = function () { oldevent.preventdefault && oldevent.preventdefault(); ev.returnvalue = oldevent.returnvalue = false; } if (pointers = pointers[ev.eventtype]) { switch (ev.eventtype) { case 'mouse': case 'pointer': var id = oldevent.pointerid || 0; ev.eventcode == 3 ? delete pointers[id] : pointers[id] = oldevent; break; case 'touch': pointers[ev.eventtype] = pointers = oldevent.touches; break; } if (pointer = pointeritem(pointers, 0)) { ev.clientx = pointer.clientx; ev.clienty = pointer.clienty; } ev.button = which < 4 ? math.max(0, which - 1) : button & 4 && 1 || button & 2; ev.length = pointerlength(pointers); } return ev; } struct.prototype = { version: version, constructor: struct, latesttime: 0, init: function (config) { var self = this, handler = this.handler = function (ev) { !self.frozen && self.handleevent(ev); } this.events = {}; this.duration = isnan(parseint(config.duration)) ? 600 : parseint(config.duration); this.direction = parseint(config.direction) == 0 ? 0 : 1; this.current = parseint(config.start) || 0; this.loop = !!config.loop; this.mouse = config.mouse == null ? true : !!config.mouse; this.mousewheel = !!config.mousewheel; this.interval = parseint(config.interval) || 5000; this.playing = !!config.autoplay; this.arrowkey = !!config.arrowkey; this.frozen = !!config.freeze; this.pages = children(this.container); this.length = this.pages.length; this.pagedata = []; addlistener(this.container, startevent.join(" ") + " click" + (this.mousewheel ? " mousewheel dommousescroll" : ""), handler); addlistener(doc, moveevent.join(" ") + (this.arrowkey ? " keydown" : ""), handler); each(this.pages, function (page) { self.pagedata.push({ percent: 0, csstext: page.style.csstext || '' }); self.initstyle(page); }); this.pages[this.current].style.display = 'block'; this.on({ before: function () { cleartimeout(this.playtimer); }, dragstart: function () { cleartimeout(this.playtimer); removerange(); }, after: this.fireplay, update: null }).fireplay(); this.comment = document.createcomment(' powered by pageswitch v' + this.version + ' https://github.com/qiqiboy/pageswitch '); this.container.appendchild(this.comment); this.setease(config.ease); this.settransition(config.transition); }, initstyle: function (elem) { var style = elem.style, ret; each("position:absolute;top:0;left:0;width:100%;height:100%;display:none".split(";"), function (css) { ret = css.split(":"); style[ret[0]] = ret[1]; }); return elem; }, setease: function (ease) { this.ease = isfunction(ease) ? ease : ease[ease] || ease.ease; return this; }, addease: function (name, func) { isfunction(func) && (ease[name] = func); return this; }, settransition: function (transition) { this.events.update.splice(0, 1, isfunction(transition) ? transition : transition[transition] || transition.slide); return this; }, addtransition: function (name, func) { isfunction(func) && (transition[name] = func); return this; }, isstatic: function () { return !this.timer && !this.drag; }, on: function (ev, callback) { var self = this; if (type(ev) == 'object') { each(ev, function (ev, callback) { self.on(ev, callback); }); } else { if (!this.events[ev]) { this.events[ev] = []; } this.events[ev].push(callback); } return this; }, fire: function (ev) { var self = this, args = slice.call(arguments, 1); each(this.events[ev] || [], function (func) { if (isfunction(func)) { func.apply(self, args); } }); return this; }, freeze: function (able) { this.frozen = able == null ? true : !!able; return this; }, slide: function (index) { var self = this, dir = this.direction, duration = this.duration, stime = +new date, ease = this.ease, current = this.current, fixindex = math.min(this.length - 1, math.max(0, this.fixindex(index))), cpage = this.pages[current], percent = this.getpercent(), tindex = this.fixindex(fixindex == current ? current + (percent > 0 ? -1 : 1) : fixindex), tpage = this.pages[tindex], target = index > current ? -1 : 1, _tpage = cpage; cancelframe(this.timer); if (fixindex == current) { target = 0; _tpage = tpage; } else if (tpage.style.display == 'none') { percent = 0; } this.fixblock(current, tindex); this.fire('before', current, fixindex); this.current = fixindex; duration *= math.abs(target - percent); this.latesttime = stime + duration; ani(); function ani() { var offset = math.min(duration, +new date - stime), s = duration ? ease(offset, 0, 1, duration) : 1, cp = (target - percent) * s + percent; self.fixupdate(cp, current, tindex); if (offset == duration) { if (_tpage) { _tpage.style.display = 'none'; } delete self.timer; self.fire('after', fixindex, current); } else { self.timer = nextframe(ani); } } return this; }, prev: function () { return this.slide(this.current - 1); }, next: function () { return this.slide(this.current + 1); }, play: function () { this.playing = true; return this.fireplay(); }, fireplay: function () { var self = this; if (this.playing) { this.playtimer = settimeout(function () { self.slide((self.current + 1) % (self.loop ? infinity : self.length)); }, this.interval); } return this; }, pause: function () { this.playing = false; cleartimeout(this.playtimer); return this; }, fixindex: function (index) { return this.length > 1 && this.loop ? (this.length + index) % this.length : index; }, fixblock: function (cindex, tindex) { each(this.pages, function (page, index) { if (cindex != index && tindex != index) { page.style.display = 'none'; } else { page.style.display = 'block'; } }); return this; }, fixupdate: function (cper, cindex, tindex) { var pagedata = this.pagedata, cpage = this.pages[cindex], tpage = this.pages[tindex], tper; pagedata[cindex].percent = cper; if (tpage) { tper = pagedata[tindex].percent = cper > 0 ? cper - 1 : 1 + cper; } return this.fire('update', cpage, cper, tpage, tper); }, getpercent: function (index) { var pdata = this.pagedata[index == null ? this.current : index]; return pdata && (pdata.percent || 0); }, getoffsetparent: function () { var position = getstyle(this.container, 'position'); if (position && position != 'static') { return this.container; } return this.container.offsetparent || doc.body; }, handleevent: function (oldevent) { var ev = filterevent(oldevent), candrag = ev.button < 1 && ev.length < 2 && (!this.pointertype || this.pointertype == ev.eventtype) && (this.mouse || ev.pointertype != 'mouse'); switch (ev.eventcode) { case 2: if (candrag && this.rect) { var cindex = this.current, dir = this.direction, rect = [ev.clientx, ev.clienty], _rect = this.rect, offset = rect[dir] - _rect[dir], cpage = this.pages[cindex], total = this.offsetparent[dir ? 'clientheight' : 'clientwidth'], tindex, percent; if (this.drag == null && _rect.tostring() != rect.tostring()) { this.drag = math.abs(offset) >= math.abs(rect[1 - dir] - _rect[1 - dir]); this.drag && this.fire('dragstart', ev); } if (this.drag) { percent = this.percent + (total && offset / total); if (!this.pages[tindex = this.fixindex(cindex + (percent > 0 ? -1 : 1))]) { percent /= math.abs(offset) / total + 2; } this.fixblock(cindex, tindex); this.fire('dragmove', ev); this.fixupdate(percent, cindex, tindex); this._offset = offset; ev.preventdefault(); } } break; case 1: case 3: if (candrag) { var self = this, index = this.current, percent = this.getpercent(), isdrag, offset, tm, nn; if (ev.length && (ev.eventcode == 1 || this.drag)) { nn = ev.target.nodename.tolowercase(); cleartimeout(this.eventtimer); if (!this.pointertype) { this.pointertype = ev.eventtype; } if (this.timer) { cancelframe(this.timer); delete this.timer; } this.rect = [ev.clientx, ev.clienty]; this.percent = percent; this.time = +new date; this.offsetparent = this.getoffsetparent(); if (ev.eventtype != 'touch' && (nn == 'a' || nn == 'img')) { ev.preventdefault(); } } else if (tm = this.time) { offset = this._offset; isdrag = this.drag; each("rect drag time percent _offset offsetparent".split(" "), function (prop) { delete self[prop]; }); if (isdrag) { if (+new date - tm < 500 && math.abs(offset) > 20 || math.abs(percent) > .5) { index += offset > 0 ? -1 : 1; } this.fire('dragend', ev); ev.preventdefault(); } if (percent) { this.slide(index); } else if (isdrag) { this.fireplay(); } this.eventtimer = settimeout(function () { delete self.pointertype; }, 400); } } break; case 4: if (this.timer) { ev.preventdefault(); } break; case 5: ev.preventdefault(); if (this.isstatic() && +new date - this.latesttime > math.max(1000 - this.duration, 0)) { var wd = ev.wheeldelta || -ev.detail; math.abs(wd) >= 3 && this[wd > 0 ? 'prev' : 'next'](); } break; case 6: var nn = ev.target.nodename.tolowercase(); if (this.isstatic() && nn != 'input' && nn != 'textarea' && nn != 'select') { switch (ev.keycode || ev.which) { case 33: case 37: case 38: this.prev(); break; case 32: case 34: case 39: case 40: this.next(); break; case 35: this.slide(this.length - 1); break; case 36: this.slide(0); break; } } break; } }, destroy: function () { var pagedata = this.pagedata; offlistener(this.container, startevent.join(" ") + " click" + (this.mousewheel ? " mousewheel dommousescroll" : ""), this.handler); offlistener(doc, moveevent.join(" ") + (this.arrowkey ? " keydown" : ""), this.handler); each(this.pages, function (page, index) { page.style.csstext = pagedata[index].csstext; }); this.container.removechild(this.comment); this.length = 0; return this.pause(); }, append: function (elem, index) { if (null == index) { index = this.pages.length; } this.pagedata.splice(index, 0, { percent: 0, csstext: elem.style.csstext }); this.pages.splice(index, 0, elem); this.container.appendchild(this.initstyle(elem)); this.length = this.pages.length; if (index <= this.current) { this.current++; } return this; }, prepend: function (elem) { return this.append(elem, 0); }, insertbefore: function (elem, index) { return this.append(elem, index - 1); }, insertafter: function (elem, index) { return this.append(elem, index + 1); }, remove: function (index) { this.container.removechild(this.pages[index]); this.pages.splice(index, 1); this.pagedata.splice(index, 1); this.length = this.pages.length; if (index <= this.current) { this.slide(this.current = math.max(0, this.current - 1)); } return this; } } each("ease transition".split(" "), function (name) { struct['add' + name] = struct.prototype['add' + name]; }); if (typeof define == 'function' && define.amd) { define('pageswitch', function () { return struct; }); } else root.pageswitch = struct; })(window, function (wrap, config) { if (!(this instanceof arguments.callee)) { return new arguments.callee(wrap, config); } this.container = typeof wrap == 'string' ? document.getelementbyid(wrap) : wrap; this.init(config || {}); });