• 进度条(可拖动,可定义)


    在工作中,有一个进度条的效果,左边是一个input,两者存在着密不可分的联系,引用的插件却出现了点小BUG,一怒之下自己写了一个。

    HTML

        <div>
            <input type="text" id="input" value="" placeholder="0" autocomplete="off">%
            <div id="tiao">
                <div id="yuan"></div>
                <div id="jindu"></div>
            </div>
        </div>

    CSS

        html,body{
                height: 100%;
            }
            body{
                margin: 0;
            }
            body>div{
                padding-top: 60px;
                margin-left: 60px;
            }
            #tiao{
                display: inline-block;
                width: 200px;
                height: 4px;
                background: #ddd;
                border-radius: 3px;
                position: relative;
                margin-left: 50px;
            }
            input{
                border: 1px solid #ddd;
                width: 100px;
                text-align: center;
                vertical-align: top;
            }
            #yuan{
                display: inline-block;
                width: 12px;
                height: 12px;
                border-radius: 50% 50%;
                background: #177ad8;
                position: absolute;
                margin-top: -4px;
                cursor: pointer;
                box-shadow: 0px 0px 3px #177ad8;
            }
            #jindu{
                width: 0px;
                height: 4px;
                background-color: #177ad8;
                border-radius: 3px;
            }

    JS

        var scale =function(input,yuan,jindu,tiao){
            this.input =document.getElementById(input);
            this.yuan =document.getElementById(yuan);
            this.jindu=document.getElementById(jindu);
            this.tiao=document.getElementById(tiao);
            this.tiaoW =this.tiao.offsetWidth;
            this.init()
        }
        scale.prototype ={
            init: function(){
                var isfalse =false, 
                    f = this,
                    m = Math,
                    b = document.body,
                    minValue =0,
                    maxValue =100;
                
                f.yuan.onmousedown =function(e){
                    isfalse =true;
                    var X =e.clientX;
                    var offleft =this.offsetLeft;
                    var max = f.tiao.offsetWidth - this.offsetWidth;
    
                    b.onmousemove =function(e){
                        if (isfalse == false){
                            return;
                        }
                        var changeX= e.clientX;
                        var moveX =m.min(max,m.max(-2,offleft+(changeX-X)));
                        f.input.value =m.round(m.max(0,moveX / max) * 100);
                        f.yuan.style.marginLeft =m.max(0, moveX) +"px";
                        f.jindu.style.width =moveX +"px";
                    }
                }
                b.onmouseup =function(){
                    isfalse =false;
                }
    
                f.input.onblur =function(){
                    var theV =this.value*1;
                    if(theV >maxValue || theV <minValue){
                        alert("输入的数值不正确");
                        f.input.value ="";
                        f.yuan.style.marginLeft ="0px";
                        f.jindu.style.width ="0px";
                        return;
                    }
                    var xxx =theV/100*f.tiaoW;
                    f.yuan.style.marginLeft =xxx +"px";
                    f.jindu.style.width =xxx +"px";
                }
            }
        }
    
        new scale("input","yuan","jindu","tiao");

    封装了一下,感觉更麻烦了。。。每次封装都有这样的感觉,毕竟小菜鸟一枚,若是有更优化的方法望看到的园友指正。。。

    关于数学,关于逻辑,都是我的弱势,思考起来常常脑海一片混乱,所以自己在编写的时候也会加上注释,放一波代码

        var input =document.getElementById("input");
        var yuan =document.getElementById("yuan");
        var jindu =document.getElementById("jindu");
        var tiao =document.getElementById("tiao");
        var tiaoW =tiao.offsetWidth;
    
        function schedule(){
    
            var isfalse =false; //控制滑动
    
            yuan.onmousedown =function(e){
                isfalse =true;
    
                var X =e.clientX; //获取当前元素相对于窗口的X左边
                
                var offleft =this.offsetLeft; //当前元素相对于父元素的左边距
                
                var max = tiao.offsetWidth - this.offsetWidth; //宽度的差值
                
                document.body.onmousemove=function(e){
                    if (isfalse == false){
                        return;
                    }
                    var changeX= e.clientX; //在移动的时候获取X坐标
                    
                    var moveX =Math.min(max,Math.max(-2,offleft+(changeX-X))); //超过总宽度取最大宽
                    input.value =Math.round(Math.max(0,moveX / max) * 100);
                    yuan.style.marginLeft =Math.max(0, moveX) +"px";
                    jindu.style.width =moveX +"px";
                }
            }
            document.body.onmouseup =function(){
                isfalse =false; 
            }
    
            var minValue =0;
            var maxValue =100;
            input.onblur =function(){
                var theV =this.value*1;
                if(theV >maxValue || theV <minValue){
                    alert("输入的数值不正确");
                    input.value ="";
                    jindu.style.width ="0px";
                    yuan.style.marginLeft ="0px";
                    return;
                }
                var xxx =theV/100*tiaoW;
                yuan.style.marginLeft =xxx +"px";
                jindu.style.width =xxx +"px";
            }
        }
        schedule();

    这个看起来易懂点。。。  点击这里看效果

  • 相关阅读:
    关于selenium中的三种等待方式与EC模块的知识
    re.findall用法
    链表及链表的逆置
    通过两个队列实现一个栈
    flask与Django框架的区别
    http协议与https协议
    Maven系列教材 (四)- 通过命令行创建Maven风格的Java项目
    Maven系列教材 (三)- 仓库概念,下载与配置
    Maven系列教材 (二)- 下载与配置Maven
    Maven系列教材 (一)- 什么是Maven
  • 原文地址:https://www.cnblogs.com/wyhlightstar/p/6655920.html
Copyright © 2020-2023  润新知