欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

拖动效果实现

程序员文章站 2022-04-28 11:30:44
...

1.利用js实现

//获取当前鼠标在页面上的坐标
function getPointerPositionInDocument(eventObject) {
    var x = eventObject.pageX;
    var y = eventObject.pageY;
    return {
        'x': x,
        'y': y
    };
}
//获取元素在页面上的位置
function getDimensions(element){
    return {
        'left':element.offsetLeft,
        'top':element.offsetTop,
        'width':element.offsetWidth,
        'height':element.offsetHeight
    };
}

2.利用HTML5+JS

新增属性:draggable

新增事件:ondragstart(拖动开始) ondrag(拖动中) ondragend(拖动结束)

ondragenter(进入投放去区) ondragover(投放去移动) ondragleave(离开投放区) ondrop(投放区投放)

HTML部分:

<div id="dropBlock"></div>
<div id="moveBlock" draggable="true"></div>

JS部分:

(function(){
        var dropBlock = document.getElementById("dropBlock");
        var moveBlock = document.getElementById("moveBlock");
        var moveBlockInitPos = getDimensions(moveBlock);
        var startPoint;
        var moveBlockPos;
        moveBlock.ondragstart = function(){
            var e = getEventObject(e);
            //获取鼠标点击时的坐标
            startPoint = getPointerPositionInDocument(e)
            //获取移动块的位置
            moveBlockPos = getDimensions(moveBlock);
        }
//        moveBlock.ondrag = function(){
//            console.log("拖拽中");
//        }
//        moveBlock.ondragend = function(){
//            console.log("拖拽结束");
//        }
//        dropBlock.ondragenter = function(){
//            console.log("进入投放区");
//        }
        dropBlock.ondragover = function(e){
            console.log("投放区移动");
            //阻止默认事件发生
            e.preventDefault();
        }
//        dropBlock.ondragleave = function(){
//            console.log("离开投放区");
//        }
        dropBlock.ondrop = function(e){
            var e = getEventObject(e);
            var newPoint = getPointerPositionInDocument(e);
            var distance = getPointerDistance(startPoint,newPoint);
            moveBlock.style.left = (moveBlockPos.left + distance.x)+"px";
            moveBlock.style.top = (moveBlockPos.top + distance.y)+"px";
            //阻止事件冒泡
            e.stopPropagation();
        }
        document.ondragover = function(e){
            var e = getEventObject(e);
            //阻止默认事件发生
            e.preventDefault();
        }
        document.ondrop = function(e){
            var e = getEventObject(e);
            console.log("进入文档投放区");

            moveBlock.style.left = moveBlockInitPos.left+"px";
            moveBlock.style.top = moveBlockInitPos.top +"px";
        }
    }())