JavaScript

ドラッグ&ドロップで2つのdivタグ要素エリア間を移動させる方法【JavaScriptプラグイン未使用】

JavaScriptプラグインを使わず、2つのdivタグエリア間で要素をドラッグ&ドロップするシンプルな方法を紹介します。
本記事では、HTML、CSS、JavaScriptを組み合わせ、ユーザーが自由に要素を移動できるインターフェースを作成します。基本から丁寧に説明します。

ドラッグ&ドロップとは?

ドラッグ&ドロップは、マウスを使ってある要素をつかみ、別の場所に移動する機能です。Webアプリケーションで頻繁に使われ、ユーザーが直感的に操作できるUIの実装に役立ちます。例えば、ファイルのアップロード、カレンダーの予定の移動、タスク管理アプリのカード整理など、多くの場面で利用されています。

本記事のサンプルでは、divエリア間でテキスト要素を自由にドラッグ&ドロップするUIを作成します。

CSSによるスタイル設定

まずは、各要素の見た目を整えるためのCSSコードを確認しましょう。必要に応じて、このCSSを調整して見た目をカスタマイズできます。

<style type="text/css">
body{
  font-family:Verdana,"Hiragino Kaku Gothic Pro","ヒラギノ角ゴ Pro W6",Osaka,"MS Pゴシック",Arial,sans-serif;
  padding: 0;
  margin: 0;
  overflow-x: hidden;
  line-height: 1.8em;
  text-align: center;
}
h1{
  font-size:26px;
  text-align:center;
  font-weight:normal;
  padding:10px 0 20px 0;
  line-height: 1.2em;
}

#wrap{
  width: 524px;
  margin: 0 auto;
}
#dpsmpla,
#dpsmplb {
    float: left;
    width: 240px;
    height:200px;
    padding: 10px;
    border:dotted 1px #000000;
}
#dpsmpla {
    background-color: #DBDBEA;
}
#dpsmplb {
    background-color: #ffffff;
}
#dgsmpla,
#dgsmplb,
#dgsmplc {
    width: 200px;
    margin: 18px auto;
    padding: 6px;
    text-align: center;
    font-weight: bold;
}
#dgsmpla {
    background-color: #0040FF;
}
#dgsmplb {
    background-color: #FFFF00;
}
#dgsmplc {
    background-color: #FF2626;
}
</style>

このCSSでは、ドラッグ元エリア、ドロップ先エリア、各テキスト要素のスタイルを設定しています。各色やレイアウトを変更することで、ユーザーのデザインニーズに合わせてカスタマイズできます。

HTMLで構成するドラッグ&ドロップUI

HTMLの構造は、ユーザーが操作するdivエリアを定義し、それぞれのエリアにテキスト要素を配置するものです。

<h1>左のグレーエリアにあるサンプルa,b,cのタグ要素を、右の白エリアにドラッグ&ドロップで移動できます</h1>
<br>

<div id="wrap">
<div id="dpsmpla" ondrop="smpldrop( event, this );" ondragover="allowdrop( event );">
    <p id="dgsmpla" draggable="true" ondragstart="smpldrag( event );">サンプルa</p>
    <p id="dgsmplb" draggable="true" ondragstart="smpldrag( event );">サンプルb</p>
    <p id="dgsmplc" draggable="true" ondragstart="smpldrag( event );">サンプルc</p>
</div>
<div id="dpsmplb" ondrop="smpldrop( event, this );" ondragover="allowdrop( event );"></div>
</div>

このHTMLコードは、2つのdivエリア間でテキスト要素を自由に移動できるUIを提供します。各テキスト要素にはdraggable=”true”属性があり、ドラッグ操作を可能にしています。

JavaScriptによるドラッグ&ドロップ処理

次に、ドラッグ&ドロップの機能を実現するためのJavaScriptコードを紹介します。以下のスクリプトを使って、要素のドラッグとドロップを制御します。

<script type="text/javascript">
function smpldrag( $event ) {
    $event.dataTransfer.setData( "Text", $event.target.id );
}
function smpldrop( $event, $this ) {
    $event.preventDefault();
    var $data = $event.dataTransfer.getData( "Text" );
    $this.appendChild( document.getElementById( $data ) );
}
function allowdrop( $event ) {
    $event.preventDefault();
}
</script>

このJavaScriptでは、dataTransferオブジェクトを使って、ドラッグされた要素の情報を一時的に保存し、ドロップ先に移動させます。allowdrop関数を使うことで、ドロップ操作が許可されるようにしています。

【dataTransfer】ドラッグ&ドロップで2つのdivタグ要素エリア間を移動できるデページ

以下のリンクから、実際に動作するデモページにアクセスできます。さまざまな要素をドラッグ&ドロップで操作し、インターフェースの使い勝手を確認してください。

【dataTransfer】ドラッグ&ドロップで2つのdivタグ要素エリア間を移動できるデモ

まとめ

本記事では、JavaScriptプラグインを使わずに、シンプルなドラッグ&ドロップ機能を実装する方法を紹介しました。これにより、2つのdivタグエリア間で要素を自由に移動できるインターフェースが作成できます。この技術を応用することで、より高度なUIも実現可能です。

  • 応用例:タスク管理ツール、ファイル整理システム、インタラクティブな学習アプリなど。
  • ポイント:コードはシンプルですが、UIの向上に役立つ非常に効果的な機能です。

今回のサンプルを基に、自分のプロジェクトに応用してみてください!

 
※流用される場合は自己責任でお願いします。
 デモページheadタグ内のGoogleアナリティクスタグは流用しないで下さい。