123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489 |
- (function(E) {
- E.fn.drag = function(L, K, J) {
- if (K) {
- this.bind("dragstart", L)
- }
- if (J) {
- this.bind("dragend", J)
- }
- return !L ? this.trigger("drag") : this.bind("drag", K ? K : L)
- }
- ;
- var A = E.event
- , B = A.special
- , F = B.drag = {
- not: ":input",
- distance: 0,
- which: 1,
- dragging: false,
- setup: function(J) {
- J = E.extend({
- distance: F.distance,
- which: F.which,
- not: F.not
- }, J || {});
- J.distance = I(J.distance);
- A.add(this, "mousedown", H, J);
- if (this.attachEvent) {
- this.attachEvent("ondragstart", D)
- }
- },
- teardown: function() {
- A.remove(this, "mousedown", H);
- if (this === F.dragging) {
- F.dragging = F.proxy = false
- }
- G(this, true);
- if (this.detachEvent) {
- this.detachEvent("ondragstart", D)
- }
- }
- };
- B.dragstart = B.dragend = {
- setup: function() {},
- teardown: function() {}
- };
- function H(L) {
- var K = this, J, M = L.data || {};
- if (M.elem) {
- K = L.dragTarget = M.elem;
- L.dragProxy = F.proxy || K;
- L.cursorOffsetX = M.pageX - M.left;
- L.cursorOffsetY = M.pageY - M.top;
- L.offsetX = L.pageX - L.cursorOffsetX;
- L.offsetY = L.pageY - L.cursorOffsetY
- } else {
- if (F.dragging || (M.which > 0 && L.which != M.which) || E(L.target).is(M.not)) {
- return
- }
- }
- switch (L.type) {
- case "mousedown":
- E.extend(M, E(K).offset(), {
- elem: K,
- target: L.target,
- pageX: L.pageX,
- pageY: L.pageY
- });
- A.add(document, "mousemove mouseup", H, M);
- G(K, false);
- F.dragging = null;
- return false;
- case !F.dragging && "mousemove":
- if (I(L.pageX - M.pageX) + I(L.pageY - M.pageY) < M.distance) {
- break
- }
- L.target = M.target;
- J = C(L, "dragstart", K);
- if (J !== false) {
- F.dragging = K;
- F.proxy = L.dragProxy = E(J || K)[0]
- }
- case "mousemove":
- if (F.dragging) {
- J = C(L, "drag", K);
- if (B.drop) {
- B.drop.allowed = (J !== false);
- B.drop.handler(L)
- }
- if (J !== false) {
- break
- }
- L.type = "mouseup"
- }
- case "mouseup":
- A.remove(document, "mousemove mouseup", H);
- if (F.dragging) {
- if (B.drop) {
- B.drop.handler(L)
- }
- C(L, "dragend", K)
- }
- G(K, true);
- F.dragging = F.proxy = M.elem = false;
- break
- }
- return true
- }
- function C(M, K, L) {
- M.type = K;
- var J = E.event.handle.call(L, M);
- return J === false ? false : J || M.result
- }
- function I(J) {
- return Math.pow(J, 2)
- }
- function D() {
- return (F.dragging === false)
- }
- function G(K, J) {
- if (!K) {
- return
- }
- K.unselectable = J ? "off" : "on";
- K.onselectstart = function() {
- return J
- }
- ;
- if (K.style) {
- K.style.MozUserSelect = J ? "" : "none"
- }
- }
- }
- )(jQuery);
- (function($) {
- $.fn.touchSlider = function(settings) {
- settings.supportsCssTransitions = (function(style) {
- var prefixes = ['Webkit', 'Moz', 'Ms'];
- for (var i = 0, l = prefixes.length; i < l; i++) {
- if (typeof style[prefixes[i] + 'Transition'] !== 'undefined') {
- return true;
- }
- }
- return false;
- }
- )(document.createElement('div').style);
- settings = jQuery.extend({
- roll: true,
- flexible: false,
- btn_prev: null,
- btn_next: null,
- paging: null,
- speed: 75,
- view: 1,
- range: 0.15,
- page: 1,
- transition: false,
- initComplete: null,
- counter: null,
- multi: false
- }, settings);
- var opts = [];
- opts = $.extend({}, $.fn.touchSlider.defaults, settings);
- return this.each(function() {
- $.fn.extend(this, touchSlider);
- var _this = this;
- this.opts = opts;
- this._view = this.opts.view;
- this._speed = this.opts.speed;
- this._tg = $(this);
- this._list = this._tg.children().children();
- this._width = parseInt(this._tg.css("width"));
- this._item_w = parseInt(this._list.css("width"));
- this._len = this._list.length;
- this._range = this.opts.range * this._width;
- this._pos = [];
- this._start = [];
- this._startX = 0;
- this._startY = 0;
- this._left = 0;
- this._top = 0;
- this._drag = false;
- this._scroll = false;
- this._btn_prev;
- this._btn_next;
- this.init();
- $(this).bind("touchstart", this.touchstart).bind("touchmove", this.touchmove).bind("touchend", this.touchend).bind("dragstart", this.touchstart).bind("drag", this.touchmove).bind("dragend", this.touchend)
- $(window).bind("orientationchange resize", function() {
- _this.resize(_this);
- });
- });
- }
- ;
- var touchSlider = {
- init: function() {
- var _this = this;
- $(this).children().css({
- "width": this._width + "px",
- "overflow": "visible"
- });
- if (this.opts.flexible)
- this._item_w = this._width / this._view;
- if (this.opts.roll)
- this._len = Math.ceil(this._len / this._view) * this._view;
- var page_gap = (this.opts.page > 1 && this.opts.page <= this._len) ? (this.opts.page - 1) * this._item_w : 0;
- for (var i = 0; i < this._len; ++i) {
- this._pos[i] = this._item_w * i - page_gap;
- this._start[i] = this._pos[i];
- this._list.eq(i).css({
- "float": "none",
- "display": "block",
- "position": "absolute",
- "top": "0",
- "left": this._pos[i] + "px",
- "width": this._item_w + "px"
- });
- if (this.opts.supportsCssTransitions && this.opts.transition) {
- this._list.eq(i).css({
- "-moz-transition": "0ms",
- "-moz-transform": "",
- "-ms-transition": "0ms",
- "-ms-transform": "",
- "-webkit-transition": "0ms",
- "-webkit-transform": "",
- "transition": "0ms",
- "transform": ""
- });
- }
- }
- if (this.opts.btn_prev && this.opts.btn_next) {
- this.opts.btn_prev.bind("click", function() {
- _this.animate(1, true);
- return false;
- })
- this.opts.btn_next.bind("click", function() {
- _this.animate(-1, true);
- return false;
- });
- }
- if (this.opts.paging) {
- $(this._list).each(function(i, el) {
- var btn_page = _this.opts.paging.eq(i);
- btn_page.bind("click", function(e) {
- _this.go_page(i, e);
- return false;
- });
- });
- }
- this.counter();
- this.initComplete();
- },
- initComplete: function() {
- if (typeof (this.opts.initComplete) == "function") {
- this.opts.initComplete(this);
- }
- },
- resize: function(e) {
- if (e.opts.flexible) {
- var tmp_w = e._item_w;
- e._width = parseInt(e._tg.css("width"));
- e._item_w = e._width / e._view;
- e._range = e.opts.range * e._width;
- for (var i = 0; i < e._len; ++i) {
- e._pos[i] = e._pos[i] / tmp_w * e._item_w;
- e._start[i] = e._start[i] / tmp_w * e._item_w;
- e._list.eq(i).css({
- "left": e._pos[i] + "px",
- "width": e._item_w + "px"
- });
- if (this.opts.supportsCssTransitions && this.opts.transition) {
- e._list.eq(i).css({
- "-moz-transition": "0ms",
- "-moz-transform": "",
- "-ms-transition": "0ms",
- "-ms-transform": "",
- "-webkit-transition": "0ms",
- "-webkit-transform": "",
- "transition": "0ms",
- "transform": ""
- });
- }
- }
- }
- this.counter();
- },
- touchstart: function(e) {
- if ((e.type == "touchstart" && e.originalEvent.touches.length <= 1) || e.type == "dragstart") {
- this._startX = e.pageX || e.originalEvent.touches[0].pageX;
- this._startY = e.pageY || e.originalEvent.touches[0].pageY;
- this._scroll = false;
- this._start = [];
- for (var i = 0; i < this._len; ++i) {
- this._start[i] = this._pos[i];
- }
- }
- },
- touchmove: function(e) {
- if ((e.type == "touchmove" && e.originalEvent.touches.length <= 1) || e.type == "drag") {
- this._left = (e.pageX || e.originalEvent.touches[0].pageX) - this._startX;
- this._top = (e.pageY || e.originalEvent.touches[0].pageY) - this._startY;
- var w = this._left < 0 ? this._left * -1 : this._left;
- var h = this._top < 0 ? this._top * -1 : this._top;
- if (w < h || this._scroll) {
- this._left = 0;
- this._drag = false;
- this._scroll = true;
- } else {
- e.preventDefault();
- this._drag = true;
- this._scroll = false;
- this.position(e);
- }
- for (var i = 0; i < this._len; ++i) {
- var tmp = this._start[i] + this._left;
- if (this.opts.supportsCssTransitions && this.opts.transition) {
- var trans = "translate3d(" + tmp + "px,0,0)";
- this._list.eq(i).css({
- "left": "",
- "-moz-transition": "0ms",
- "-moz-transform": trans,
- "-ms-transition": "0ms",
- "-ms-transform": trans,
- "-webkit-transition": "0ms",
- "-webkit-transform": trans,
- "transition": "0ms",
- "transform": trans
- });
- } else {
- this._list.eq(i).css("left", tmp + "px");
- }
- this._pos[i] = tmp;
- }
- }
- },
- touchend: function(e) {
- if ((e.type == "touchend" && e.originalEvent.touches.length <= 1) || e.type == "dragend") {
- if (this._scroll) {
- this._drag = false;
- this._scroll = false;
- return false;
- }
- this.animate(this.direction());
- this._drag = false;
- this._scroll = false;
- }
- },
- position: function(d) {
- var gap = this._view * this._item_w;
- if (d == -1 || d == 1) {
- this._startX = 0;
- this._start = [];
- for (var i = 0; i < this._len; ++i) {
- this._start[i] = this._pos[i];
- }
- this._left = d * gap;
- } else {
- if (this._left > gap)
- this._left = gap;
- if (this._left < -gap)
- this._left = -gap;
- }
- if (this.opts.roll) {
- var tmp_pos = [];
- for (var i = 0; i < this._len; ++i) {
- tmp_pos[i] = this._pos[i];
- }
- tmp_pos.sort(function(a, b) {
- return a - b;
- });
- var max_chk = tmp_pos[this._len - this._view];
- var p_min = $.inArray(tmp_pos[0], this._pos);
- var p_max = $.inArray(max_chk, this._pos);
- if (this._view <= 1)
- max_chk = this._len - 1;
- if (this.opts.multi) {
- if ((d == 1 && tmp_pos[0] >= 0) || (this._drag && tmp_pos[0] >= 100)) {
- for (var i = 0; i < this._view; ++i,
- ++p_min,
- ++p_max) {
- this._start[p_max] = this._start[p_min] - gap;
- this._list.eq(p_max).css("left", this._start[p_max] + "px");
- }
- } else if ((d == -1 && tmp_pos[0] <= 0) || (this._drag && tmp_pos[0] <= -100)) {
- for (var i = 0; i < this._view; ++i,
- ++p_min,
- ++p_max) {
- this._start[p_min] = this._start[p_max] + gap;
- this._list.eq(p_min).css("left", this._start[p_min] + "px");
- }
- }
- } else {
- if ((d == 1 && tmp_pos[0] >= 0) || (this._drag && tmp_pos[0] > 0)) {
- for (var i = 0; i < this._view; ++i,
- ++p_min,
- ++p_max) {
- this._start[p_max] = this._start[p_min] - gap;
- this._list.eq(p_max).css("left", this._start[p_max] + "px");
- }
- } else if ((d == -1 && tmp_pos[max_chk] <= 0) || (this._drag && tmp_pos[max_chk] <= 0)) {
- for (var i = 0; i < this._view; ++i,
- ++p_min,
- ++p_max) {
- this._start[p_min] = this._start[p_max] + gap;
- this._list.eq(p_min).css("left", this._start[p_min] + "px");
- }
- }
- }
- } else {
- if (this.limit_chk())
- this._left = this._left / 2;
- }
- },
- animate: function(d, btn_click) {
- if (this._drag || !this._scroll || btn_click) {
- var _this = this;
- var speed = this._speed;
- if (btn_click)
- this.position(d);
- var gap = d * (this._item_w * this._view);
- if (this._left == 0 || (!this.opts.roll && this.limit_chk()))
- gap = 0;
- this._list.each(function(i, el) {
- _this._pos[i] = _this._start[i] + gap;
- if (_this.opts.supportsCssTransitions && _this.opts.transition) {
- var transition = speed + "ms";
- var transform = "translate3d(" + _this._pos[i] + "px,0,0)";
- if (btn_click)
- transition = "0ms";
- $(this).css({
- "left": "",
- "-moz-transition": transition,
- "-moz-transform": transform,
- "-ms-transition": transition,
- "-ms-transform": transform,
- "-webkit-transition": transition,
- "-webkit-transform": transform,
- "transition": transition,
- "transform": transform
- });
- } else {
- $(this).stop();
- $(this).animate({
- "left": _this._pos[i] + "px"
- }, speed);
- }
- });
- this.counter();
- }
- },
- direction: function() {
- var r = 0;
- if (this._left < -(this._range))
- r = -1;
- else if (this._left > this._range)
- r = 1;
- if (!this._drag || this._scroll)
- r = 0;
- return r;
- },
- limit_chk: function() {
- var last_p = parseInt((this._len - 1) / this._view) * this._view;
- return ((this._start[0] == 0 && this._left > 0) || (this._start[last_p] == 0 && this._left < 0));
- },
- go_page: function(i, e) {
- var crt = ($.inArray(0, this._pos) / this._view) + 1;
- var cal = crt - (i + 1);
- while (cal != 0) {
- if (cal < 0) {
- this.animate(-1, true);
- cal++;
- } else if (cal > 0) {
- this.animate(1, true);
- cal--;
- }
- }
- },
- counter: function() {
- if (typeof (this.opts.counter) == "function") {
- var param = {
- total: Math.ceil(this._len / this._view),
- current: ($.inArray(0, this._pos) / this._view) + 1
- };
- this.opts.counter(param);
- }
- }
- };
- }
- )(jQuery);
|