垂直模拟滚动条(offsetHeight)

红色滚动条高度计算公式:容器的高度/内容的高度*容器的高度。

效果图:(注释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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值