これまでドラッグ機能を使用する必要がなかったので、これまでに発見したことについて説明します。
- ドラッグイベントは、ユーザーがオブジェクトをドラッグしているときに発生するイベントです。これは「適切な」OSドラッグです。たとえば、テキストをハイライトしてドラッグしたり、ブラウザの外部から何かをドラッグしたりします。
- ドラッグしている間、私が知る限り、他のブラウザイベントは発生しません。(たとえば、マウスオーバーは無視されます)。動作するイベントはドラッグイベントのみです。
- 最近のすべてのブラウザでは、onDragEnterとonDragOverが機能しているように見えますが、Firefoxには「onDragLeave」がありません。
- ドロップには、FFは「onDragDrop」を使用しますが、IEなどは「onDrop」を使用しますが、Safariはそれをサポートしていないようです。
- イベントは、textareaやtextなどの「ドロップ可能な」要素でのみ機能するようです。他の要素では、一部のイベントのみが機能します。
- 私が行きたくないブラウザごとのその他のさまざまな癖。
- これらのイベントについてはほとんど文書化されていません。
はい、実際のドラッグ+ドロップを使用する必要があり、シミュレートできません。
私の質問:
- FFで「ondragleave」などを検出する方法はありますか?
- Safariで「ondragdrop」などを検出する方法はありますか?
- ドラッグ+ドロップについて何か追加することはありますか?
ドラッグアンドドロップイベントを示す、すばやく汚いテンプレートを次に示します。
<script>
addEvent = function(obj, eventname, fn){
if (document.addEventListener) obj.addEventListener(eventname, fn, false);
else obj.attachEvent('on'+eventname, fn);
}
window.onload = function(){
var logger = document.getElementById("logger");
var log = function(str){ logger.value = str + logger.value; }
//log a variety of drag events for the textarea
var obj = document.getElementById("tarea");
var events = ["dragenter","dragover","dragout","dragleave","dragdrop","drop"];
for (var i=0; i<events.length; i++){
(function(event){//create a closure to remove variable scope
addEvent(obj, event, function(){ log("textarea: " + event + "\n"); });
})(events[i]);
}
//log events on the div
obj = document.getElementById("div");
events = ["mouseover","mouseout","mouseup","mousedown","click","dblclick",
"dragenter","dragover","dragout","dragleave","dragdrop","drop"];
for (var i=0; i<events.length; i++){
(function(event){//create a closure to remove variable scope
addEvent(obj, event, function(){ log("div: " + event + "\n"); });
})(events[i]);
}
}
</script>
Life's a drag when doing cross browser stuff.<br><br>
<div id="div" style="width: 100px; height: 100px; background: green; float: left;">
</div>
<textarea id="tarea" style="width: 100px; height: 100px; float: left; margin: 0px 5px;">
</textarea>
<textarea id="logger" style="width: 200px; height: 400px; float: left;">
</textarea>