HTML5は、ドラッグアンドドロップ効果を実現するために非常に便利です。さまざまなドラッグアンドドロップ機能を実現します。
特定の要素をドラッグアンドドロップする場合は、要素のドラッグ可能なプロパティを誤っている場合、ドラッグアンドドロップは許可されません。 IMG要素と要素は、これらの2つの要素をドラッグアンドドロップしたくない場合は、属性をfalseに設定することができます。
ドラッグアンドドロップドラッグアンドドロップインシデントは、さまざまな要素によって生成されます。要素がドラッグされて落とされ、最終的に彼は多くの要素に配置したい要素に到達する可能性があります。ここでは、ドラッグとドロップの要素とプロセスの要素を一時的に参照し、到達した要素はターゲットオブジェクトと呼ばれます。オブジェクトごとに異なるドラッグアンドドロップイベントがあります。
ソースオブジェクト:
プロセスオブジェクト:
ターゲットオブジェクト:
<div id = source draggable = true> a要素</div> <div id = process> b要素</div> <div id =ターゲット> c要素</div> <script> var source = document.getElementbyid '( 'source')、//要素proces = document.getElementbyid( 'process')、// b要素ターゲット= gelementbyid( 'ターゲット'); dragstartイベントはA要素によって生成され、console.log( '要素がドラッグされ始めます')要素ログ( '要素は要素を入力し始めます') 、false)target.addeventlistener( 'drop'、function(ev){//ドロップイベントはconsole.logによって生成されます( 'c element to c要素'); );} </script>DatAtransferオブジェクト
データ送信オブジェクトのデータアト率をすべてのドラッグおよびドロップイベントで提供して、ソースオブジェクトとターゲットオブジェクト間でデータを渡すことができます。次に、このオブジェクトのメソッドと属性を知り、データがどのように送信されるかを理解してください。
setData()このメソッドは、DatAtransferオブジェクトに保存されます。 2つのパラメーターを受信します。最初のパラメーターは、データの種類を保存する文字列を示し、次のことをサポートします。
2番目のパラメーターは、保存するデータです。例えば:
event.datatransfer.setdata( 'text/plain'、 'hello world');getData()
このメソッドは、DatAtransferオブジェクトからデータを読み取ります。パラメーターは、SetDataで指定されたデータのタイプです。例えば:
event.datatransfer.getData( 'Text/Plain');ClearData()
このメソッドは、DatAtransferオブジェクトに保存されているデータを削除します。データ型のパラメーターはオプションです。パラメーターが空の場合、すべてのタイプのデータをクリアします。例えば:
event.datatransfer.cleardata();setDragImage()
この方法は、IMG要素を使用してアイコンをドラッグアンドドロップするように設定されています。 3つのパラメーターを受信し、1つ目はアイコン要素、2つ目はマウスポインターからのアイコン要素のx軸変位、3つ目はマウスポインターからのアイコン要素のy軸変位です。例えば:
var source.getElementbyid( 'source')、document.createelement( 'img'); 10、-10)}、false)エフェクトアラウとドロップフィクトのプロパティ
これらの2つの属性を組み合わせて、ドラッグアンドドロップの視覚効果を設定します。
IEがDataTransferオブジェクトをサポートしていないことは注目に値します。はい、どのIEバージョンがサポートされていても。
ドラッグアンドドロップソートを実装しますドラッグアンドドロップAPIの使用は、すでに上記に精通しています。最初にアイデアを見てみましょう:
メインコードは次のとおりです。
var source = document.queryselectiverall('。list ')、dragelement = null; ){dragelement = this;}、false); addeventlistener( 'dragenter'、function(ev){if(dragelement!= this){this.parentNodefore(dragelemememememermeremeremeremer、this);}}、false) [i] .addeventlistener( 'dragleave'、function(ev){if(dragelement!= this){if(this == this.parentnode.lastelementchildchild || this.parentnod e.lastchild){this.parentnode.appendchild(dragelementement );}、false)};
フルコードアドレス:ドラッグデモ
互換性があるこれは主にIEで互換性がありますが、少なくともIE10ではドラッグしてソートすることができます。
そして、私の簡単なテストでは、IEで要素が設定されていない場合、dragleaveイベントがトリガーされないことがわかります。
より重要なポイントは、iOSとAndroidであり、これは完全に互換性がありません。幸いなことに、モバイルエンドで完全に互換性のあるプラグインがあります。
プラグインアドレス:iOS-html5-drag-drop-shim
元のコードにプラグインを導入するだけで、モバイル端末にドラッグする必要があります。
<Script> var IOSDRAGDROPSHIM = {ENABLENERLAVE:true} </script> <scrip src = vendor/ios-drop.js> </script>
上記は、この記事のすべての内容です。