GoTop.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. /**
  2. * 页面滚动条不是在最顶端时 页面出现top按钮,点击回到最顶端,按钮隐藏
  3. *
  4. * 使用 直接引入 <script src="./js/GoTop.js" id="js_gotop"></script>
  5. */
  6. (function() {
  7. //获取当前js路径 然后处理图片路径 即绝对路径 (避免在多处引用图片路径不对)
  8. var path = document.getElementById('js_gotop').src;
  9. path_out = path.replace("js/GoTop.js","images/gotop_out.png");
  10. path_over = path.replace("js/GoTop.js","images/gotop_over.png");
  11. // html 元素
  12. var div = document.createElement('div');
  13. div.id = "gotop";
  14. div.onmouseout = function(e){this.firstChild.src = path_out};
  15. div.onmouseover = function(e){this.firstChild.src = path_over};
  16. div.setAttribute("style","display:'';position:fixed;width:30px;height:30px;bottom:50px;right:50px;opacity:0;margin: 20px");
  17. document.body.appendChild(div);
  18. var inner = '<img border=0 src='+'"'+path_out+'"'+'>';
  19. document.getElementById('gotop').innerHTML = inner;
  20. //屏幕滚动 元素淡入淡出 参数设置
  21. window.onscroll = function() {
  22. getScrollTop() > 0 ? fadein(div,100,1000,5): fadeout(div,0,1000,5);
  23. };
  24. //元素点击事件
  25. div.onclick = function() {
  26. var goTop = setInterval(scrollMove, 10);
  27. function scrollMove() {
  28. setScrollTop(getScrollTop() / 1.1);
  29. if (getScrollTop() < 1) clearInterval(goTop);
  30. }
  31. };
  32. /**
  33. * 获取滚动条的高度
  34. *
  35. * @returns {number} 滚动条高度
  36. */
  37. function getScrollTop() {
  38. return document.documentElement.scrollTop + document.body.scrollTop;
  39. }
  40. /**
  41. * 设置滚动条的值
  42. *
  43. * @param value
  44. */
  45. function setScrollTop(value) {
  46. if (document.documentElement.scrollTop) {
  47. document.documentElement.scrollTop = value;
  48. } else {
  49. document.body.scrollTop = value;
  50. }
  51. }
  52. /**
  53. * 元素透明度设置 浏览器兼容
  54. *
  55. * @param element 元素
  56. * @param opacity 透明度 0·100 正整数
  57. */
  58. function setOpacity(element,opacity){
  59. //兼容firfox Chrome 和新版的IE
  60. if(element.style.opacity !== undefined)
  61. {
  62. element.style.opacity = opacity/100;
  63. }
  64. else {
  65. element.style.filter = "alpha(opacity = "+ opacity +")"; //兼容老版的IE
  66. }
  67. }
  68. /**
  69. * 淡入
  70. *
  71. * @param element 元素
  72. * @param opacity 最终透明度 0`100 正整数
  73. * @param time 总共时间 单位 毫秒
  74. * @param value 每次变化值 0`100 正整数
  75. */
  76. function fadein(element, opacity,time,value){
  77. if(element){
  78. //获取当前的透明度
  79. var v = element.style.opacity || element.style.filter.replace("alpha(opacity=","").replace(")","");
  80. v = v > 1 ? v*1 : v*100;
  81. //变化透明度
  82. var changeopacity = opacity - v;
  83. if(changeopacity <= 0) return;
  84. //元素可见
  85. element.style.display = "";
  86. //变化次数
  87. var count = changeopacity/value;
  88. //变化时间间隔
  89. var speed = time/count;
  90. var timer = null;
  91. timer = setInterval(function(){
  92. if(v<opacity) {
  93. v +=value;
  94. setOpacity(element,v);
  95. }
  96. else{
  97. clearInterval(timer);
  98. }
  99. },speed);
  100. }
  101. }
  102. /**
  103. * 淡出
  104. *
  105. * @param element 元素
  106. * @param opacity 最终透明度 0`100 正整数
  107. * @param time 总共时间 单位 毫秒
  108. * @param value 每次变化值 0`100 正整数
  109. */
  110. function fadeout(element,opacity,time,value){
  111. if(element){
  112. //获取当前的透明度
  113. var v = element.style.filter.replace("alpha(opacity=","").replace(")","") || element.style.opacity || 100;
  114. v = v > 1 ? v*1 : v*100;
  115. //变化透明度
  116. var changeopacity = v - opacity;
  117. if(changeopacity <= 0) return;
  118. //变化次数
  119. var count = changeopacity/value;
  120. //变化时间间隔
  121. var speed = time/count;
  122. var timer = null;
  123. timer = setInterval(function(){
  124. if((v-value) >= opacity){
  125. v -= value;
  126. setOpacity(element,v);
  127. }
  128. else {
  129. clearInterval(timer);
  130. element.style.display = "none";
  131. }
  132. },speed)
  133. }
  134. }
  135. })();