html5-drag和drop拖拽

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        ul {
            width: 1000px;
            height: 200px;
            background: palegreen;
        }

        main {
            border: 2px solid #333;
            height: 300px;
            width: 1200px;
        }
    </style>
</head>

<body>

    <ul id="oriDiv" draggable="true">
        <li>111111</li>
        <li>222222</li>
        <li>333333</li>
        <li>444444</li>
        <li>555555</li>
    </ul>

    <main id="main"></main>
    <script>
        oriDiv.ondragstart = function () {
            console.log('drag start')
        }

        main.ondragenter = function () {
            console.log('drag enter')
        }

        main.ondragleave = function () {
            console.log('drag leave')
        }


        main.ondragover = function (e) {
            e.preventDefault()
            console.log('drag over')
        }

        // @WARN:使用drop时注意,需要首先将drop事件的前一个事件dragover的浏览器默认操作禁止,
        // 才可以触发drop事件。 
        main.ondrop = function () {
            console.log('drop ...')
        }

        /**
         * source
         */
        oriDiv.ondragstart = (e) => {
            console.log('clearing data ...')
            e.dataTransfer.cleanData()
            console.log('setting data ...')
            e.dataTransfer.setData('name', JSON.stringify({ name: 'xiaoming' }))
        }

        /**
         * target
         */
        main.ondragover = (e) => {
            e.preventDefault()
        }

        main.ondrop = (e) => {
            console.log('getting data ...')
            data = JSON.parse(e.dataTransfer.getData('name'))
            console.log(data.name)
        }

        /**
         * Example code
         */
        const img = document.querySelectorAll('img')
        const des = document.querySelectorAll('div')

        for (let i = 0; i < des.length; i++) {
            img[i].ondragstart = (e) => {
                e.dataTransfer.setData('id', e.target.id)
            }
            des[i].ondragover = (e) => {
                e.preventDefault()
            }

            des[i].ondrop = (e) => {
                const id = e.dataTransfer.getData('id')
                this.appendChild(document.getElementById(id))
            }
        }
    </script>
</body>

</html>
相关推荐
苏三的开发日记12 分钟前
npm EPERM:无法写入 `.npmrc` 的排查与解决
前端
YWL13 分钟前
OpenLayers地图分享:URL参数同步+分享链接生成,让用户一键分享地图视角
前端·javascript·vue·openlayers
枫叶梨花36 分钟前
Electrobun透明窗口在Windows上的输入穿透排查
前端·electron·bun
云上工程笔记2 小时前
AstraFlow + React/Vite:如何用自然语言开发并部署一个 AI 咖啡网站原型
前端·人工智能·react.js
Q一件事2 小时前
ArcGIS中TypeError: can‘t multiply sequence by non-int of type ‘str‘错误
前端·javascript·arcgis
美狐美颜SDK开放平台3 小时前
从视频处理到实时渲染:直播APP中视频美颜SDK的关键技术解析
前端·人工智能·架构·实时互动·音视频·视频美颜sdk
yume_sibai3 小时前
ES6 核心知识点完全总结(变量 + 箭头函数 + 解构 + Promise + 模块化)
前端·ecmascript·es6
Moment3 小时前
为什么市面上的 coding agent 大多数都基于Nodejs?
前端·后端·面试
吃瓜的猹3 小时前
Gemini 3.8 Flash 是真的站起来了,一起来看看我到底做了什么吧~
前端
光影少年3 小时前
React18 对RN 的影响
android·前端·react.js·ios·前端框架