返回顶部和到达底部的按钮修改版

在网页上添加一个按钮,可以快速返回顶部和到达底部,有滑动效果,原作者mofiter

  1. // ==UserScript==
  2. // @name 返回顶部和到达底部的按钮修改版
  3. // @namespace http://mofiter.com/
  4. // @version 0.3
  5. // @license MIT
  6. // @description 在网页上添加一个按钮,可以快速返回顶部和到达底部,有滑动效果,原作者mofiter
  7. // @description:en Add a button for all websites which can back to the top and go to the bottom,and there is a sliding effecct
  8. // @resource up_button_icon data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjgzMTE5MDk2OTE0IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjMzOTUiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTk0MCAzNjUuMkEzNzcuMzQgMzc3LjM0IDAgMCAwIDY1OC44IDg0Yy05Ni42LTIyLjYtMTk3LjItMjIuNi0yOTMuNiAwQTM3Ny4zNCAzNzcuMzQgMCAwIDAgODQgMzY1LjJjLTIyLjYgOTYuNi0yMi42IDE5Ny4yIDAgMjkzLjYgMzIuNiAxMzkuNiAxNDEuNiAyNDguNCAyODEuMiAyODEuMiA5Ni42IDIyLjYgMTk3LjIgMjIuNiAyOTMuNiAwIDEzOS42LTMyLjYgMjQ4LjQtMTQxLjYgMjgxLjItMjgxLjIgMjIuNi05Ni42IDIyLjYtMTk3IDAtMjkzLjZ6TTY1MC40IDU3OS40Yy0xMSAxMS4yLTI5IDExLjItNDAuMiAwTDUxMiA0ODEuMmwtOTguMiA5OC4yYy0xMSAxMS4yLTI5IDExLjItNDAuMiAwLTExLjItMTEtMTEuMi0yOSAwLTQwLjJsMTE4LjQtMTE4LjRjNS40LTUuNCAxMi42LTguNCAyMC04LjRzMTQuOCAzIDIwIDguNGwxMTguNCAxMTguNGMxMS4yIDExLjIgMTEuMiAyOS4yIDAgNDAuMnoiIGZpbGw9IiMyMTU3RjIiIHAtaWQ9IjMzOTYiPjwvcGF0aD48L3N2Zz4=
  9. // @resource down_button_icon data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjgzMTE5MTE4MDY4IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9Ijk5NyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48cGF0aCBkPSJNOTQwIDM2NS4yQTM3Ny4zNCAzNzcuMzQgMCAwIDAgNjU4LjggODRjLTk2LjYtMjIuNi0xOTcuMi0yMi42LTI5My42IDBBMzc3LjM0IDM3Ny4zNCAwIDAgMCA4NCAzNjUuMmMtMjIuNiA5Ni42LTIyLjYgMTk3LjIgMCAyOTMuNiAzMi42IDEzOS42IDE0MS42IDI0OC40IDI4MS4yIDI4MS4yIDk2LjYgMjIuNiAxOTcuMiAyMi42IDI5My42IDAgMTM5LjYtMzIuNiAyNDguNC0xNDEuNiAyODEuMi0yODEuMiAyMi42LTk2LjYgMjIuNi0xOTcgMC0yOTMuNnogbS0yODkuNiAxMTkuNkw1MzIgNjAzYy01LjQgNS40LTEyLjYgOC40LTIwIDguNC03LjYgMC0xNC44LTMtMjAtOC40bC0xMTguNC0xMTguNGMtMTEuMi0xMS0xMS4yLTI5IDAtNDAuMiAxMS0xMS4yIDI5LTExLjIgNDAuMiAwbDk4LjIgOTguMiA5OC4yLTk4LjJjMTEtMTEuMiAyOS0xMS4yIDQwLjIgMCAxMS4yIDExLjIgMTEuMiAyOS4yIDAgNDAuNHoiIGZpbGw9IiMyMTU3RjIiIHAtaWQ9Ijk5OCI+PC9wYXRoPjwvc3ZnPg==
  10. // @require https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js
  11. // @include http*://*/*
  12. // @grant GM_info
  13. // @grant GM_getResourceURL
  14. // @noframes
  15. // ==/UserScript==
  16.  
  17. (function() {
  18. 'use strict';
  19. var $ = $ || window.$;
  20. var canScrollMouseOver = false; //当鼠标在按钮上,但未点击时,页面能否自动滚动,true 为可以自动滚动,false 为不能自动滚动,可修改
  21. var opacityMouseLeave = 0.5; //当鼠标不在按钮上时,按钮的不透明度,从 0.0(完全透明)到 1.0(完全不透明),可修改
  22. var opacityMouseEnter = 0.8; //当鼠标在按钮上时,按钮的不透明度,从 0.0(完全透明)到 1.0(完全不透明),可修改
  23. var clickScrollTime = 500; //点击按钮时,网页滚动到顶部或底部需要的时间,单位是毫秒,可修改
  24. var needScrollTime; //网页可以自动滚动时,滚动需要的时间,由网页高度计算得出,这样不同网页都会匀速滚动
  25. var isClicked = false; //按钮是否被点击
  26. var initialHeight = 0; //网页向底部滚动时,需要滚动的距离
  27. var scrollAction = 'undefined';
  28. var scrollDirection = "down"; //网页滚动方向,down 为向下,up 为向上
  29. var loadTimes = 0; //网页中动态增加数据的次数
  30. var maxLoadTimes = 10; //最大的动态增加数据的次数(可修改),如果动态增加数据的次数超过这个值,则说明当前网页不适合执行此脚本,建议将其加入排除的网站当中
  31. var goTopBottomButton = document.createElement("div");
  32. goTopBottomButton.className = "goTopBottomButton";
  33. goTopBottomButton.innerHTML = "<img class='toggleButton' style='width:55px;height:55px;display:block;cursor:pointer;'></img>"; //图片的宽和高可修改,原始图片宽高均为 40px
  34. goTopBottomButton.style.position = "fixed";
  35. goTopBottomButton.style.zIndex = 10000;
  36. goTopBottomButton.style.bottom = "50px"; //距离网页底部 50px,可修改
  37. goTopBottomButton.style.right = "30px"; //距离网页右边 30px,可修改
  38. var toggleButton = goTopBottomButton.lastChild;
  39. toggleButton.style.opacity = opacityMouseLeave; //按钮初始不透明度
  40. toggleButton.src = GM_getResourceURL("down_button_icon"); //按钮初始显示向下的图片
  41. document.getElementsByTagName("body")[0].appendChild(goTopBottomButton);
  42.  
  43. /*按钮事件开始*/
  44. toggleButton.addEventListener("mouseenter",function() { //鼠标移入时不透明度改变,如果 canScrollMouseOver 为 true,则网页可以自动滚动
  45. isClicked = false;
  46. if (canScrollMouseOver) {
  47. if (scrollDirection == "up") {
  48. needScrollTime = getScrollTop() * 10;
  49. $('html,body').animate({scrollTop:'0px'},needScrollTime);
  50. } else {
  51. initialHeight = $(document).height();
  52. var restHeight = $(document).height() - getScrollTop();
  53. needScrollTime = restHeight * 10;
  54. $('html,body').animate({scrollTop:initialHeight},needScrollTime,continueToBottom);
  55. }
  56. }
  57. toggleButton.style.opacity = opacityMouseEnter;
  58. })
  59. toggleButton.addEventListener("mouseleave",function() { //鼠标移出时不透明度改变,如果 canScrollMouseOver 为 true,并且按钮未被点击,停止网页自动滚动的动画
  60. if (canScrollMouseOver && !isClicked) {
  61. $('html,body').stop();
  62. }
  63. toggleButton.style.opacity = opacityMouseLeave;
  64. })
  65. toggleButton.addEventListener("click",function() { //点击按钮时,网页滚动到顶部或底部
  66. isClicked = true;
  67. if (canScrollMouseOver) {
  68. $('html,body').stop();
  69. }
  70. if (scrollDirection == "up") {
  71. $('html,body').animate({scrollTop:'0px'},clickScrollTime);
  72. } else {
  73. initialHeight = $(document).height();
  74. $('html,body').animate({scrollTop:initialHeight},clickScrollTime,continueToBottom);
  75. }
  76. })
  77. /*按钮事件结束*/
  78.  
  79. /*页面滚动监听*/
  80. document.onscroll = function() {
  81. if (scrollAction == 'undefined') {
  82. scrollAction = window.pageYOffset;
  83. }
  84. var diffY = scrollAction - window.pageYOffset;
  85. scrollAction = window.pageYOffset;
  86. if (diffY < 0) {
  87. changeDirection("down");
  88. } else if (diffY > 0) {
  89. changeDirection("up");
  90. }
  91. if (getScrollTop() == 0) {
  92. changeDirection("down");
  93. }
  94. if (getScrollTop() + $(window).height() >= $(document).height()) {
  95. changeDirection("up");
  96. }
  97. }
  98.  
  99. function changeDirection(direction) { //改变按钮方向
  100. scrollDirection = direction;
  101. toggleButton.src = GM_getResourceURL(direction + "_button_icon");
  102. }
  103.  
  104. function getScrollTop() { //获取垂直方向滑动距离
  105. var scrollTop = 0;
  106. if (document.documentElement && document.documentElement.scrollTop) {
  107. scrollTop = document.documentElement.scrollTop;
  108. } else if (document.body) {
  109. scrollTop = document.body.scrollTop;
  110. }
  111. return scrollTop;
  112. }
  113.  
  114. function continueToBottom() { //判断页面是否继续下滑(主要是为了处理网页动态增加数据导致网页高度变化的情况)
  115. var currentHeight = $(document).height();
  116. if (initialHeight != currentHeight) {
  117. if (loadTimes >= maxLoadTimes) {
  118. $('html,body').stop();
  119. alert(" 本网站有太多的异步请求,不适合执行脚本《" + GM_info.script.name + "》,建议加入排除网站当中,具体方法请查看脚本主页");
  120. loadTimes = 0;
  121. return;
  122. }
  123. loadTimes ++;
  124. initialHeight = currentHeight;
  125. $('html,body').animate({scrollTop:initialHeight},1000,continueToBottom);
  126. }
  127. }
  128. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址