// SmoothScroll v0.9.9 // Licensed under the terms of the MIT license. // People involved // - Balazs Galambosi: maintainer (CHANGELOG.txt) // - Patrick Brunner (patrickb1991@gmail.com) // - Michael Herf: Pulse Algorithm (function ($) { $(document).ready(function () { // Scroll Variables (tweakable) var framerate = 150; // [Hz] 150 var animtime = 600; // [px] 400 var stepsize = 150; // [px] 120 // Pulse (less tweakable) // ratio of "tail" to "acceleration" var pulseAlgorithm = true; var pulseScale = 5; // 8 var pulseNormalize = 1; // Keyboard Settings var disableKeyboard = false; var arrowscroll = 50; // [px] 50 // Excluded pages var exclude = ""; // Other Variables var frame = false; var direction = { x: 0, y: 0 }; var initdone = false; var fixedback = true; var activeElement; var root; var key = { left: 37, up: 38, right: 39, down: 40, spacebar: 32, pageup: 33, pagedown: 34, end: 35, home: 36 }; /*********************************************** * INITIALIZE ***********************************************/ /** * Tests if smooth scrolling is allowed. Shuts down everything if not. */ function initTest() { // disable keys for google reader (spacebar conflict) if (document.URL.indexOf("google.com/reader/view") > -1) { disableKeyboard = true; } // disable everything if the page is blacklisted if (exclude) { var domains = exclude.split(/[,\n] ?/); for (var i = domains.length; i--;) { if (document.URL.indexOf(domains[i]) > -1) { removeEvent("mousewheel", wheel); disableKeyboard = true; break; } } } } /** * Sets up scrolls array, determines if frames are involved. */ function init() { if (!document.body) return; var body = document.body; var html = document.documentElement; var windowHeight = window.innerHeight; var scrollHeight = body.scrollHeight; // check compat mode for root element root = (document.compatMode.indexOf('CSS') >= 0) ? html : body; activeElement = body; initTest(); initdone = true; // Checks if this script is running in a frame if (top != self) { frame = true; } /** * This fixes a bug where the areas left and right to * the content does not trigger the onmousewheel event * on some pages. e.g.: html, body { height: 100% } */ else if (scrollHeight > windowHeight && (body.offsetHeight <= windowHeight || html.offsetHeight <= windowHeight)) { root.style.height = "auto"; if (root.offsetHeight <= windowHeight) { var underlay = document.createElement("div"); underlay.style.clear = "both"; body.appendChild(underlay); } } if (document.URL.indexOf("mail.google.com") > -1) { var s = document.createElement("style"); s.innerHTML = ".iu { visibility: hidden }"; (document.getElementsByTagName("head")[0] || html).appendChild(s); } if (!fixedback) { body.style.backgroundAttachment = "scroll"; } // disable keyboard support if (disableKeyboard) { removeEvent("keydown", keydown); } } /************************************************ * SCROLLING