• JS——滚动条


    1、核心思想与之前的拖拽盒子是一样的

    2、完全将鼠标在盒子中的坐标给滚动条是错的,因为这样会使滚动条顶部立刻瞬间移动到鼠标位置

    3、必须在鼠标按下事件时记住鼠标在滚动条内部的坐标,再将鼠标在盒子中的坐标给滚动条时要减去这个相对距离

    4、超出部分内容:超出部分移动距离=滚动条需要移动的距离:滚动条移动距离

    5、上面公式的意思就是:滚动条移动到了能够移动距离的50%时,超出部分距离也应该移动50%

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            * {
                padding: 0;
                margin: 0;
            }
    
            .box {
                width: 250px;
                height: 400px;
                border: 1px solid #ccc;
                border-right: none;
                margin: 150px auto;
                padding: 10px;
                position: relative;
                overflow: hidden;
    
            }
    
            .content {
                width: 250px;
                font: 400 15px "simsun";
            }
    
            .small {
                width: 20px;
                height: 100%;
                background-color: #ccc;
                position: absolute;
                top: 0;
                right: 0;
            }
    
            .scrollBar {
                width: 20px;
                height: 70px;
                background-color: red;
                border-radius: 15px;
                position: absolute;
                top: 0;
                left: 0;
            }
        </style>
    </head>
    <body>
    <div class="box">
        <div class="content">
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            少小离家老大回,乡音未改鬓毛衰<br>
            -----------最后-----------<br>
        </div>
        <div class="small">
            <div class="scrollBar"></div>
        </div>
        <script>
    
            //点击滚动条,拖拽移动
            var box = document.getElementsByTagName("div")[0];
            var content = box.children[0];
            var small = box.children[1];
            var scrollBar = small.children[0];
            scrollBar.onmousedown = function (ev) {
                ev = ev || window.event;
                var pageY = ev.pageY || scroll().top + ev.clientY;
                var scrollBarY = pageY - scrollBar.offsetTop - box.offsetTop;//鼠标在scrollBar中的位置
                document.onmousemove = function (ev) {
                    ev = ev || window.event;
                    //鼠标在small中的坐标,其实就是在box中的坐标(只取y值)
                    var pageY = ev.pageY || scroll().top + ev.clientY;
                    var boxY = pageY - box.offsetTop;
                    var y = boxY - scrollBarY;
                    if (y < 0) {
                        y = 0;
                    }
                    if (y > small.offsetHeight - scrollBar.offsetHeight) {
                        y = small.offsetHeight - scrollBar.offsetHeight;
                    }
                    scrollBar.style.top = y + "px";
                    window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
    
                    //保证内容联动,滚动条拉到最下面,要保证内容部分显示底部
                    //滚动条最大移动距离:
                    var scrollBarDistance = small.offsetHeight - scrollBar.offsetHeight;//滚动条可以滚动多长
                    var overContent = box.offsetHeight - 2 - 10 - content.offsetHeight;//超出部分
                    //scrollBarDistance/y=overContent/u;
                    var u = overContent * y / scrollBarDistance;
                    console.log(u);
                    content.style.marginTop = u + "px";
    
                }
            }
            document.onmouseup = function () {
                document.onmousemove = null;
            }
    
            function scroll() {
                return {
                    "top": window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop,
                    "left": window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft
                };
            }
        </script>
    </div>
    </body>
    </html>

  • 相关阅读:
    Web Browser使用技巧
    Excel 函数
    删除文件夹, 解决源文件名长度大于文件系统支持的长度问题
    Send Mail using C# code
    动态规划——最长回文子串
    字符串处理总结
    打印日期
    A+B
    对称矩阵
    最小年龄的3个职工
  • 原文地址:https://www.cnblogs.com/wuqiuxue/p/7985420.html
Copyright © 2020-2023  润新知