NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name TopDownButtonsEverywhere // @description Top and Down buttons everywhere (super light version) // @version 1.0 // @include http://* // @include https://* // @grant GM_setValue // @grant GM_getValue // @grant GM_xmlhttpRequest // @icon http://pics.smotri.com/cskins/blue/smiles/bt.gif // ==/UserScript== // [1] skip all iframe if (window.self != window.top) { return } // create element function ce(n) { return document.createElement(n); } // end of function // add style function addStyle(css) { var head = document.head || document.getElementsByTagName('head')[0]; if (head) { var style = ce("style"); style.type = "text/css"; style.appendChild(document.createTextNode(css)); head.appendChild(style); } // end if } // end of function // global variables var position, // figure out if this is moz || IE because they use documentElement el = (navigator.userAgent.indexOf('Firefox') != -1 || navigator.userAgent.indexOf('MSIE') != -1) ? document.documentElement : document.body, // timer t1, t2, // speed by speed_by_click = 500, // edit this value speed_by_over = 100, // edit this value // z-index zIindex = 1001; // edit this value // move up function move_up() { position = document.documentElement.scrollTop || document.body.scrollTop; window.scrollTo(0, position - 1); t1 = setTimeout(move_up, speed_by_over); } // end of function // move downn function move_dn() { position = document.documentElement.scrollTop || document.body.scrollTop; window.scrollTo(0, position + 1); t2 = setTimeout(move_dn, speed_by_over); } // end of function // document height function getDocumentHeight() { return (document.body.scrollHeight > document.body.offsetHeight) ? document.body.scrollHeight : document.body.offsetHeight; } // end of function // document scroll function get_scroll(a) { var d = document, b = d.body, e = d.documentElement, c = "client" + a, a = "scroll" + a; return /CSS/.test(d.compatMode) ? (e[c] < e[a]) : (b[c] < b[a]) } // end of function // calk function scrollTo(element, to, duration) { var start = element.scrollTop, change = to - start, currentTime = 0, increment = 20, newDuration = (typeof(duration) === 'undefined') ? 500 : duration; var animateScroll = function() { currentTime += increment; var val = Math.easeInOutQuad(currentTime, start, change, newDuration); element.scrollTop = val; if (currentTime < newDuration) { setTimeout(animateScroll, increment); } }; animateScroll(); } // end of function //t = current time //b = start value //c = change in value //d = duration Math.easeInOutQuad = function(t, b, c, d) { t /= d / 2; if (t < 1) return c / 2 * t * t + b; t--; return -c / 2 * (t * (t - 2) - 1) + b; }; // add css function shareCSS() { // variables var s = '', img_up, img_dn; // img vs button img_up = 'data:img/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB+SURBVDhPY1i1atV/amAGahgCMoNhaIGlS5cKAp19BoRBbLJcj2QILDJINwzoAmMgfoclIkBixkS5DI8hMJcRNgxoSBoOl6CnNZBhaVhdBjWE1MSJahjQkA4KEmYH2GUrV66cSYEhYB+AzKBtFiHkQqKiH6Ro1CDCQTWgYQQAs81DU0G/83sAAAAASUVORK5CYII='; img_dn = 'data:img/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAUCAYAAACAl21KAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACPSURBVDhPY2DAAlatWvUfH8amB6vYqEGEg2pgw4iQ7cTKM6xcuXImsYpxqQOZAQ4woIIOCgzrQAl1oEFpZBiWhitFgwx7R4SBIDXYDYGZDFRgTMAwkCHGhBMRJMxwGUa8ITCbli5dKgg08AySN8+AxIhyCboiJMPIN4Qsm6miiYioxltawvSDYogohYTUAQC80UNTOht/YwAAAABJRU5ErkJggg=='; // button id s += '#play_btn_up { position:fixed; right:0; bottom:53%;z-index:' + zIindex + '; height:36px; width:36px; cursor:pointer; background:url(' + img_up + ') no-repeat scroll 50% 50% rgba(0, 0, 0, 0.7); border-radius:5px 0 0 5px; margin-top:-24px; }'; s += '#play_btn_dn { position:fixed; right:0; top:53%; z-index:' + zIindex + '; height:36px; width:36px; cursor:pointer; background:url(' + img_dn + ') no-repeat scroll 50% 50% rgba(0, 0, 0, 0.7); border-radius:5px 0 0 5px; margin-top:-24px; }'; // button class s += '.play_btn { -webkit-transition-duration:0.5s linear; -o-transition-duration:0.5s linear; -moz-transition-duration:0.5s linear; transition-duration:0.5s linear; opacity:0.65; }'; s += '.play_btn:hover { opacity:1; }'; // append addStyle('' + s); } // end of function // main function create_btn_element() { // get scroll var up, dn, scrolled, h = get_scroll('Height'); // exit if (!h) { return; } // end if // add css shareCSS(); // if if (el) { // create DOM element up = ce('span'); dn = ce('span'); // set attribute up.setAttribute('id', 'play_btn_up'); dn.setAttribute('id', 'play_btn_dn'); // set class up.className = "play_btn"; dn.className = "play_btn"; // append element document.body.appendChild(up); document.body.appendChild(dn); // scroll scrolled = window.pageYOffset || document.documentElement.scrollTop; // if scroll up.style.display = (scrolled > 0) ? "" : "none"; // add event over up.addEventListener('mouseover', move_up, false); dn.addEventListener('mouseover', move_dn, false); // add event out up.addEventListener('mouseout', function() { clearTimeout(t1); }, false); dn.addEventListener('mouseout', function() { clearTimeout(t2); }, false); // add event click up.addEventListener('click', function() { scrollTo(el, 0, speed_by_click); }, false); dn.addEventListener('click', function() { scrollTo(el, getDocumentHeight(), speed_by_click); }, false); // add event scroll window.onscroll = function() { var scrolled = window.pageYOffset || document.documentElement.scrollTop, diffHeight = document.body.scrollHeight - window.innerHeight; // if scroll up up.style.display = (scrolled > 0) ? "" : "none"; // if scroll dn dn.style.display = (diffHeight > scrolled) ? "" : "none"; }; // end of function } // end if } // end of function // run it create_btn_element();