/*! * scrollup v2.4.1 * Url: http://markgoodyear.com/labs/scrollup/ * Copyright (c) Mark Goodyear — @markgdyr — http://markgoodyear.com * License: MIT */ (function ($, window, document) { 'use strict'; // Main function $.fn.scrollUp = function (options) { // Ensure that only one scrollUp exists if (!$.data(document.body, 'scrollUp')) { $.data(document.body, 'scrollUp', true); $.fn.scrollUp.init(options); } }; // Init $.fn.scrollUp.init = function (options) { // Define vars var o = $.fn.scrollUp.settings = $.extend({}, $.fn.scrollUp.defaults, options), triggerVisible = false, animIn, animOut, animSpeed, scrollDis, scrollEvent, scrollTarget, $self; // Create element if (o.scrollTrigger) { $self = $(o.scrollTrigger); } else { $self = $('', { id: o.scrollName, href: '#top' }); } // Set scrollTitle if there is one if (o.scrollTitle) { $self.attr('title', o.scrollTitle); } $self.appendTo('body'); // If not using an image display text if (!(o.scrollImg || o.scrollTrigger)) { $self.html(o.scrollText); } // Minimum CSS to make the magic happen $self.css({ display: 'none', position: 'fixed', zIndex: o.zIndex }); // Active point overlay if (o.activeOverlay) { $('
', { id: o.scrollName + '-active' }).css({ position: 'absolute', 'top': o.scrollDistance + 'px', width: '100%', borderTop: '1px dotted' + o.activeOverlay, zIndex: o.zIndex }).appendTo('body'); } // Switch animation type switch (o.animation) { case 'fade': animIn = 'fadeIn'; animOut = 'fadeOut'; animSpeed = o.animationSpeed; break; case 'slide': animIn = 'slideDown'; animOut = 'slideUp'; animSpeed = o.animationSpeed; break; default: animIn = 'show'; animOut = 'hide'; animSpeed = 0; } // If from top or bottom if (o.scrollFrom === 'top') { scrollDis = o.scrollDistance; } else { scrollDis = $(document).height() - $(window).height() - o.scrollDistance; } // Scroll function scrollEvent = $(window).scroll(function () { if ($(window).scrollTop() > scrollDis) { if (!triggerVisible) { $self[animIn](animSpeed); triggerVisible = true; } } else { if (triggerVisible) { $self[animOut](animSpeed); triggerVisible = false; } } }); if (o.scrollTarget) { if (typeof o.scrollTarget === 'number') { scrollTarget = o.scrollTarget; } else if (typeof o.scrollTarget === 'string') { scrollTarget = Math.floor($(o.scrollTarget).offset().top); } } else { scrollTarget = 0; } // To the top $self.click(function (e) { e.preventDefault(); $('html, body').animate({ scrollTop: scrollTarget }, o.scrollSpeed, o.easingType); }); }; // Defaults $.fn.scrollUp.defaults = { scrollName: 'scrollUp', // Element ID scrollDistance: 300, // Distance from top/bottom before showing element (px) scrollFrom: 'top', // 'top' or 'bottom' scrollSpeed: 300, // Speed back to top (ms) easingType: 'linear', // Scroll to top easing (see http://easings.net/) animation: 'fade', // Fade, slide, none animationSpeed: 200, // Animation in speed (ms) scrollTrigger: false, // Set a custom triggering element. Can be an HTML string or jQuery object scrollTarget: false, // Set a custom target element for scrolling to. Can be element or number scrollText: 'Scroll to top', // Text for element, can contain HTML scrollTitle: false, // Set a custom title if required. Defaults to scrollText scrollImg: false, // Set true to use image activeOverlay: false, // Set CSS color to display scrollUp active point, e.g '#00FFFF' zIndex: 2147483647 // Z-Index for the overlay }; // Destroy scrollUp plugin and clean all modifications to the DOM $.fn.scrollUp.destroy = function (scrollEvent) { $.removeData(document.body, 'scrollUp'); $('#' + $.fn.scrollUp.settings.scrollName).remove(); $('#' + $.fn.scrollUp.settings.scrollName + '-active').remove(); // If 1.7 or above use the new .off() if ($.fn.jquery.split('.')[1] >= 7) { $(window).off('scroll', scrollEvent); // Else use the old .unbind() } else { $(window).unbind('scroll', scrollEvent); } }; $.scrollUp = $.fn.scrollUp; })(jQuery, window, document);