javascript——限制范围的拖拽

CSS部分:

#div1 {width: 100px; height: 100px; background: red; position: absolute;}
#img1 { position: absolute;}

HTML部分:

<div id="div1"></div>
<img src="img/1.jpg" id="img1" />

JS部分:

window.onload = function(){

    // 获取相关元素
    var oDiv = document.getElementById('div1');
    var oImg = document.getElementById('img1');

    // 函数调用
    drag(oDiv);
    drag(oImg);

    // drag函数封装
    function drag(obj){

        // 拖拽第一步:鼠标按下时触发
        obj.onmousedown = function(ev){

            // 获取事件对象
            var ev = ev || event;

            // 获取鼠标按下时的坐标位置
            var disX = ev.clientX - this.offsetLeft;
            var disY = ev.clientY - this.offsetTop;

            // 判断获取捕获
            if(obj.setCapture){
                obj.setCapture();
            }

            // 拖拽第二步:鼠标移动时触发
            document.onmousemove = function(ev){

                // 获取事件对象
                var ev = ev || event;

                // 获取当前对象距离X/Y轴的距离
                var L = ev.clientX - disX;
                var T = ev.clientY - disY;

                // 判断是否超出左边界
                if(L < 0 ){
                    L = 0;
                }else if( L > document.documentElement.clientWidth - obj.offsetWidth){
                    L = document.documentElement.clientWidth - obj.offsetWidth;
                }

                // 判断是否超出上边界
                if(T < 0){
                    T = 0;
                }else if( T > document.documentElement.clientHeight - obj.offsetHeight){
                    T = document.documentElement.clientHeight - obj.offsetHeight;
                }

                // 然后获取当前对象距离左边、上边的距离
                obj.style.left = L + 'px';
                obj.style.top = T + 'px';
            };

            // 拖拽第三步:鼠标释放时触发
            document.onmouseup = function(){
                
                document.onmousemove = document.onmouseup = null;

                // 判断释放捕获
                if(obj.releaseCapture){
                    obj.releaseCapture();
                }
            };

            // 阻止默认事件
            return false;
        };
    };
};

修改if条件的L/T小于号后面的数值可以使它有种磁性吸附的感觉。

posted @ 2015-03-31 14:19  波克比520  阅读(902)  评论(0编辑  收藏  举报