您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Smooth scrolling on pages using javascript and jquery
当前为
// ==UserScript== // @name Smoothscroll // @include http* // @author Creec Winceptor // @description Smooth scrolling on pages using javascript and jquery // @namespace https://greasyfork.org/users/3167 // @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js // @grant none // @version 0.0.1.20141226011714 // ==/UserScript== //SETTINGS HERE //Refreshrate setting (affects rate at which scrolling is refreshed) //values: 1-1000 (just leave it 100) var refreshrate = 100; //Smoothness value (how strong the smoothing effect is) //values: 1-100 var smoothness = 65; //CODE STARTS HERE this.$ = this.jQuery = jQuery.noConflict(true); if (window.top != window.self) //don't run on frames or iframes return; var animationduration = Math.round(1000/refreshrate); var relativeratio = Math.round(101-smoothness)/100; var relativeratio = relativeratio*relativeratio; var startposition = false; var targetposition = 0; var position = 0; var focus = $('body'); (function($) { $.fn.has_scrollbar = function() { var divnode = this.get(0); if(divnode.scrollHeight > divnode.clientHeight) return true; } })(jQuery); function UpdatePosition1() { var relative = position - document.body.scrollTop; if (Math.abs(relative*relativeratio)<= 1 ) { startposition = false; targetposition = 0; $('body').stop(); $('body').animate({ scrollTop: '+=' + Math.round(relative) }, animationduration, "linear") } else { $('body').stop(); $('body').animate({ scrollTop: '+=' + relative*relativeratio }, animationduration, "linear", UpdatePosition) } } function UpdatePosition(element) { var relative = position - $(element).scrollTop(); //$(element).css( "border", "3px solid red" ); //console.log("relative:" + relative); if (Math.abs(relative)<= 1 ) { startposition = false; targetposition = 0; $(element).animate({ scrollTop: '+=' + Math.round(relative) }, animationduration, "linear") } else { $(element).stop(); $(element).animate({ scrollTop: '+=' + relative*relativeratio }, animationduration, "linear", function() {UpdatePosition(element);} ) } } function getscrollable(element) { var parentelement = $(element).parent(); if ( $(parentelement)) { if ( $(parentelement).height() < $(element).height()) { return $(element); } else { return getscrollable( $(element)); } } else { return $('body'); } } function MouseScroll (event) { //var parentelement = $(focus).parent(); if ($(focus).is("textarea")) { return false; } else { if ( !$(focus).has_scrollbar()) { focus = $('body'); } } var rolled = 0; if (!startposition) { startposition = $(focus).scrollTop(); //console.log("start:" + startposition); } if ('wheelDelta' in event) { rolled = event.wheelDelta; } else { // Firefox // The measurement units of the detail and wheelDelta properties are different. rolled = event.detail*(-120); } targetposition = targetposition - rolled; //console.log("target:" + targetposition); var maxposition = $(focus).height()-window.innerHeight; if (targetposition+startposition <= 0) { targetposition = -startposition; //console.log("start") } else if (targetposition+startposition >= maxposition) { targetposition = (maxposition-startposition); //console.log("end") } else { } //console.log("document:" + $(document).height()); //console.log("window:" + $(window).height()); position = startposition + targetposition; UpdatePosition($(focus)); //element.innerHTML = ""; console.log("pos:" + position); event.preventDefault(); return false; } function Init (smoothscrollelem) { // for mouse scrolling in Firefox if (smoothscrollelem.addEventListener) { // all browsers except IE before version 9 // Internet Explorer, Opera, Google Chrome and Safari smoothscrollelem.addEventListener ("mousewheel", MouseScroll, false); // Firefox smoothscrollelem.addEventListener ("DOMMouseScroll", MouseScroll, false); } else { if (smoothscrollelem.attachEvent) { // IE before version 9 smoothscrollelem.attachEvent ("onmousewheel", MouseScroll); } } } var elements = $('*'); console.log("Loaded " + elements.length + " scrollable elements."); $(elements).each(function() { //if (this.scrollTop > this.height()) //if ($(this).innerHeight()>$(this).outerHeight()) //{ //Init(window); //$(this).bind('mousewheel', function(e){ //MouseScroll(e.originalEvent, this); //console.log("scrolling"); //if(e.originalEvent.wheelDelta /120 > 0) { //$(this).text('scrolling up !'); //} //else{ //$(this).text('scrolling down !'); //} //}); //} $( this ).bind({ mouseenter: function() { focus = $(this); // Do something on click }, mouseleave: function() { focus = $('body'); } }); }); $('body').bind('mousewheel', function(e){ MouseScroll(e.originalEvent); //console.log("scrolling"); //if(e.originalEvent.wheelDelta /120 > 0) { //$(this).text('scrolling up !'); //} //else{ //$(this).text('scrolling down !'); //} }); //Init(window); console.log("Smoothscroll loaded!");