Перетащите не добавляя стиль в div - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь перетащить div, но стиль не идет с ним. Что я делаю не так?

<script>
    function _(id) {
        return document.getElementById(id);
    }

    function allowDrop(ev) {
        ev.preventDefault();
    }
    function drag_start(ev) {
        ev.dataTransfer.setData("elem_id", ev.target.id);
    }

    function drop(ev) {
        ev.preventDefault();
        var data = ev.dataTransfer.getData("elem_id");//returns external card id
        //var which_div = ev.target.id;//ev.target.id; //eg div2

        console.log("div: " + ev.target.id + " object dropping: " + ev.dataTransfer.getData("elem_id"))

        for (var i = 0; i < ev.target.children.length; i++) {
            console.log(ev.target.children[i].id + " is in the drop zone");
        }
        //ev.target.appendChild(_(ev.dataTransfer.getData("elem_id"))); //Uncaught TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.
        ev.target.append(_(ev.dataTransfer.getData("elem_id"))); //appends [Object] not the styling

    }
</script>

Обратите внимание только на [объект объекта] не правильный стиль карты (который находится справа) enter image description here

1 Ответ

0 голосов
/ 27 апреля 2018

Нет ничего плохого в вашем коде. Сценарий, приведенный ниже, работает в Firefox и Chrome, а также во фрагменте бегуна. Это твой код посередине.

<!DOCTYPE HTML>
<html>
<head>
    <style>
        .draggable {
            width: 140px;
            height: 140px;
            background: palevioletred;
            border-radius: 10px;
        }
        .draggable.is-dragging {
            opacity: 0.7;
        }
        #div1 {
            width: 200px;
            height: 200px;
            padding: 10px;
            border: 1px solid #aaaaaa;
        }
    </style>
    <script>
        function _(id) {
            return document.getElementById(id);
        }

        function allowDrop(ev) {
            ev.preventDefault();
        }
        function drag_start(ev) {
            ev.dataTransfer.setData("elem_id", ev.target.id);
        }

        function drop(ev) {
            ev.preventDefault();
            var data = ev.dataTransfer.getData("elem_id");//returns external card id
            //var which_div = ev.target.id;//ev.target.id; //eg div2

            console.log("div: " + ev.target.id + " object dropping: " + ev.dataTransfer.getData("elem_id"))

            for (var i = 0; i < ev.target.children.length; i++) {
                console.log(ev.target.children[i].id + " is in the drop zone");
            }
            //ev.target.appendChild(_(ev.dataTransfer.getData("elem_id"))); //Uncaught TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.
            ev.target.append(_(ev.dataTransfer.getData("elem_id"))); //appends [Object] not the styling

        }
    </script>
</head>
<body>
    <p>Drag the image into the rectangle:</p>
    <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
    <div id="mypurplerect" class="draggable" draggable="true" ondragstart="drag_start(event)"></div>
</body>
</html>

Что-то еще происходит?

...