可拖拽进度条(限制拖拽方向)

实现效果:

  代码如下:

html:

<div id='speed_wrapper'>
    <p id='steep_text'></p>
    <div id='speed_content'></div>
    <span id='speed_handle'>></span>
</div>

css:

/* 可拖拽进度条 */
#application_wrapper4 #speed_wrapper{
    margin:30px 0 0 0 ;
    position:relative;;
    height:20px;
    background:#bbb;
    cursor:pointer;
    border-radius:20px;
}
#speed_content{
    position:absolute;
    top:0;
    left:0;
    width:0%;
    height:100%;
    background:#337ab7;
    border-radius:20px;
}
#speed_handle{
    color:#fff;
    text-align:center;
    border: 1px solid #337ab7;
    position:absolute;
    top:-4px;
    left:0;
    width:28px;
    height:28px;
    line-height:28px;
    border-radius:50%;
    background:#41dbdc;
    cursor:pointer;
}
#steep_text{
    position: absolute;
    top: -20px;
    left: 0;
    text-align:center;
}

js:

/**
 * //可拖拽进度条 只能向大数值方向拖动 
 * @param a 整数 number类型
 * @returns
 */

function onMousemove(a){
    var initX = (a === undefined ? 0 : a);//初始化值 整数形式 0-100  目的为了限制不可以向左拖拽
    $('#steep_text').text(initX+ '%');
    $('#speed_handle').css('left',(initX*$('#speed_wrapper').width()/100)-14+'px');
    $('#speed_content').width((initX*$('#speed_wrapper').width()/100)+'px');
    
    $('#speed_wrapper').on('mousedown',function(e){
        var Px    =    e.pageX;//记录鼠标x轴位置
        var X    =    Px - $('#speed_wrapper').offset().left;//句柄位置以及内div宽度
    
        if(X/$(this).width() > 0.99){
            X = $(this).width();
        }
        var X_    =    parseInt((X/$(this).width())*100,10);
        if(initX > X_){
            return false;
        }
        $('#speed_handle').css('left',X-14+'px');
        $('#speed_content').width(X+'px');
        $('#steep_text').text(X_+ '%');
        initX = X_;
        return false;
    });
    
    $('#speed_handle').on('click',function(){
        return false;
    });
    $('#speed_content').on('mousedown',function(){
        return false;
    });
    $('#speed_wrapper').on('mouseup',function(){
        $(document).unbind('mousemove');
        return false;
    });
    $('#speed_handle').on('mousedown',function(e){
        $(document).on('mousemove',function(e){
            var Px    =    e.pageX;//记录鼠标x轴位置
            var X    =    Px - $('#speed_wrapper').offset().left;//句柄位置以及内div宽度
            if(X >= $('#speed_wrapper').width()){
                X = $('#speed_wrapper').width()
            };
            if(X < 0){
                X = 0;
            }
            $('#speed_handle').css('left',X-14+'px');
            $('#speed_content').width(X+'px');
            var X_    =    parseInt((X/$('#speed_wrapper').width())*100,10);
            if(X_ < initX){
                X_ = initX;
                $('#speed_handle').css('left',$('#speed_wrapper').width()*X_/100 - 14+'px');
                $('#speed_content').width($('#speed_wrapper').width()*X_/100+'px');
            }
            $('#steep_text').text(X_+ '%');
            initX = X_;
        });
        $(document).on('mouseup',function(e){
            $(document).unbind('mousemove');
            return false;
        })
        return false;
    });
};

代码比较简单,只是有些小细节需要注意 比如防止mousedown,mouseup事件冒泡,解除document事件绑定等,在此记下,提醒自己基础很重要!

posted @ 2018-03-20 17:33  孙大阳  阅读(2246)  评论(0编辑  收藏  举报