js-模拟垂直滚动条

1、 红色盒子高度计算公式:

容器的高度 / 内容的高度 * 容器的高度

2、红色方块移动一像素 ,我们的内容盒子移动多少呢?
(内容盒子高度 - 大盒子高度) / (大盒子高度 - 红色盒子的高度) 计算倍数

 (内容盒子高度 -  大盒子高度) /  (大盒子高度 - 红色盒子的高度)   * 红色盒子移动的数值
<!DOCTYPE html>
<html lang="en">
<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> 

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值