本文详细解析了使用JavaScript实现垂直滚动条的核心逻辑,重点推导了滚动条高度与内容移动倍数的计算公式。通过容器与内容的高度比值确定滑块尺寸,利用位移比例实现内容同步滚动,并提供完整HTML、CSS及JS代码供参考。
JavaScript实现垂直滚动条效果
本文分享了一个JavaScript实现垂直滚动条的具体代码示例,供读者参考学习。
首先确定红色滑块的高度,其计算公式为:容器高度除以内容高度,再乘以容器高度。
具体公式表达为:滚动条高度 = (容器高度 / 内容高度) × 容器高度。
接下来分析滚动条移动与内容区域移动的对应关系。当红色滑块移动1像素时,内容区域需要移动的距离取决于两者的尺寸比例。
计算内容移动倍数的公式为:(内容盒子高度 - 大盒子高度) 除以 (大盒子高度 - 红色盒子的高度)。
内容区域实际移动的距离等于上述计算出的倍数乘以红色滑块移动的像素值。
<html>
<head>
<meta charset="UTF-8">
<title>垂直滚动条</title>
<style>
*{
padding: 0;
margin: 0;
}
.box{
width: 300px;
height: 500px;
border: 1px solid red;
padding-right: 20px;
margin: 100px;
position: relative;
}
.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>
最终实现的滚动效果如下图所示。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。