⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jquery.jcarousel.js

📁 jquery+prototype+插件+源码+资料 非常的东西
💻 JS
📖 第 1 页 / 共 2 页
字号:
        prev: function() {            this.stopAuto();            if (this.tail != null && this.inTail)                this.scrollTail(true);            else                this.scroll(((this.options.wrap == 'both' || this.options.wrap == 'first') && this.options.size != null && this.first == 1) ? this.options.size : this.first - this.options.scroll);        },        /**         * Scrolls the tail of the carousel.         *         * @name scrollTail         * @type undefined         * @param Bool b Whether scroll the tail back or forward.         * @cat Plugins/jCarousel         */        scrollTail: function(b) {            if (this.locked || this.animating || !this.tail)                return;            var pos  = $jc.intval(this.list.css(this.lt));            !b ? pos -= this.tail : pos += this.tail;            this.inTail = !b;            // Save for callbacks            this.prevFirst = this.first;            this.prevLast  = this.last;            this.animate(pos);        },        /**         * Scrolls the carousel to a certain position.         *         * @name scroll         * @type undefined         * @param Number i The index of the element to scoll to.         * @param Bool a Flag indicating whether to perform animation.         * @cat Plugins/jCarousel         */        scroll: function(i, a) {            if (this.locked || this.animating)                return;            this.animate(this.pos(i), a);        },        /**         * Prepares the carousel and return the position for a certian index.         *         * @name pos         * @type Number         * @param Number i The index of the element to scoll to.         * @cat Plugins/jCarousel         */        pos: function(i) {            if (this.locked || this.animating)                return;            if (this.options.wrap != 'circular')                i = i < 1 ? 1 : (this.options.size && i > this.options.size ? this.options.size : i);            var back = this.first > i;            var pos  = $jc.intval(this.list.css(this.lt));            // Create placeholders, new list width/height            // and new list position            var f = this.options.wrap != 'circular' && this.first <= 1 ? 1 : this.first;            var c = back ? this.get(f) : this.get(this.last);            var j = back ? f : f - 1;            var e = null, l = 0, p = false, d = 0;            while (back ? --j >= i : ++j < i) {                e = this.get(j);                p = !e.length;                if (e.length == 0) {                    e = this.create(j).addClass(this.className('jcarousel-item-placeholder'));                    c[back ? 'before' : 'after' ](e);                }                c = e;                d = this.dimension(e);                if (p)                    l += d;                if (this.first != null && (this.options.wrap == 'circular' || (j >= 1 && (this.options.size == null || j <= this.options.size))))                    pos = back ? pos + d : pos - d;            }            // Calculate visible items            var clipping = this.clipping();            var cache = [];            var visible = 0, j = i, v = 0;            var c = this.get(i - 1);            while (++visible) {                e = this.get(j);                p = !e.length;                if (e.length == 0) {                    e = this.create(j).addClass(this.className('jcarousel-item-placeholder'));                    // This should only happen on a next scroll                    c.length == 0 ? this.list.prepend(e) : c[back ? 'before' : 'after' ](e);                }                c = e;                var d = this.dimension(e);                if (d == 0) {                    alert('jCarousel: No width/height set for items. This will cause an infinite loop. Aborting...');                    return 0;                }                if (this.options.wrap != 'circular' && this.options.size !== null && j > this.options.size)                    cache.push(e);                else if (p)                    l += d;                v += d;                if (v >= clipping)                    break;                j++;            }             // Remove out-of-range placeholders            for (var x = 0; x < cache.length; x++)                cache[x].remove();            // Resize list            if (l > 0) {                this.list.css(this.wh, this.dimension(this.list) + l + 'px');                if (back) {                    pos -= l;                    this.list.css(this.lt, $jc.intval(this.list.css(this.lt)) - l + 'px');                }            }            // Calculate first and last item            var last = i + visible - 1;            if (this.options.wrap != 'circular' && this.options.size && last > this.options.size)                last = this.options.size;            if (j > last) {                visible = 0, j = last, v = 0;                while (++visible) {                    var e = this.get(j--);                    if (!e.length)                        break;                    v += this.dimension(e);                    if (v >= clipping)                        break;                }            }            var first = last - visible + 1;            if (this.options.wrap != 'circular' && first < 1)                first = 1;            if (this.inTail && back) {                pos += this.tail;                this.inTail = false;            }            this.tail = null;            if (this.options.wrap != 'circular' && last == this.options.size && (last - visible + 1) >= 1) {                var m = $jc.margin(this.get(last), !this.options.vertical ? 'marginRight' : 'marginBottom');                if ((v - m) > clipping)                    this.tail = v - clipping - m;            }            // Adjust position            while (i-- > first)                pos += this.dimension(this.get(i));            // Save visible item range            this.prevFirst = this.first;            this.prevLast  = this.last;            this.first     = first;            this.last      = last;            return pos;        },        /**         * Animates the carousel to a certain position.         *         * @name animate         * @type undefined         * @param mixed p Position to scroll to.         * @param Bool a Flag indicating whether to perform animation.         * @cat Plugins/jCarousel         */        animate: function(p, a) {            if (this.locked || this.animating)                return;            this.animating = true;            var self = this;            var scrolled = function() {                self.animating = false;                if (p == 0)                    self.list.css(self.lt,  0);                if (self.options.wrap == 'both' || self.options.wrap == 'last' || self.options.size == null || self.last < self.options.size)                    self.startAuto();                self.buttons();                self.notify('onAfterAnimation');            };            this.notify('onBeforeAnimation');            // Animate            if (!this.options.animation || a == false) {                this.list.css(this.lt, p + 'px');                scrolled();            } else {                var o = !this.options.vertical ? {'left': p} : {'top': p};                this.list.animate(o, this.options.animation, this.options.easing, scrolled);            }        },        /**         * Starts autoscrolling.         *         * @name auto         * @type undefined         * @param Number s Seconds to periodically autoscroll the content.         * @cat Plugins/jCarousel         */        startAuto: function(s) {            if (s != undefined)                this.options.auto = s;            if (this.options.auto == 0)                return this.stopAuto();            if (this.timer != null)                return;            var self = this;            this.timer = setTimeout(function() { self.next(); }, this.options.auto * 1000);        },        /**         * Stops autoscrolling.         *         * @name stopAuto         * @type undefined         * @cat Plugins/jCarousel         */        stopAuto: function() {            if (this.timer == null)                return;            clearTimeout(this.timer);            this.timer = null;        },        /**         * Sets the states of the prev/next buttons.         *         * @name buttons         * @type undefined         * @cat Plugins/jCarousel         */        buttons: function(n, p) {            if (n == undefined || n == null) {                var n = !this.locked && this.options.size !== 0 && ((this.options.wrap && this.options.wrap != 'first') || this.options.size == null || this.last < this.options.size);                if (!this.locked && (!this.options.wrap || this.options.wrap == 'first') && this.options.size != null && this.last >= this.options.size)                    n = this.tail != null && !this.inTail;            }            if (p == undefined || p == null) {                var p = !this.locked && this.options.size !== 0 && ((this.options.wrap && this.options.wrap != 'last') || this.first > 1);                if (!this.locked && (!this.options.wrap || this.options.wrap == 'last') && this.options.size != null && this.first == 1)                    p = this.tail != null && this.inTail;            }            var self = this;            this.buttonNext[n ? 'bind' : 'unbind'](this.options.buttonNextEvent, this.funcNext)[n ? 'removeClass' : 'addClass'](this.className('jcarousel-next-disabled')).attr('disabled', n ? false : true);            this.buttonPrev[p ? 'bind' : 'unbind'](this.options.buttonPrevEvent, this.funcPrev)[p ? 'removeClass' : 'addClass'](this.className('jcarousel-prev-disabled')).attr('disabled', p ? false : true);            if (this.buttonNext.length > 0 && (this.buttonNext[0].jcarouselstate == undefined || this.buttonNext[0].jcarouselstate != n) && this.options.buttonNextCallback != null) {                this.buttonNext.each(function() { self.options.buttonNextCallback(self, this, n); });                this.buttonNext[0].jcarouselstate = n;            }            if (this.buttonPrev.length > 0 && (this.buttonPrev[0].jcarouselstate == undefined || this.buttonPrev[0].jcarouselstate != p) && this.options.buttonPrevCallback != null) {                this.buttonPrev.each(function() { self.options.buttonPrevCallback(self, this, p); });                this.buttonPrev[0].jcarouselstate = p;            }        },        notify: function(evt) {            var state = this.prevFirst == null ? 'init' : (this.prevFirst < this.first ? 'next' : 'prev');            // Load items            this.callback('itemLoadCallback', evt, state);            if (this.prevFirst != this.first) {                this.callback('itemFirstInCallback', evt, state, this.first);                this.callback('itemFirstOutCallback', evt, state, this.prevFirst);            }            if (this.prevLast != this.last) {                this.callback('itemLastInCallback', evt, state, this.last);                this.callback('itemLastOutCallback', evt, state, this.prevLast);            }            this.callback('itemVisibleInCallback', evt, state, this.first, this.last, this.prevFirst, this.prevLast);            this.callback('itemVisibleOutCallback', evt, state, this.prevFirst, this.prevLast, this.first, this.last);        },        callback: function(cb, evt, state, i1, i2, i3, i4) {            if (this.options[cb] == undefined || (typeof this.options[cb] != 'object' && evt != 'onAfterAnimation'))                return;            var callback = typeof this.options[cb] == 'object' ? this.options[cb][evt] : this.options[cb];            if (!$.isFunction(callback))                return;            var self = this;            if (i1 === undefined)                callback(self, state, evt);            else if (i2 === undefined)                this.get(i1).each(function() { callback(self, this, i1, state, evt); });            else {                for (var i = i1; i <= i2; i++)                    if (!(i >= i3 && i <= i4))                        this.get(i).each(function() { callback(self, this, i, state, evt); });            }        },        create: function(i) {            return this.format('<li></li>', i);        },        format: function(e, i) {            var $e = $(e).addClass(this.className('jcarousel-item')).addClass(this.className('jcarousel-item-' + i));            $e.attr('jcarouselindex', i);            return $e;        },        className: function(c) {            return c + ' ' + c + (!this.options.vertical ? '-horizontal' : '-vertical');        },        dimension: function(e, d) {            var el = e.jquery != undefined ? e[0] : e;            var old = !this.options.vertical ?                el.offsetWidth + $jc.margin(el, 'marginLeft') + $jc.margin(el, 'marginRight') :                el.offsetHeight + $jc.margin(el, 'marginTop') + $jc.margin(el, 'marginBottom');            if (d == undefined || old == d)                return old;            var w = !this.options.vertical ?                d - $jc.margin(el, 'marginLeft') - $jc.margin(el, 'marginRight') :                d - $jc.margin(el, 'marginTop') - $jc.margin(el, 'marginBottom');            $(el).css(this.wh, w + 'px');            return this.dimension(el);        },        clipping: function() {            return !this.options.vertical ?                this.clip[0].offsetWidth - $jc.intval(this.clip.css('borderLeftWidth')) - $jc.intval(this.clip.css('borderRightWidth')) :                this.clip[0].offsetHeight - $jc.intval(this.clip.css('borderTopWidth')) - $jc.intval(this.clip.css('borderBottomWidth'));        },        index: function(i, s) {            if (s == undefined)                s = this.options.size;            return Math.round((((i-1) / s) - Math.floor((i-1) / s)) * s) + 1;        }    });    $jc.extend({        /**         * Sets the global default configuration properties.         *         * @name defaults         * @descr Sets the global default configuration properties.         * @type undefined         * @param Hash d A set of key/value pairs to set as configuration properties.         * @cat Plugins/jCarousel         */        defaults: function(d) {            $.extend(defaults, d);        },        margin: function(e, p) {            if (!e)                return 0;            var el = e.jquery != undefined ? e[0] : e;            if (p == 'marginRight' && $.browser.safari) {                var old = {'display': 'block', 'float': 'none', 'width': 'auto'}, oWidth, oWidth2;                $.swap(el, old, function() { oWidth = el.offsetWidth; });                old['marginRight'] = 0;                $.swap(el, old, function() { oWidth2 = el.offsetWidth; });                return oWidth2 - oWidth;            }            return $jc.intval($.css(el, p));        },        intval: function(v) {            v = parseInt(v);            return isNaN(v) ? 0 : v;        }    });})(jQuery);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -