LoginSignup
3
4

More than 5 years have passed since last update.

ドラッグ&ドロップでマッピングを行うUI

Last updated at Posted at 2018-03-26

ドラッグ&ドロップ機能を使って紐づけを行う際のUIを作ってみました。
ドラッグで<input type="hidden" name="mapping[]" value="XXXXX">formタグ内に配置しているだけです。

See the Pen D&D MAPPING UI by horikeso (@horikeso) on CodePen.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>D&D</title>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<style>
/* このページではテキスト等のドラッグを禁止する */
* {
  user-select: none;
}
.d-flex td {
  min-height: calc(.75rem * 2 + 20px);
}
</style>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<script>
function dragStart(event){
    event.dataTransfer.setData("text", event.target.outerHTML);
}

function dragOver(event){
    event.preventDefault();
}

function drop(event){
    var html = event.dataTransfer.getData("text");
    event.currentTarget.innerHTML = html;
    event.preventDefault();
}
</script>
</head>
<body>
<div>
    <div class="row">
        <div class="col-2"></div>
        <div class="col-1">
            <table class="table table-striped table-bordered">
                <tr>
                    <td>
                        <div style="background-color: red; height: 20px; width: 20px; cursor: pointer;" draggable="true" ondragstart="dragStart(event)">
                            <input type="hidden" name="mapping[]" value="red">
                        </div>
                    </td>
                </tr>
                <tr>
                    <td>
                        <div style="background-color: blue; height: 20px; width: 20px; cursor: pointer;" draggable="true" ondragstart="dragStart(event)">
                            <input type="hidden" name="mapping[]" value="blue">
                        </div>
                    </td>
                </tr>
                <tr>
                    <td>
                        <div style="background-color: green; height: 20px; width: 20px; cursor: pointer;" draggable="true" ondragstart="dragStart(event)">
                            <input type="hidden" name="mapping[]" value="green">
                        </div>
                    </td>
                </tr>
            </table>
        </div>
        <div class="col">
            <form method="POST">
                <table class="table table-striped table-bordered">
                    <tr class="d-flex">
                        <th class="col-3"></th>
                        <th class="col-9">色設定</td>
                    </tr>
                    <tr class="d-flex">
                        <td class="col-3">パーツA</td>
                        <td class="col-9" ondragover="dragOver(event)" ondrop="drop(event)"></td>
                    </tr>
                    <tr class="d-flex">
                        <td class="col-3">パーツB</td>
                        <td class="col-9" ondragover="dragOver(event)" ondrop="drop(event)"></td>
                    </tr>
                    <tr class="d-flex">
                        <td class="col-3">パーツC</td>
                        <td class="col-9" ondragover="dragOver(event)" ondrop="drop(event)"></td>
                    </tr>
                </table>
                <div class="col text-center">
                    <button type="submit" class="btn btn-primary">Submit</button>
                </div>
            </form>
        </div>
        <div class="col-2"></div>
    </div>
</div>
</body>
</html>

参考

ドラッグ&ドロップ

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4