你需要先安装一款用户样式管理器扩展(如 Stylus )后才能安装此样式。
你需要先安装一款用户样式管理器扩展(如 Stylus )后才能安装此样式。
你需要先安装一款用户样式管理器扩展(如 Stylus )后才能安装此样式。
你需要先安装一款用户样式管理器扩展后才能安装此样式。
你需要先安装一款用户样式管理器扩展后才能安装此样式。
你需要先安装一款用户样式管理器扩展后才能安装此样式。
(我已安装用户样式管理器,立即安装用户样式!)
换行
// ==UserScript== // @name Scroll with Mouse Plus // @name:en Scroll with Mouse Plus // @name:zh-CN Scroll with Mouse Plus // @namespace http://userscripts.org/users/86496 // @description:zh-CN 页面随心滚动,无需点击! // @description:en Scroll a page by simply moving the cursor, without even a click! // @include * // @exclude *pan.baidu.com/* // @grant GM_getValue // @grant GM_setValue // @grant GM_addStyle // @run-at document-end // @author hzhbest // @license GNU GPLv3 // @version 2.11 // @description Scroll a page by simply moving the cursor up and down, without even a click! // ==/UserScript== // Original script by Protector one (http://userscripts.org/scripts/show/63593) // hzhbest modded; -algorithm changed -compatibility improved -flexabiligy:move into the scrollbar to activate and continue scrolling while in the scroll-sensitive zone // v20: add horizontal scroll support ( function (){ //###Customization: |可自定义的东西: //Show the scrolling indicator box or not, "1" to show. | 1-显示提示条,其他-不显示。 var scrollShowIndicator = 1 ; //Set the width of scroll-sensitive zone, "100" as full width, "10" as one tenth. // | “滚动触发区”宽度百分比,区间:[0-100],V为垂直宽度,H为水平宽度;取值100为屏宽/高,0为禁用,10为十分之一屏宽/高。 var VSzoneWidth = 10 ; var HSzoneHeight = 20 ; //Set the background of the indicator bar. | 提示条的背景,可以为“rgba(r,g,b,a)”或“#rrggbb[aa]”格式。 var IndicBarBG = "rgba(29,163,63,0.4)" ; //Set the height of "thickness" of the indicator bar. | 提示条的粗细度,单位为像素。 var IndicBarH = 20 ; //Write here the width of the scrollbar (set in display properties) for highest accuracy. // | 在下面填写滚动条的宽度(也就是系统“显示属性”中的数字),这样能实现最高精确度。 var ScrollbarWidth = 30 ; //Set a trigger for activation, 1-none, 2-Ctrl key, 3-middle 100px range. // | 在下面设置激活条件,1-无,2-按住 Ctrl 键,3-鼠标在页面中间100像素高度范围内。 var activateCond = 1 ; //Set if active on side(s) // | 设置是否在某些边启用。 var actOnLeft = false ; var actOnRight = true ; var actOnBottom = true ; //###Customization ends. 请不要更改下面代码。 var VscrollStartSWTM = - 1 ; var HscrollStartSWTM = - 1 ; var factor ; var Vbox ; var Hbox ; var VonL = 0 ; var VScrollOn = 0 ; var HScrollOn = false ; document . addEventListener ( 'mousemove' , function ( event ) { if ( document . body . contentEditable == "true" ) { return ; } // sHeight,sWidth:内容高度、宽度 var sHeight = Math . max ( document . body . scrollHeight , document . documentElement . scrollHeight ); var sWidth = Math . max ( document . body . scrollWidth , document . documentElement . scrollWidth ); // var cHeight = Math.max(document.body.clientHeight, document.documentElement.clientHeight); // var cWidth = Math.max(document.body.clientWidth, document.documentElement.clientWidth); // wHeight,wWidth:窗口(内容框)高度、宽度 var wHeight = window . innerHeight ; var wWidth = window . innerWidth ; // scrollboxHeight,Width:减去滚动条的滚动范围高度、宽度 var scrollboxHeight = wHeight - 2 * ScrollbarWidth ; var scrollboxWidth = wWidth - 2 * ScrollbarWidth ; // 滚动量 var delta ; //console.log("1:","x:",event.clientX,"y:",event.clientY,"h_on",HScrollOn); if ( sHeight > wHeight ) { // 仅当内容高度大于窗口高度时响应垂直滚动激活 var shouldActiveL = actOnLeft && event . clientX < ScrollbarWidth ; var shouldActiveR = actOnRight && event . clientX > wWidth - ScrollbarWidth ; if ( shouldActiveL ) { VonL = 1 ; } else if ( shouldActiveR ) { VonL = 2 ; } if ( shouldActiveL || shouldActiveR ){ switch ( activateCond ) { case 1 : VScrollOn = VonL ; break ; case 2 : if ( event . ctrlKey ) VScrollOn = VonL ; break ; case 3 : if ( event . clientY > wHeight / 2 - 50 && event . clientY < wHeight / 2 + 50 ) VScrollOn = VonL ; } if ( VScrollOn ) HScrollOn = false ; } var shouldExitL = VonL == 1 && event . clientX > VSzoneWidth / 100 * wWidth ; var shouldExitR = VonL == 2 && event . clientX < ( 1 - VSzoneWidth / 100 ) * wWidth ; if ( shouldExitL || shouldExitR ) VScrollOn = 0 ; if ( document . body . contentEditable == "true" ) VScrollOn = 0 ; } if ( actOnBottom && sWidth > wWidth ) { // 仅当内容宽度大于窗口宽度时响应水平滚动激活 if ( event . clientY > wHeight - ScrollbarWidth ){ switch ( activateCond ) { case 1 : HScrollOn = true ; break ; case 2 : if ( event . ctrlKey ) HScrollOn = true ; break ; case 3 : if ( event . clientX > wWidth / 2 - 50 && event . clientX < wWidth / 2 + 50 ) HScrollOn = true ; }; if ( HScrollOn ) VScrollOn = 0 ; } if ( event . clientY < (( 1 - HSzoneHeight / 100 ) * wHeight )) HScrollOn = false ; if ( document . body . contentEditable == "true" ) HScrollOn = false ; } if ( VScrollOn ) { if ( scrollShowIndicator == 1 ) make_Vbox (); if ( VscrollStartSWTM != - 1 ) { factor = ( event . ctrlKey ) ? 2 : sHeight / scrollboxHeight ; //console.log("w:",sHeight,scrollboxHeight,factor); //factor = ((Math.pow(dheightMax / wHeight,1.5)/110) + dheightMax / wHeight); //Vbox.innerHTML = wHeight +"|"+scrollboxHeight +"<br />"+dheightMax +"|"+ factor +"<br />"+document.body.scrollTop; if ( Vbox ) { Vbox . style . top = ( event . clientY - IndicBarH / 2 ) + 'px' ; Vbox . style . left = VonL == 1 ? "0px" : "unset" ; Vbox . style . right = VonL == 2 ? "0px" : "unset" ; } delta = factor * ( event . clientY - VscrollStartSWTM ); document . body . scrollTop += delta ; document . documentElement . scrollTop += delta ; if ( event . clientY + 20 > wHeight ) { document . body . scrollTop += ( factor * 10 ); document . documentElement . scrollTop += ( factor * 10 ); } if ( event . clientY > 0 && event . clientY < 20 ) { document . body . scrollTop -= ( factor * 10 ); document . documentElement . scrollTop -= ( factor * 10 ); } } VscrollStartSWTM = event . clientY ; } else { VscrollStartSWTM = - 1 ; if ( Vbox ) setTimeout ( function (){ Vbox . style . top = - 200 + 'px' ;}, 200 ); } if ( HScrollOn ) { if ( scrollShowIndicator == 1 ) make_Hbox (); if ( HscrollStartSWTM != - 1 ) { factor = ( event . ctrlKey ) ? 0.5 : sWidth / scrollboxWidth ; //console.log("w:",sWidth,scrollboxWidth,factor); //factor = ((Math.pow(dheightMax / wHeight,1.5)/110) + dheightMax / wHeight); if ( Hbox ) { Hbox . style . left = ( event . clientX - IndicBarH / 2 ) + 'px' ;} delta = factor * ( event . clientX - HscrollStartSWTM ); document . body . scrollLeft += delta ; document . documentElement . scrollLeft += delta ; if ( event . clientX + 20 > wWidth ) { document . body . scrollLeft += ( factor * 10 ); document . documentElement . scrollLeft += ( factor * 10 ); } if ( event . clientX > 0 && event . clientX < 20 ) { document . body . scrollLeft -= ( factor * 10 ); document . documentElement . scrollLeft -= ( factor * 10 ); } } HscrollStartSWTM = event . clientX ; } else { HscrollStartSWTM = - 1 ; if ( Hbox ) setTimeout ( function (){ Hbox . style . left = - 200 + 'px' ;}, 200 ); } }, false ); document . addEventListener ( 'click' , function () { VScrollOn = 0 ; HScrollOn = false ; }, false ); function make_Vbox () { if (! Vbox ) { Vbox = document . createElement ( "div" ); Vbox . id = "IndicatorVBox" ; var css = "width:" + VSzoneWidth + "%; background:" + IndicBarBG + "; min-height:" + IndicBarH + "px;" ; css += "text-align:center; position: fixed; top: -40px; overflow: hidden; z-index: 9999999; font-family:Arial !important; cursor:ns-resize;" ; Vbox . style = css ; document . body . appendChild ( Vbox ); Vbox . addEventListener ( 'click' , function (){ VScrollOn = 0 ;}, false ); return true ; } } function make_Hbox () { if (! Hbox ) { Hbox = document . createElement ( "div" ); Hbox . id = "IndicatorHBox" ; Hbox . style = "height:" + HSzoneHeight + "%;background:" + IndicBarBG + ";min-width:" + IndicBarH + "px;text-align:center;position: fixed; left: -40px; bottom: 0;overflow: hidden; z-index: 9999999;font-family:Arial !important;cursor:ew-resize;" ; document . body . appendChild ( Hbox ); Hbox . addEventListener ( 'click' , function (){ HScrollOn = false ;}, false ); return true ; } } })();