<!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>
模拟滚动条
最新推荐文章于 2021-09-19 13:27:20 发布