JavaScript How to Dynamically Move Div by Clicking and Dragging

前端 未结 6 1912
滥情空心
滥情空心 2020-12-23 14:06

Okay it would seem like it should be simple. I need to take an already existing div and move it according to mouse position within the window. I have searched everywhere and

6条回答
  •  青春惊慌失措
    2020-12-23 14:48

    You can use this one as a library. Works perfectly. I found it on github but it was getting stuck sometimes because the sharer put "mouseup" to element. I changed it to document and it fixed the problem. This is fixed version

    'use strict';
    
    /**
     * Makes an element draggable.
     *
     * @param {HTMLElement} element - The element.
     */
    function draggable(element) {
        var isMouseDown = false;
    
        // initial mouse X and Y for `mousedown`
        var mouseX;
        var mouseY;
    
        // element X and Y before and after move
        var elementX = 0;
        var elementY = 0;
    
        // mouse button down over the element
        element.addEventListener('mousedown', onMouseDown);
    
        /**
         * Listens to `mousedown` event.
         *
         * @param {Object} event - The event.
         */
        function onMouseDown(event) {
            mouseX = event.clientX;
            mouseY = event.clientY;
            isMouseDown = true;
        }
    
        // mouse button released
        document.addEventListener('mouseup', onMouseUp);
    
        /**
         * Listens to `mouseup` event.
         *
         * @param {Object} event - The event.
         */
        function onMouseUp(event) {
            isMouseDown = false;
            elementX = parseInt(element.style.left) || 0;
            elementY = parseInt(element.style.top) || 0;
        }
    
        // need to attach to the entire document
        // in order to take full width and height
        // this ensures the element keeps up with the mouse
        document.addEventListener('mousemove', onMouseMove);
    
        /**
         * Listens to `mousemove` event.
         *
         * @param {Object} event - The event.
         */
        function onMouseMove(event) {
            if (!isMouseDown) return;
            var deltaX = event.clientX - mouseX;
            var deltaY = event.clientY - mouseY;
            element.style.left = elementX + deltaX + 'px';
            element.style.top = elementY + deltaY + 'px';
        }
    }
    

提交回复
热议问题