如何使用原生Javascript写一个拖拽效果

需求

最近公司的一个小项目,需要对draw.io进行二次开发,然后嵌入到我们的系统里面,由于draw.io使用的老的javascript编写,要拓展只能使用原生js更改。
里面的有个小需求就是拖拽数据源放置到图表中,必须使用原生Js写。

以下是原生js写拖拽的demo


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
    <style>
        .thing {
            width: 100px;
            height: 2em;
            padding: 0.5em;
            margin: 0.5em;
            background: rgba(0,0,0,0.8);
            color: white;
            font-family: sans-serif;
        }
        .col {
            width: 130px;
            height: 450px;
            padding: 1em;
            border: 1px solid;
            border-radius: 5px;
            position: relative;
            float: left;
        }

    style>
head>
<body>

<div>

    <div class="col" id="col1">
        <div class="thing" draggable="true" ondragstart="drag(event)" id="thing1">设计div>
        <div class="thing" draggable="true" ondragstart="drag(event)" id="thing2">ITdiv>
        <div class="thing" draggable="true" ondragstart="drag(event)" id="thing3">营销div>
        <div class="thing" draggable="true" ondragstart="drag(event)" id="thing4">开发div>
    div>
    <div class="col" id="col2" ondrop="drop(event)" ondragover="allowDrop(event)">

    div>

div>



body>

<script>
    function allowDrop(ev) {
        ev.preventDefault();
    }

    function drag(ev) {
        // alert(ev.target.innerText)
        ev.dataTransfer.setData("text", ev.target.id);
    }

    function drop(ev) {
        ev.preventDefault();
        var data = ev.dataTransfer.getData("text");
        var origThing = document.getElementById(data);
        var newThing = origThing.cloneNode(true);
        ev.target.appendChild(newThing);
    }
script>
html>

你可能感兴趣的:(前端技术)