红色滚动条高度计算公式:容器的高度/内容的高度*容器的高度。
效果图:(注释overflow:hidden)
实现代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>模拟垂直滚动条</title>
<style type="text/css">
*{
margin: 0px;
padding: 0px;
}
.box{
width: 300px;
height: 500px;
border: 1px solid red;
padding-left: 20px;
margin: 100px;
position: relative;
/*overflow: hidden;*/
}
.content{
padding: 5px 18px 10px 5px;
position: absolute;
left: 0;
top: -10px;
}
.scroll{
position: absolute;
top: 0;
right: 0;
background-color: #ccc;
width: 20px;
height: 100%;
}
.bar{
width: 100%;
height: 20px;
background-color: red;
border-radius: 10px;
position: absolute;
left: 0;
top: 0;
cursor: pointer;
}
</style>
</head>
<body>
<div class="box" id="box">
<div class="content">
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
</div>
<div class="scroll">
<div class="bar"></div>
</div>
</div>
<script>
var box = document.getElementById('box');
var content = box.children[0];
var scroll = box.children[1];
var bar = scroll.children[0];
//计算滚动条红色bar的长度:容器长度/内容长度 * 容器长度,,比例关系
bar.style.height = box.offsetHeight / content.offsetHeight * box.offsetHeight +"px";
bar.onmousedown = function(event){
var event = event || window.event;
var y = event.clientY - this.offsetTop;
document.onmousemove = function(event){
var event = event || window.event;
var top = event.clientY - y;
if(top < 0)
top =0;
else if(top > scroll.offsetHeight - bar.offsetHeight)
top = scroll.offsetHeight - bar.offsetHeight;
bar.style.top = top +"px";
//(内容盒子高度 - 大盒子高度) / (大盒子高度 - 红色盒子的高度) * 红色盒子移动的数值
content.style.top = -(content.offsetHeight - box.offsetHeight)/(box.offsetHeight - bar.offsetHeight)*top+"px";
window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty(); // 防止拖动滑块的时候, 选中文字
}
}
document.onmouseup = function(){
document.onmousemove = null;
}
</script>
</body>
</html>