Add button for Smooth Scroll to the top / bottom

为页面添加按钮,平滑的滚动到顶部/底部

目前為 2015-05-23 提交的版本,檢視 最新版本

// ==UserScript==
// @name	Add button for Smooth Scroll to the top / bottom
// @author	burningall
// @description	为页面添加按钮,平滑的滚动到顶部/底部
// @version     2015.5.25.1
// @include		*
// @supportURL		http://www.burningall.com
// @contributionURL	[email protected]|alipay.com
// @namespace https://gf.qytechs.cn/zh-CN/users/3400-axetroy
// ==/UserScript==

(function(){
//================公共函数区============
function addEvent(obj, event, fn) {return obj.addEventListener ? obj.addEventListener(event, fn, false) : obj.attachEventListener("on" + event, fn);};
function getScrollHeight() {return document.body ? bodyScrollHeight = document.body.scrollHeight: document.documentElement.scrollHeight;};
function getClientHeight() {return document.documentElement ? document.documentElement.clientHeight: document.body.clientHeight;};
function hasScroll() {return getScrollHeight() > getClientHeight() ? true : false;};
function $(id) {return document.getElementById(id);}
function getStyle(obj, attr) {return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj)[attr];}
function getScrollTop() {return document.documentElement.scrollTop ? document.documentElement.scrollTop: document.body.scrollTop;}
function getClientHeight() {return document.documentElement ? document.documentElement.clientHeight: document.body.clientHeight;}
function createElement(tagName, idName, styleList, appendPosition, endFn) {
	var newElement = document.createElement(tagName);
	newElement.id = idName;
	newElement.style.cssText = styleList;
	appendPosition && appendPosition.appendChild(newElement);
	endFn && endFn();
}
function doMove(obj, attr, dir, target, endFn) {
	dir = parseInt(getStyle(obj, attr)) < target ? dir: -dir;
	clearInterval(obj.timer);
	obj.timer = setInterval(function() {
		var speed = parseInt(getStyle(obj, attr)) + dir;
		if (speed > target && dir > 0 || speed < target && dir < 0) {
			speed = target;
		};
		obj.style[attr] = speed + "px";
		if (speed == target) {
			clearInterval(obj.timer);
			endFn && endFn();
		};
	},
	30);
};
function movein(){
			clearTimeout($("scrollMars-troy").timerHover);
			doMove($("scrollMars-troy"), "right", 10, 20,function() {
				doMove($("scrollMars-troy"), "width", 20, 100);
			});
};
function moveout(){
			clearTimeout($("scrollMars-troy").timerHover);
			$("scrollMars-troy").timerHover = setTimeout(function() {
				doMove($("scrollMars-troy"), "right", 10, -80,function() {
					doMove($("scrollMars-troy"), "width", 20, 160);
				});
			},
			3000);//鼠标离开后,3s隐藏到边栏
};
function scrollTop(){
			clearInterval($("goTop-troy").timerScroll);
			$("goTop-troy").timerScroll = setInterval(function() {
				var speed = (getScrollTop() / 5) + 10;
				position = getScrollTop() - speed;
				if (position <= 0) {
					document.body.scrollTop = document.documentElement.scrollTop = 0;
					clearInterval($("goTop-troy").timerScroll);
					$("goTop-troy").timerScroll = null;
				}
				document.body.scrollTop = document.documentElement.scrollTop = position;
			},
			30);
};
function scrollBtn(){
			clearInterval($("goTop-troy").timerScroll);
			$("goTop-troy").timerScroll = setInterval(function() {
				var speed = (getScrollTop() / 5) + 10;
				position = getScrollTop() + speed;
				if (position + getClientHeight() >= getScrollHeight()) {
					document.body.scrollTop = document.documentElement.scrollTop = getScrollHeight();
					clearInterval($("goTop-troy").timerScroll);
					$("goTop-troy").timerScroll = null;
				}
				document.body.scrollTop = document.documentElement.scrollTop = position;
			},
			30);
};
//================主要代码区============
function createBtn(){
	if($("scrollMars-troy") && hasScroll() == true){//如果有滚动条,并且存在滚动按钮
		$('scrollMars-troy').style.top=(getClientHeight()/3)+'px';//调整按钮位置
	}else if($("scrollMars-troy") && hasScroll() == false){//如果没有滚动条,但是有按钮
		$("scrollMars-troy").remove($("scrollMars-troy"));//删除按钮
	};
	if (hasScroll() == false && !$("scrollMars-troy")) {//如果没有滚动条,并且没有按钮
		return false;
	}else if(hasScroll() == true && !$("scrollMars-troy")){//如果有滚动条,并且没有按钮
		createElement("div", "scrollMars-troy",MarsCSS, document.documentElement);
		$("scrollMars-troy").innerHTML = "<div id='goTop-troy' class='Top-and-Btn'></div><div id='goBtn-troy' class='Top-and-Btn'></div>";
		$('scrollMars-troy').style.top=(getClientHeight()/3)+'px';
		$("goTop-troy").style.cssText = BottonCSS;
		$("goBtn-troy").style.cssText = BottonCSS;
		$("goTop-troy").innerHTML = "顶<br/>部";
		$("goBtn-troy").innerHTML = "底<br/>部";
		addEvent($("goTop-troy"), "click",function() {scrollTop()});
		addEvent($("goBtn-troy"), "click",function() {scrollBtn()});
		addEvent(window, "resize",function() {$('scrollMars-troy').style.top=(getClientHeight()/3)+'px';});
		addEvent($("scrollMars-troy"), "mouseover",function() {movein()});
		addEvent($("scrollMars-troy"), "mouseout",function() {moveout()});
		addEvent($("goTop-troy"), "mouseover",function() {$("goTop-troy").style.background = "#FF0004";});
		addEvent($("goTop-troy"), "mouseout",function() {$("goTop-troy").style.background = "#303030";});
		addEvent($("goBtn-troy"), "mouseover",function() {$("goBtn-troy").style.background = "#FF0004";});
		addEvent($("goBtn-troy"), "mouseout",function() {$("goBtn-troy").style.background = "#303030";});
		moveout();//页面加载完成,默认3s后隐藏到边栏
	};
};
//================样式区============
		//遮罩层样式
		var MarsCSS='\
			width:100px;\
			height:120px;\
			position:fixed;\
			right:20px;\
			z-index:99999;\
		'
		//两个按钮样式
		var BottonCSS='\
			width:40px;\
			height:40px;\
			text-align:center;\
			padding:5px;\
			margin:5px auto;\
			background:#303030;\
			color:#fff;\
			display:block;\
			opacity:0.8;\
			fitter:alpha(opacity:80);\
			cursor:pointer;\
			border-radius:50%;\
			box-shadow:2px 2px 40px 2px #303030;\
			font-size:16px;\
			font-family:"微软雅黑";\
			z-index:9999;\
		'
//================执行区============
addEvent(window.top,"load",function(){createBtn()});
addEvent(window.top, "resize",function(){createBtn()});
})()

QingJ © 2025

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