模拟滚动条

<!doctype html>
<html>
<head>
	<meta charset="utf-8">
	<title>模拟滚动条</title>
	<style type="text/css">
	*{ margin:0; padding:0;}
	body{ font-size:12px;}
	.pub-scroll-bar .scroll .prev,.pub-scroll-bar .scroll .next,.pub-scroll-bar .scroll .bar,.pub-scroll-bar .scroll .bar div{ background: url(scroll-bar.png) no-repeat 0 0;}
	.pub-scroll-bar{ position: absolute; right:0; top:0; width:14px; height:200px; overflow:hidden; cursor: default; font-size:0;}
	.pub-scroll-bar .scroll{ position:absolute; height:166px; width:14px; top:17px; }
	.pub-scroll-bar .scroll .line{ position: absolute; top:0; left:50%; margin-left:-1px; height:100%; width:2px; background-color:#DBDEE7;}
	.pub-scroll-bar .scroll .prev,.pub-scroll-bar .scroll .next{ position: absolute; left:0; width:14px; height:14px;}
	.pub-scroll-bar .scroll .prev{ top:-17px; background-position: 0 0;}
	.pub-scroll-bar .scroll .next{ bottom:-17px; background-position: -45px 0; }
	.pub-scroll-bar .scroll .prevHover{ background-position: -15px 0;}
	.pub-scroll-bar .scroll .nextHover{ background-position: -60px 0;}
	.pub-scroll-bar .scroll .prevDown{ background-position: -30px 0;}
	.pub-scroll-bar .scroll .nextDown{ background-position: -75px 0;}
	.pub-scroll-bar .scroll .bar{ position: absolute; width:14px; height:60px; background-position: -90px 0; background-repeat:repeat-y;}
	.pub-scroll-bar .scroll .bar div{ position: absolute; width:14px; height:5px; left:0; overflow: hidden;}
	.pub-scroll-bar .scroll .bar .t{ top:-3px; background-position: 0 -15px;}
	.pub-scroll-bar .scroll .bar .m{ top:50%; margin-top:-3px; background-position:0 -20px;}
	.pub-scroll-bar .scroll .bar .b{ bottom:-3px; background-position: -45px -15px;}
	.pub-scroll-bar .scroll .barHover{ background-position: -105px 0;}
	.pub-scroll-bar .scroll .barHover .t{ background-position: -15px -15px;}
	.pub-scroll-bar .scroll .barHover .m{ background-position:-15px -20px;}
	.pub-scroll-bar .scroll .barHover .b{ background-position: -60px -15px;}
	.pub-scroll-bar .scroll .barDown{ background-position: -120px 0;}
	.pub-scroll-bar .scroll .barDown .t{ background-position:-30px -15px;}
	.pub-scroll-bar .scroll .barDown .m{ background-position:-30px -20px;}
	.pub-scroll-bar .scroll .barDown .b{ background-position: -75px -15px;}


	.gc{ position: relative; padding:10px 0 10px 10px; margin: 100px;}
	.gc .scroll-con{ position: relative; overflow:hidden; height:196px;}
	.gc .scroll-con .scroll-con-in{ position: absolute; top:0; left: 0; width:100%;}
	</style>
</head>
<body>
	<div id="scroll" class="gc">
		<div class="scroll-con">
			<div class="scroll-con-in">
<pre>
作曲:俞灏明 作词:俞灏明 吴梦知
演唱:俞灏明

如果痛是一种形容
我也会倔强到最终
沉默是最完美的互动
怕什么有我陪你疯
平凡的苦衷说爱说痛都太笼统
被故事选中没资格懵懂
就算没观众自己第一个被感动
我相信到最后一分钟
如果狠是一种从容
我也不肯选择被动
如果有所谓的太贫穷
不过是不敢再做梦

平凡的苦衷说爱说痛都太笼统
被故事选中没资格懵懂
就算没观众自己第一个被感动
我相信到最后一分钟
但愿在茫茫人海中
我的眼神你会懂
但愿我们会温柔的目送
那些没看过的繁荣
那些理想的恢弘
总会有一天和我们相逢

平凡的苦衷说爱说痛都太笼统
被故事选中没资格懵懂
就算没观众自己第一个被感动
我相信到最后一分钟
太多不由衷不过是岁月的内容
叹息过再继续向前走
</pre>
			</div>
		</div>
		<div class="pub-scroll-bar">
			<div class="scroll">
				<div class="prev"></div>
				<div class="line"></div>
				<div class="bar">
					<div class="t"></div>
					<div class="m"></div>
					<div class="b"></div>
				</div>
				<div class="next"></div>
			</div>
		</div>
	</div>
	<script>
	//通过类名获得元素
	function getByClass(oParent,sClass)
	{
		var aEle = oParent.getElementsByTagName('*');
		var aResult = [];
		for(var i = 0; i < aEle.length; i++)
		{
			if(hasClass(aEle[i],sClass))
			{
				aResult.push(aEle[i])
			}
		}
		return aResult;
	}
	//有此类名
	function hasClass(obj,sClass)
	{
		var reClass = new RegExp('\\b'+sClass+'\\b');
		if(reClass.test(obj.className)){
			return true;
		}
		else
		{
			return false;
		}
	}
	//添加类名
	function addClass(obj,sClass)
	{
		if(!hasClass(obj,sClass))
		{
			obj.className+= ' '+sClass;
		}
	}
	//移除类名
	function removeClass(obj,sClass)
	{
		var reClass = new RegExp('\\s+\\b'+sClass+'\\b')
		if(hasClass(obj,sClass))
		{
			obj.className = obj.className.replace(reClass,'');
		}
	}
	//添加事件
	function myAddEvent(obj,sEvt,fn)
	{
		if(obj.attachEvent)
		{
			obj.attachEvent('on'+sEvt,fn)
		}
		else
		{
			obj.addEventListener(sEvt,fn,false);
		}
	}
	//鼠标滚轮
	function mouseScroll(obj,fn)
	{
		myAddEvent(obj,'mousewheel',isDown)
		myAddEvent(obj,'DOMMouseScroll',isDown)

		function isDown(evt)
		{
			var evt = evt || event;
			var bDown = true;
			if(evt.wheelDelta)
			{
				bDown = evt.wheelDelta < 0;
			}
			else
			{
				bDown = evt.detail > 0
			}
			fn(bDown)
			if(evt.preventDefault)
			{
				evt.preventDefault();
			}
			return false;
		}
	}
	window.onload = function()
	{
		   var oScrollBar = document.getElementById('scroll'),
		  	   oScrollCon = getByClass(oScrollBar,'scroll-con')[0],
		  			 oCon = getByClass(oScrollBar,'scroll-con-in')[0]
		    oPubScrollBar = getByClass(oScrollBar,'pub-scroll-bar')[0],
		          oScroll = getByClass(oPubScrollBar,'scroll')[0],
					oPrev = getByClass(oPubScrollBar,'prev')[0],
		        	oNext = getByClass(oPubScrollBar,'next')[0],
		        	 oBar = getByClass(oPubScrollBar,'bar')[0];
		 //向上按钮
		oPrev.onmouseover = function(){ addClass(this,'prevHover') }
		 oPrev.onmouseout = function(){ removeClass(this,'prevHover') }
		oPrev.onmousedown = function(){ addClass(this,'prevDown') }
		  oPrev.onmouseup = function(){ removeClass(this,'prevDown') }
		    oPrev.onclick = function(){ setBarTop(oBar.offsetTop-10)};
		 //向下按钮
		  oNext.onmouseover = function(){ addClass(this,'nextHover') }
		 oNext.onmouseout = function(){ removeClass(this,'nextHover') }
		oNext.onmousedown = function(){ addClass(this,'nextDown') }
		  oNext.onmouseup = function(){ removeClass(this,'nextDown') }
		  	oNext.onclick = function(){ setBarTop(oBar.offsetTop+10)};
		 //中间按钮
		  oBar.onmouseover = function(){ addClass(this,'barHover') }
		 oBar.onmouseout = function(){ removeClass(this,'barHover') }
		//oBar.onmousedown = function(){ addClass(this,'barDown') }
		  //oBar.onmouseup = function(){ removeClass(this,'barDown') }

		  //设置可拖块的高度
		  function setBarHeight()
		  {
		  	var iBarH = oCon.parentNode.offsetHeight/oCon.offsetHeight * oBar.parentNode.offsetHeight;

		  	if(oCon.offsetHeight <= oCon.parentNode.offsetHeight)
		  	{
		  		oPubScrollBar.style.display = 'none'
		  	}

		  	if( iBarH < 50)
		  	{
		  		iBarH = 50
		  	}

		  	oBar.style.height = iBarH + 'px';
		  }
		  //设置可拖块的top值
		  function setBarTop(t)
		  {
		  	if(t < 0)
	  	  	{
	  	  		t = 0;
	  	  	}
	  	  	var h = oBar.parentNode.offsetHeight - oBar.offsetHeight;
	  	  	if(t > h)
	  	  	{
	  	  		t  = h;
	  	  	}
	  	  	oBar.style.top = t +'px';
	  	  	var iScale = t/h;
	  	  	oCon.style.top = -(oCon.offsetHeight - oCon.parentNode.offsetHeight) * iScale + 'px';
		  }
		  //设置滚动条的高度
		  function scrollBarHeight()
		  {
		  	var oParentH = oPubScrollBar.parentNode.offsetHeight;
		  	oPubScrollBar.style.height = oParentH + 'px';
		  	oScroll.style.height = oPubScrollBar.offsetHeight - 34 + 'px';
		  }
		  scrollBarHeight();
		  setBarHeight();
		  //鼠标滚轮
		  mouseScroll(oPubScrollBar.parentNode,function(down){
		  	if(down)
		  	{
		  		setBarTop(oBar.offsetTop+10)
		  	}
		  	else
		  	{
		  		setBarTop(oBar.offsetTop-10)
		  	}
		  })
		  
		  //拖动
		  oBar.onmousedown = function(evt)
		  {
		  	  var evt = evt || event;
		  	  var disY = evt.clientY - this.offsetTop;
		  	  var _this = this;

		  	  if(this.setCapture)
		  	  {
		  	  	_this.onmousemove = fnMove;
		  	  	_this.onmouseup = fnUp;
		  	  }
		  	  else
		  	  {
		  	  	document.onmousemove = fnMove;
		  	  	document.onmouseup = fnUp;
		  	  }

		  	  function fnMove(evt)
		  	  {
		  	  	var evt = evt || event;
		  	  	var t = evt.clientY - disY;
		  	  	setBarTop(t);
		  	  }

		  	  function fnUp()
		  	  {
		  	  	this.onmousemove = null;
		  	  	this.onmouseup = null;
		  	  	if(this.releaseCapture)
		  	  	{
		  	  		this.releaseCapture();
		  	  	}
		  	  	removeClass(_this,'barDown')
		  	  }
		  	  addClass(this,'barDown');
		  	  return false;
		  }


	}
	</script>
</body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值