美文网首页
滑块and鼠标滚轮

滑块and鼠标滚轮

作者: Sherwinszw | 来源:发表于2020-12-01 20:58 被阅读0次

    自定义滚动条的万能比例:
    **滚动条的高度 / 屏幕的高度 = 屏幕的高度 / 内容的高度 = 滚动条的移动距离 / 内容的滚动距离

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>滑块and鼠标滚轮</title>
        <style>
            * {
                margin: 0;
                padding: 0;
                box-sizing: border-box;
            }
    
            html,
            body {
                height: 100%;
                overflow: hidden;
            }
    
            #wrap {
                width: 100%;
                height: 100%;
                overflow: hidden;
            }
    
            #scrollBar {
                height: 100%;
                width: 30px;
                /* border-top: 50px solid grey;
                border-bottom: 50px solid grey; */
    
                border-left: 1px solid gray;
                border-right: 1px solid gray;
                position: absolute;
                right: 0;
                top: 0;
            }
    
            #scrollIn {
                width: 90%;
                /* height: 30px; */
                background-color: gainsboro;
                position: absolute;
                left: 50%;
                top: 0;
                transform: translateX(-50%);
            }
    
            .content {
                position: absolute;
            }
        </style>
    </head>
    
    <body>
        <div id="wrap">
            <div class="content"></div>
            <div id="scrollBar">
                <div id="scrollIn"></div>
            </div>
        </div>
        <script>
            window.onload = function () {
                var content = document.querySelector('#wrap .content');
                var scrollIn = document.querySelector('#scrollIn');
                var str = '';
                var flag = '';
                for (var i = 0; i < 1000; i++) {
                    str += i + '<br>'
                    content.innerHTML = str;
                }
                var scrollInHeight = document.documentElement.clientHeight * document.documentElement.clientHeight / content.offsetHeight;
                scrollIn.style.height = scrollInHeight + 'px';
                scrollIn.onmousedown = function (event) {
                    event = event || window.event;
                    var my = event.clientY - this.offsetTop;
                    scrollIn.setCapture && scrollIn.setCapture();
                    document.onmousemove = function (event) {
                        event = event || window.event;
                        var disY = event.clientY - my;
                        disY < 0 ? disY = 0 : disY = disY;
                        disY > document.documentElement.clientHeight - scrollIn.offsetHeight ? disY = document.documentElement.clientHeight - scrollIn.offsetHeight : disY = disY;
                        scrollIn.style.top = disY + 'px';
                        var contentTop = document.documentElement.clientHeight * disY / scrollInHeight;
                        content.style.top = -contentTop + 'px';
                    }
                    document.onmouseup = function () {
                        this.onmouseup = this.onmousemove = null;
                        scrollIn.releaseCapture && scrollIn.releaseCapture();
                    }
                    return false;
                }
                document.addEventListener('mousewheel', mouseSrcoll);
                document.addEventListener('DOMMouseScroll', mouseSrcoll);
                function mouseSrcoll(event) {
                    event = event || window.event;
                    if (event.wheelDelta) {
                        if (event.wheelDelta < 0) {
                            flag = true;
                        } else {
                            flag = false;
                        }
                    } else if (event.detail) {
                        if (event.detail < 0) {
                            flag = true;
                        } else {
                            flag = false;
                        }
                    }
                    var disY = 0;
                    if (flag) {
                        disY = scrollIn.offsetTop + 10;
                        disY < 0 ? disY = 0 : disY = disY;
                        disY > document.documentElement.clientHeight - scrollIn.offsetHeight ? disY = document.documentElement.clientHeight - scrollIn.offsetHeight : disY = disY;
                        scrollIn.style.top = disY + 'px';
                    } else {
                        disY = scrollIn.offsetTop - 10;
                        disY < 0 ? disY = 0 : disY = disY;
                        disY > document.documentElement.clientHeight - scrollIn.offsetHeight ? disY = document.documentElement.clientHeight - scrollIn.offsetHeight : disY = disY;
                        scrollIn.style.top = disY + 'px';
                    }
    
                    var contentTop = document.documentElement.clientHeight * disY / scrollInHeight;
                    content.style.top = -contentTop + 'px';
                }
    
            }
    
        </script>
    </body>
    
    </html>
    

    相关文章

      网友评论

          本文标题:滑块and鼠标滚轮

          本文链接:https://www.haomeiwen.com/subject/drkewktx.html