1. 程式人生 > >H5拖拽的簡單實現

H5拖拽的簡單實現

在H5中,如果想要拖拽某個元素,需要給它新增 draggable=“true” 屬性。圖片和超連結預設可以拖拽。

<body>
    <div class="div1" id="div1">
    	<!-- 被拖拽元素 -->
        <p id="p1" draggable="true">內容</p>
    </div>
    <div class="div2" id="div2">
		<!-- 目標元素 -->
	</div>
</body>

被拖拽元素事件

事件 描述
ondragstart 拖拽開始時呼叫
ondragleave 滑鼠離開被拖拽元素時呼叫
ondragend 拖拽結束時呼叫
ondrag 整個拖拽過程中都會呼叫

目標元素事件

事件 描述
ondragenter 當拖拽元素進入時呼叫
ondragover 當拖拽元素停留在目標元素上時呼叫
ondragleave 滑鼠離開目標元素時呼叫
ondrop 當在目標元素上鬆開滑鼠時呼叫

注意:

瀏覽器會預設阻止ondrop事件的執行,如果想執行ondrop事件,必須在ondragover事件中阻止瀏覽器的預設行為。

單項拖拽

	var p1 = document.querySelector("#p1"); // 獲取拖拽元素
    var div2 = document.querySelector("#div2"); // 獲取目標元素

    /**
     * 當被拖拽元素停留在目標元素上時
     * @param e
     */
    div2.ondragover = function (e) {
        e.preventDefault(); // 阻止瀏覽器預設行為
    };

    /**
     * 在目標元素上鬆開滑鼠時
     */
    div2.ondrop = function
() { // 在目標元素中新增被拖拽元素 div2.appendChild(p1); };

雙向拖拽

	var p1 = document.querySelector("#p1"); // 獲取拖拽元素
    // 獲取目標元素
    var div1 = document.querySelector("#div1");
    var div2 = document.querySelector("#div2");

    div1.ondragover = function (e) {
        e.preventDefault();
    };

    div1.ondrop = function () {
        div1.appendChild(p1);
    };

    /**
     * 當被拖拽元素停留在目標元素上時
     * @param e
     */
    div2.ondragover = function (e) {
        e.preventDefault(); // 阻止瀏覽器預設行為
    };

    /**
     * 在目標元素上鬆開滑鼠時
     */
    div2.ondrop = function () {
    //    在目標元素中新增被拖拽元素
        div2.appendChild(p1);
    };

適用範圍更廣的寫法

<script>

    /**
     * 當拖拽開始時觸發
     */
    document.ondragstart = function (e) {
        e.target.style.opacity = 0.5;
    //    儲存被拖拽元素的ID
        e.dataTransfer.setData("text", e.target.id);
    };

    /**
     * 當拖拽結束時觸發
     */
    document.ondragend = function (e) {
        e.target.style.opacity = 1;
    };

    /**
     * 當被拖拽元素停留在目標元素上時
     * @param e
     */
    document.ondragover = function (e) {
        e.preventDefault(); // 阻止瀏覽器預設行為
    };

    /**
     * 在目標元素上鬆開滑鼠時
     */
    document.ondrop = function (e) {
    //    獲取被拖拽元素的ID
        var id = e.dataTransfer.getData("text");

        let obj = document.getElementById(id);
        e.target.appendChild(obj);
    };
</script>