原生js实现简单的滚动条

原生js实现简单滚动条

<div class="scroll">
        <div class="con">
            滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容
            滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容
            滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容
            滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容
            滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容
            滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容
            滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容
            滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容
            滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容
            滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容
            滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容
            滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容滚动条内容
        </div>
        <div class="slip">
            <div class="bar"></div>
        </div>
    </div>
.scroll {
            width: 300px;
            height: 400px;
            padding-right: 10px;
            border: 1px solid #333;
            overflow: hidden;
            position: relative;
        }

        .con {
            width: 280px;
            padding: 10px;
            position: absolute;
        }

        .slip {
            width: 20px;
            height: 100%;
            position: absolute;
            right: 0;
            top: 0;
            background-color: #999;
        }

        .bar {
            width: 14px;
            height: 30px;
            position: absolute;
            left: 50%;
            margin-left: -7px;
            border-radius: 10px;
            background-color: #000;
        }
 var scroll = document.querySelector(".scroll");
        var con = scroll.querySelector(".con");
        var slip = scroll.querySelector(".slip");
        var bar = scroll.querySelector(".bar");
        bar.onmousedown = function (ev) {
            var ev = window.event || event;
            var sTop = ev.clientY - bar.offsetTop; //获取鼠标点击滑块bar时到滑块顶部的距离
            document.onmousemove = function (e) {
                var e = window.event || event;
                var bTop = e.clientY - sTop; //设置滑块的top值
                if (bTop < 0) {
                    bTop = 0;
                }
                if (bTop > slip.clientHeight - bar.clientHeight) {
                    bTop = slip.clientHeight - bar.clientHeight;
                }
                var scale = bTop / (scroll.clientHeight - bar.clientHeight); //滑块相对滚动条运动的比例
                var cTop = (scroll.clientHeight - con.clientHeight) * scale;//用同样比例计算内容的top值
                bar.style.top = bTop + "px";
                con.style.top = cTop + "px";
            }
            document.onmouseup = function () {
                document.onmousemove=document.onmouseup = "";
            }
            return false;
        }
        scroll.onmousewheel = function (ev) { //给最外侧盒子设置滚轮事件
            var n = 10;//设置每次滑动鼠标滑轮运动的px值
            var ev = window.event || event;
            if (ev.wheelDelta < 0) {
                var bTop = bar.offsetTop + n;
            }
            if (ev.wheelDelta > 0) {
                var bTop = bar.offsetTop - n;
            }
            if (bTop < 0) {
                bTop = 0
            }
            if (bTop > slip.clientHeight - bar.clientHeight) {
                bTop = slip.clientHeight - bar.clientHeight
            }
            var scale = bTop / (scroll.clientHeight - bar.clientHeight);
            var cTop = (scroll.clientHeight - con.clientHeight) * scale;
            bar.style.top = bTop + "px";
            con.style.top = cTop + "px";
        }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值