| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |  // ---------------------------------------------------------------------------- // Vegas – Fullscreen Backgrounds and Slideshows with jQuery. // v1.3.2 - released 2013-08-15 17:14 // Licensed under the MIT license. // http://vegas.jaysalvat.com/ // ---------------------------------------------------------------------------- // Copyright (C) 2010-2013 Jay Salvat // http://jaysalvat.com/ // ----------------------------------------------------------------------------(function($) {    var $background = $("<img />").addClass("vegas-background"), $overlay = $("<div />").addClass("vegas-overlay"), $loading = $("<div />").addClass("vegas-loading"), $current = $(), paused = null, backgrounds = [], step = 0, delay = 5e3, walk = function() {}, timer, methods = {        init: function(settings) {            var options = {                src: getBackground(),                align: "center",                valign: "center",                fade: 0,                loading: true,                load: function() {},                complete: function() {}            };            $.extend(options, $.vegas.defaults.background, settings);            if (options.loading) {                loading();            }            var $new = $background.clone();            $new.css({                position: "fixed",                left: "0px",                top: "0px"            }).bind("load", function() {                if ($new == $current) {                    return;                }                $(window).bind("load resize.vegas", function(e) {                    resize($new, options);                });                if ($current.is("img")) {                    $current.stop();                    $new.hide().insertAfter($current).fadeIn(options.fade, function() {                        $(".vegas-background").not(this).remove();                        $("body").trigger("vegascomplete", [ this, step - 1 ]);                        options.complete.apply($new, [ step - 1 ]);                    });                } else {                    $new.hide().prependTo("body").fadeIn(options.fade, function() {                        $("body").trigger("vegascomplete", [ this, step - 1 ]);                        options.complete.apply(this, [ step - 1 ]);                    });                }                $current = $new;                resize($current, options);                if (options.loading) {                    loaded();                }                $("body").trigger("vegasload", [ $current.get(0), step - 1 ]);                options.load.apply($current.get(0), [ step - 1 ]);                if (step) {                    $("body").trigger("vegaswalk", [ $current.get(0), step - 1 ]);                    options.walk.apply($current.get(0), [ step - 1 ]);                }            }).attr("src", options.src);            return $.vegas;        },        destroy: function(what) {            if (!what || what == "background") {                $(".vegas-background, .vegas-loading").remove();                $(window).unbind("resize.vegas");                $current = $();            }            if (what == "overlay") {                $(".vegas-overlay").remove();            }            return $.vegas;        },        overlay: function(settings) {            var options = {                src: null,                opacity: null            };            $.extend(options, $.vegas.defaults.overlay, settings);            $overlay.remove();            $overlay.css({                margin: "0",                padding: "0",                position: "fixed",                left: "0px",                top: "0px",                width: "100%",                height: "100%"            });            if (options.src) {                $overlay.css("backgroundImage", "url(" + options.src + ")");            }            if (options.opacity) {                $overlay.css("opacity", options.opacity);            }            $overlay.prependTo("body");            return $.vegas;        },        slideshow: function(settings, keepPause) {            var options = {                step: step,                delay: delay,                preload: false,                backgrounds: backgrounds,                walk: walk            };            $.extend(options, $.vegas.defaults.slideshow, settings);            if (options.backgrounds != backgrounds) {                if (!settings.step) {                    options.step = 0;                }                if (!settings.walk) {                    options.walk = function() {};                }                if (options.preload) {                    $.vegas("preload", options.backgrounds);                }            }            backgrounds = options.backgrounds;            delay = options.delay;            step = options.step;            walk = options.walk;            clearInterval(timer);            if (!backgrounds.length) {                return $.vegas;            }            var doSlideshow = function() {                if (step < 0) {                    step = backgrounds.length - 1;                }                if (step >= backgrounds.length || !backgrounds[step - 1]) {                    step = 0;                }                var settings = backgrounds[step++];                settings.walk = options.walk;                if (typeof settings.fade == "undefined") {                    settings.fade = options.fade;                }                if (settings.fade > options.delay) {                    settings.fade = options.delay;                }                $.vegas(settings);            };            doSlideshow();            if (!keepPause) {                paused = false;                $("body").trigger("vegasstart", [ $current.get(0), step - 1 ]);            }            if (!paused) {                timer = setInterval(doSlideshow, options.delay);            }            return $.vegas;        },        next: function() {            var from = step;            if (step) {                $.vegas("slideshow", {                    step: step                }, true);                $("body").trigger("vegasnext", [ $current.get(0), step - 1, from - 1 ]);            }            return $.vegas;        },        previous: function() {            var from = step;            if (step) {                $.vegas("slideshow", {                    step: step - 2                }, true);                $("body").trigger("vegasprevious", [ $current.get(0), step - 1, from - 1 ]);            }            return $.vegas;        },        jump: function(s) {            var from = step;            if (step) {                $.vegas("slideshow", {                    step: s                }, true);                $("body").trigger("vegasjump", [ $current.get(0), step - 1, from - 1 ]);            }            return $.vegas;        },        stop: function() {            var from = step;            step = 0;            paused = null;            clearInterval(timer);            $("body").trigger("vegasstop", [ $current.get(0), from - 1 ]);            return $.vegas;        },        pause: function() {            paused = true;            clearInterval(timer);            $("body").trigger("vegaspause", [ $current.get(0), step - 1 ]);            return $.vegas;        },        get: function(what) {            if (what === null || what == "background") {                return $current.get(0);            }            if (what == "overlay") {                return $overlay.get(0);            }            if (what == "step") {                return step - 1;            }            if (what == "paused") {                return paused;            }        },        preload: function(backgrounds) {            var cache = [];            for (var i in backgrounds) {                if (backgrounds[i].src) {                    var cacheImage = document.createElement("img");                    cacheImage.src = backgrounds[i].src;                    cache.push(cacheImage);                }            }            return $.vegas;        }    };    function resize($img, settings) {        var options = {            align: "center",            valign: "center"        };        $.extend(options, settings);        if ($img.height() === 0) {            $img.load(function() {                resize($(this), settings);            });            return;        }        var ww = $(window).width(), wh = $(window).height(), iw = $img.width(), ih = $img.height(), rw = wh / ww, ri = ih / iw, newWidth, newHeight, newLeft, newTop, properties;        if (rw > ri) {            newWidth = wh / ri;            newHeight = wh;        } else {            newWidth = ww;            newHeight = ww * ri;        }        properties = {            width: newWidth + "px",            height: newHeight + "px",            top: "auto",            bottom: "auto",            left: "auto",            right: "auto"        };        if (!isNaN(parseInt(options.valign, 10))) {            properties.top = 0 - (newHeight - wh) / 100 * parseInt(options.valign, 10) + "px";        } else if (options.valign == "top") {            properties.top = 0;        } else if (options.valign == "bottom") {            properties.bottom = 0;        } else {            properties.top = (wh - newHeight) / 2;        }        if (!isNaN(parseInt(options.align, 10))) {            properties.left = 0 - (newWidth - ww) / 100 * parseInt(options.align, 10) + "px";        } else if (options.align == "left") {            properties.left = 0;        } else if (options.align == "right") {            properties.right = 0;        } else {            properties.left = (ww - newWidth) / 2;        }        $img.css(properties);    }    function loading() {        $loading.prependTo("body").fadeIn();    }    function loaded() {        $loading.fadeOut("fast", function() {            $(this).remove();        });    }    function getBackground() {        if ($("body").css("backgroundImage")) {            return $("body").css("backgroundImage").replace(/url\("?(.*?)"?\)/i, "$1");        }    }    $.vegas = function(method) {        if (methods[method]) {            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));        } else if (typeof method === "object" || !method) {            return methods.init.apply(this, arguments);        } else {            $.error("Method " + method + " does not exist");        }    };    $.vegas.defaults = {        background: {},        slideshow: {},        overlay: {}    };})(jQuery);
 |