1. 程式人生 > >js實現拖拽拉伸DIV右側邊框

js實現拖拽拉伸DIV右側邊框

頁面程式碼

<body>
<div style="width: 100%; height: 100%;position: relative;">
    <div id="nav" style="background-color: red; width: 300px;height: 100%;display: inline-block;float:left">

    </div>

    <div id="cnt" style="background-color: blue; height: 100%;display: inline-block;float:left">

    </div>
</div>
</body>

js定義拉伸繫結事件函式:

// 右側寬度可調整
/** opt引數:
  * onmousemove: 為必須引數,需定義寬度控制元件寬度調整的程式碼
  * regionWidth: 滑鼠點選的響應寬度範圍(px),可不傳
  * onmouseup: 滑鼠up事件回撥程式碼
  * isCatch: 是否捕獲回撥函式的異常,預設true
  */
$.fn.onEastDrag = function (opt) {
    $(this).bind('mousedown', function (downEvent) {
        var isMoving = false;
        if (opt.isCatch == undefined || opt.isCatch == null) opt.isCatch = true;
        var _thisEl = $(this);//獲取到控制元件
        var elPosLeft = _thisEl.offset ().left;// 左側邊界位置
        var startPos = downEvent.pageX;// 滑鼠起始位置
        var startTime = new Date().getTime();
        var oriWidth = _thisEl.width();
        var _parentEl = _thisEl.parent();
        // 右側邊界位置
        var elPosRight = elPosLeft + oriWidth;
        var regionWidth = opt.regionWidth && opt.regionWidth > 0 ? opt.regionWidth : 6;// 點選響應區域,預設6px寬度
        if (elPosRight - regionWidth <= startPos && startPos <= elPosRight) {
            isMoving = true;  //如果在右側邊緣偏左6px內.允許移動
            _parentEl.append('<div id="move-mask-laver" style="position:fixed;width: 100%;height: 100%;z-index: 9999;opacity: 0;top: 0px;cursor: col-resize;"></div>');

            window.onmousemove = function (moveEvent) {
                //如果在範圍內
                if (isMoving) {
                    //獲取移動的寬度
                    var move = moveEvent.pageX - startPos;
                    var ev = {
                        oriWidth: oriWidth,// 控制元件最初的寬度
                        startTime: startTime,// mousedown時間
                        moveDistance: move,// 移動的距離(與最初位置相比)
                        downEvent: downEvent,// mousedown事件
                        moveEvent: moveEvent,// 當前move事件
                    }
                    try {
                        opt.onmousemove(_thisEl, ev);// 寬度設定由呼叫者決定
                    } catch (e) {
                        if (opt.isCatch) console.warn(e);
                        else throw e;
                    }
    
                }
                //最後返回false;
                return false;
            };
            //滑鼠鬆開清空所有事件
            window.onmouseup = function (upEvent) {
                window.onmousemove = null;
                window.onmouseup = null;
    			isMoving = false;
                _parentEl.find('#move-mask-laver').remove();
                if (opt.onmouseup) {
                    try {
                        opt.onmouseup(_thisEl, upEvent);
                    } catch (e) {
                        if (opt.isCatch) console.warn(e);
                        else throw e;
                    }
                }
            };
            return false;
        }
        return true;
    });
}

呼叫函式:

$(function(){
    autoCntWidth();
});


function autoCntWidth() {
	$('#cnt').width($('#cnt').parent().width() - $('#nav').width() - 5);
}



$('#nav').onEastDrag({
    onmousemove: function(el,event){
		el.width(event.oriWidth + event.moveDistance);
		autoCntWidth();
    },
    regionWidth: 10,
});