• 垂直拖拽滚动条


    【教学视频】网页特效_垂直拖拽滚动条案例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>垂直拖动条==有bug:来回上下多次,发现拉倒底部或拉倒顶部时 文字不能完全显示</title>
        <style>
            .box {
                width: 280px;
                height: 500px;
                background-color: pink;
                padding-right: 20px;
                overflow: hidden;
                position: relative;
            }
            .box .content {
                padding-right: 20px;
                position: absolute;
                top: 0;
                right: 0;
            }
            .box .bar {
                width: 20px;
                height: 100%;
                background-color: #ccc;
                position: absolute;
                top: 0;
                right: 0;
            }
            .bar .mask {
                width: 100%;
                height: 40px;
                border-radius: 10px 10px 10px 10px;
                background-color: #a83c3a;
                cursor: pointer;
                position: absolute;
                top: 0;
                left: 0;
            }
        </style>
    </head>
    <body>
    <div class="box" id="box">
        <div class="content">
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
            内容内容内容内容内容内容内容内容内容内容内容内容
        </div>
        <div class="bar">
            <div class="mask"></div>
        </div>
    </div>
    </body>
    </html>
    <script>
        var box = document.getElementById("box");
        var content = box.children[0];
        var mask = box.children[1].children[0];
    
        /**
         * 垂直拖动
         * @target 受bar控制而移动的目标
         * @bar 滑动的bar
         */
        function veDrag(target,bar) {
    
            // 算出滚动条的高度,内容越多滚动条越短 barh/boxH = boxH/conentH;即barH = 容器的高度*容器的高度/内容的高度
            var barHeight = target.offsetParent.offsetHeight/target.offsetHeight*target.offsetParent.offsetHeight;
            bar.style.height = barHeight + "px";
    
            bar.onmousedown = function(event) {
                var event = event || window.event;
                // 按在bar身上某处的点距离该bar顶端距离 + box盒子距离浏览器距离
                var val = event.clientY - this.offsetTop;
                var that = this;
                document.onmousemove = function() {
                    var event = event || window.event;
                    // bar移动的距离
                    var barY = event.clientY - val;
                    //目标盒子移动的距离。     (boxH-barH)*比例因子 = contentH-BoxH   【比例因子:bar走一步的像素相当于content走多少像素】
                    var targetTop = (target.offsetHeight-target.offsetParent.offsetHeight)/(target.offsetParent.offsetHeight-that.offsetHeight)*barY;
    
                    if(barY < 0 || targetTop < 0){
                        barY = 0;
                        target.style.top = 0; //或判断并去除标题中所说的bug
                    }else if(barY > target.offsetParent.offsetHeight-that.offsetHeight || targetTop > (target.offsetHeight-target.offsetParent.offsetHeight)/(target.offsetParent.offsetHeight-that.offsetHeight)*barY) {
                        barY = target.offsetParent.offsetHeight-that.offsetHeight;
                        //或判断并去除标题中所说的bug
                        target.style.top = -(target.offsetHeight-target.offsetParent.offsetHeight)/(target.offsetParent.offsetHeight-that.offsetHeight)*barY + "px";
                    }else {
                        target.style.top = -targetTop + "px";
                    }
                    that.style.top = barY + "px";
    
                    // 清除选择拖动,不写这句话,会出现如果滑的快,弹起后依旧跟着鼠标走
                    window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();   // 防止拖动滑块的时候, 选中文字
                }
    
                document.onmouseup = function() {
                    document.onmousemove = null;
                }
            }
        }
    
        veDrag(content,mask);
    
    </script>

     

    前进时,请别遗忘了身后的脚印。
  • 相关阅读:
    iOS6和iOS7代码的适配(3)——坐标适配
    iOS6和iOS7代码的适配(2)——status bar
    iOS6和iOS7代码的适配(1)
    深入Blocks分析
    文字溢出加省略号
    点击图表每一部分触发某事件
    图表添加红线
    比较月份是否存在封装数据
    云上示范区项目总结
    页面之间通过地址栏传参
  • 原文地址:https://www.cnblogs.com/liudaihuablogs/p/9458801.html
Copyright © 2020-2023  润新知