DataTransferオブジェクトのいくつかのまとめ
4886 ワード
すべての要素はターゲットイベントの防止をサポートしていますが、これらの要素はデフォルトではリリースが許可されていません.ドラッグした場合、ユーザーがどのように操作しても、DRopイベントをトリガしません.ただし、任意の要素を有効な配置先に変更することができます.方法は、dropenterとdroppoverのデフォルトの行為を書き換えることです.
テキストボックスの内容を最初のdivに移動するようにします.
第一歩:まず最初のdivを配置できる要素に変えます.つまり、dragenter/dragoverを書き直します.
注意:
(1)dropEffect属性を使用するには、dragenterイベントハンドラにおいて、配置先を設定する必要があります.(2)dropEffectはeffect Allowed属性を組み合わせるだけで使えます.effect Allowedはドラッグが可能な要素を表します.そのようなdropEffect、そしてeffect Allowedはモバイル要素のdragstartに設定されています.(3)dropEffectはカーソルが異なる記号として表示されるだけですが、カーソルが示す動作をどのように実現するかはコードの作成者によって異なります.つまり、あなたが介入しない限り、自動的に移動したり、コピーしたり、リンクを開けたりしません.つまり、ビューアはカーソルのスタイルを変えるしかありません.
(4)テキストボックスをドラッグすると、ブラウザがsetDataを呼び出してテキストをtext形式でdata Transferに保存し、リンクや画像をドラッグするとURLを保存し、dropイベントで読み込むことができます.
でも、私達はやはり手動でsetDataを呼び出して、同じ操作を完成することを提案します.
(5)dataTransferオブジェクトは、各MIMEタイプに一つの値を保存することができますが、data Transferオブジェクトに保存されているデータはdropイベントプログラムでしか読み取れません.読み込まれていない場合は、data Transferオブジェクトは破棄され、データも失われます.
首先我们需要把元素droptarget设置为可以放置的元素,也就是默认重写他的dragenter/dragover
Hello
// dragover/dragenter
target.οndragοver=function(event)
{
event.preventDefault();
};
target.οndragenter=function(event)
{
event.preventDefault();
};
は次に、要素が置かれているときにトリガされるイベントを示すdropイベントを設定する必要がある.// ondrop , !
target.οndrοp=function(event)
{
// FF3.5+ , URL,
// URL, URL, FF , !
event.preventDefault();
//event.target
event.target.innerHTML=event.dataTransfer.getData('Text');
};
は、移動が必要なデータを格納するために、DRAGstartイベントを移動要素に設定する.// dragstart!
document.getElementById("srcE").οndragstart=function(event)
{
event.dataTransfer.setData("Text"," !");
};
この時にsrceを移動すると、droptargetから解放され、内部テキストが「私は私のデータを転送します」になっていることが分かります.テキストボックスの内容を最初のdivに移動するようにします.
第一歩:まず最初のdivを配置できる要素に変えます.つまり、dragenter/dragoverを書き直します.
// moveTarget dragenter dragover div
document.getElementById("moveTarget").οndragenter=function(e)
{
e.dataTransfer.dropEffect="move";// dragenter !
e.preventDefault();
};
document.getElementById("moveTarget").οndragοver=function(e)
{
e.preventDefault();
};
第二ステップ:移動が必要な要素のためにdragstartイベントを設定する.document.getElementById("moveSrc").οndragstart=function(e)
{
e.dataTransfer.effectAllowed="move";// dragstart effectStart
};
第3ステップ:divのdropイベントを書き換えます.// div drop ,
document.getElementById("moveTarget").οndrοp=function(event)
{
this.innerHTML=document.getElementById("moveSrc").value;
// drop , URL
event.preventDefault();
};
この時もテキストボックスの要素内容の移動が可能です.注意:
(1)dropEffect属性を使用するには、dragenterイベントハンドラにおいて、配置先を設定する必要があります.(2)dropEffectはeffect Allowed属性を組み合わせるだけで使えます.effect Allowedはドラッグが可能な要素を表します.そのようなdropEffect、そしてeffect Allowedはモバイル要素のdragstartに設定されています.(3)dropEffectはカーソルが異なる記号として表示されるだけですが、カーソルが示す動作をどのように実現するかはコードの作成者によって異なります.つまり、あなたが介入しない限り、自動的に移動したり、コピーしたり、リンクを開けたりしません.つまり、ビューアはカーソルのスタイルを変えるしかありません.
(4)テキストボックスをドラッグすると、ブラウザがsetDataを呼び出してテキストをtext形式でdata Transferに保存し、リンクや画像をドラッグするとURLを保存し、dropイベントで読み込むことができます.
// : setData dataTransfer !
document.getElementById("moveSrc").οndragstart=function(e)
{
e.dataTransfer.effectAllowed="copy";
};
// moveTarget dragenter dragover div
document.getElementById("moveTarget").οndragenter=function(e)
{
e.dataTransfer.dropEffect="copy";
e.preventDefault();
};
document.getElementById("moveTarget").οndragοver=function(e)
{
e.preventDefault();
};
// div drop ,
document.getElementById("moveTarget").οndrοp=function(event)
{
event.target.innerHTML=event.dataTransfer.getData('text');
event.preventDefault();
};
この例では、ドラフトではデータを手動で保存していませんが、オンドラッブではevent.data Transfer.get Data('text')でデータを取得しました.ちょっと注意してください.get Dataを呼び出した時に入ってきたのは「text」です.でも、私達はやはり手動でsetDataを呼び出して、同じ操作を完成することを提案します.
(5)dataTransferオブジェクトは、各MIMEタイプに一つの値を保存することができますが、data Transferオブジェクトに保存されているデータはdropイベントプログラムでしか読み取れません.読み込まれていない場合は、data Transferオブジェクトは破棄され、データも失われます.
document.getElementById("moveSrc").οndragstart=function(event)
{
// URL text
event.dataTransfer.effectAllowed="copy";
event.dataTransfer.setData('text','liangklfang');
event.dataTransfer.setData('url','www.baidu.com');
};
// moveTarget dragenter dragover div
document.getElementById("moveTarget").οndragenter=function(e)
{
e.dataTransfer.dropEffect="copy";
e.preventDefault();
};
document.getElementById("moveTarget").οndragοver=function(e)
{
e.preventDefault();
};
//FF 5 url text text/uri-list text/plain
// Text text/plain, URL !
// Text!
document.getElementById("moveTarget").οndrοp=function(event)
{
var url=event.dataTransfer.getData('url')||event.dataTransfer.getData('text/uri-list');
var text= event.dataTransfer.getData('Text');// URL, FF drop
this.innerHTML=url+text;
event.preventDefault();
};
総括:data Transfer対象は、私がフォックスブラウザの低バージョンにYSLOWをインストールした時に見ました.いい技術です.