<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #leftBox {
            width: 500px;
            height: 500px;
            border: 10px solid red;
            float: left;
            overflow: hidden;
            position: relative;
        }

        #rightBox {
            width: 30px;
            height: 500px;
            background: lightskyblue;
            position: absolute;
            left: 700px;
        }

        #drag {
            width: 100%;
            height: 40px;
            background: pink;
            position: absolute;
        }

        /*如果子元素定位,父元素的overflow:hidden没有作用,给父元素定位*/
        #leftBox p {
            width: 500px;
            margin: 0;
            position: absolute;
        }
    </style>
    <script>
        window.onload = function(){
            //获取元素
            var lBox = document.getElementById('leftBox');
            var p = document.getElementsByTagName('p')[0];
            var rBox = document.getElementById('rightBox');
            var drag = document.getElementById('drag');
            
            //1.完成滚动条的拖拽  在rightBox中拖拽drag
            //1.1 鼠标按下
            drag.onmousedown = function(e){
                var ev = window.event || e;
                //1.4 计算差值
                var a = ev.clientY - rBox.offsetTop - drag.offsetTop;
                //1.2 鼠标移动
                document.onmousemove = function(e){
                    //1.3 让drag盒子跟随鼠标移动
                    var ev = window.event || e;
                    var y = ev.clientY - rBox.offsetTop-a;
                    //1.5限制范围
                    if(y<0){
                        y=0;
                    };
                    if(y>rBox.clientHeight-drag.clientHeight){
                        y = rBox.clientHeight-drag.clientHeight;
                    }
                    //drag盒子 会相对于父元素进行定位
                    drag.style.top = y + 'px';

                     //2.控制文本
                     //2.1计算比例  比例就是 滚动条cpx p标签走-bpx 因此滚动条走1px,p标签走 -b/c px
                     var c = rBox.clientHeight - drag.clientHeight;
                     var b = p.clientHeight - lBox.clientHeight;
                     var rate = -b/c;
                     //根据比例 计算p标签的定位值
                     var Y = y * rate;
                     p.style.top = Y + 'px';
                }
                return false;
            }
            //1.4 鼠标抬起
            document.onmouseup = function(){
                //移除掉 鼠标移动事件
                document.onmousemove = null;
            }

           
        }
    </script>
</head>
<body>
    <!-- 文本内容 -->
    <div id="leftBox">
        <!-- 实际存放文本的容器 -->
        <p>
            JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
            在1995年时,由Netscape公司的Brendan
            Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。
            [1]
            为了取得技术优势,微软推出了JScript,CEnvi推出ScriptEase,与JavaScript同样可在浏览器上运行。为了统一规格,因为Java
            JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
            在1995年时,由Netscape公司的Brendan
            Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。
            [1]
            为了取得技术优势,微软推出了JScript,CEnvi推出ScriptEase,与JavaScript同样可在浏览器上运行。为了统一规格,因为Java
            JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
            在1995年时,由Netscape公司的Brendan
            Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。
            [1]
            为了取得技术优势,微软推出了JScript,CEnvi推出ScriptEase,与JavaScript同样可在浏览器上运行。为了统一规格,因为Java
            JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
            在1995年时,由Netscape公司的Brendan
            Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。
            [1]
            为了取得技术优势,微软推出了JScript,CEnvi推出ScriptEase,与JavaScript同样可在浏览器上运行。为了统一规格,因为Java
            JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
            在1995年时,由Netscape公司的Brendan
            Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。
            [1]
            为了取得技术优势,微软推出了JScript,CEnvi推出ScriptEase,与JavaScript同样可在浏览器上运行。为了统一规格,因为Java
            JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
            在1995年时,由Netscape公司的Brendan
            Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。
            [1]
            为了取得技术优势,微软推出了JScript,CEnvi推出ScriptEase,与JavaScript同样可在浏览器上运行。为了统一规格,因为Java
            JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
            在1995年时,由Netscape公司的Brendan
            Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。
            [1]
            为了取得技术优势,微软推出了JScript,CEnvi推出ScriptEase,与JavaScript同样可在浏览器上运行。为了统一规格,因为JavaScript兼容于ECMA标准,因此也称为ECMAScript。
        </p>
    </div>
    <!-- 滚动条 -->
    <div id="rightBox">
        <!-- 可拖拽的小方块 -->
        <div id="drag"></div>
    </div>
</body>
</html>

js之滚动条效果-内容和滚动条关系_脚本语言