Firefox 3.1のHTML 5対応を検証--Drag and drop API
Firefox 3の開発者向けTipsを紹介する本連載。Firefox 3.1のHTML 5対応を紹介してきたが、今回はDrag and drop APIを解説する。
HTML 5のドラッグ&ドロップAPI
HTML 5では新たにDrag and drop APIが追加される。これによって、オブジェクトがドラッグ/ドロップされた際に発生するイベントを処理する標準の方法が提供されることになる。
Firefox 3でもドラッグ&ドロップに関するイベントがサポートされているが、Forefox 3.1ではHTML 5のAPIがサポートされ、標準的な方法でドラッグ&ドロップが処理できるようになる予定だ。
HTML 5のDrag and drop APIでは、オブジェクトがドラッグおよびドロップされた際のイベントを表すDragEventインタフェースが定義される。DragEventはドラッグの開始元から送出されるものと、ドラッグのターゲットから送出されるものがあり、それぞれ表1、表2に示すイベントがある。
| イベント名 | 内容 |
|---|---|
| dragstart | ドラッグ操作が開始されたときに送出される |
| drag | ドラッグ中に継続的に送出される |
| dragend | マウスが離され、ドラッグ操作を終了したときに送出される |
| イベント名 | 内容 |
|---|---|
| dragenter | ドラッグされているオブジェクトがターゲットの境界内に入ったときに送出される |
| dragover | ドラッグされているオブジェクトがターゲットの境界内にあるときに継続的に送出される |
| dragleave | ドラッグされているオブジェクトがターゲットの境界から離れたときに送出される |
| drop | オブジェクトがターゲット上にデータがドロップされたときに送出される |
次に、DataEventオブジェクトを受け取るリスナー関数側の処理を考える。DataEventオブジェクトはDataTransfer型のdataTransferというプロパティを持ち、これはドラッグ&ドロップに関する様々な情報を保持する。
DataTransferの持つプロパティおよびメソッドは下記の通りだ。
- effectAllowedプロパティ
- dropEffectプロパティ
- typesプロパティ
- clearData(format)メソッド
- setData(format, data)メソッド
- getData(format)メソッド
- setDragImage(image, x, y)メソッド
- addElement(element)メソッド
このうち、effectAllowedはドラッグ元で許可されるドロップ効果を指定するためのプロパティで、その値は通常、dragstartイベントのハンドラで設定する。これによって許可されるドラッグ効果を制御することができる。effectAllowedには表3に示す値が指定できる。
| 値 | 効果 |
|---|---|
| none | ドラッグ操作を許可しない |
| copy | ドロップ先へのコピーのみを許可する |
| link | ドラッグ元とドロップ先でリンクを使って要素の内容を共有する |
| move | ドロップ先への移動のみを許可する |
| copyLink | コピーまたはリンクを許可する |
| copyMove | コピーまたは移動を許可する |
| linkMove | リンクまたは移動を許可する |
| all | コピー、リンク、移動の全ての操作を許可する |
dropEffentはドロップ時やドラッグ終了時の効果を表すプロパティで、その値は通常、dragenterイベントのハンドラにおいて設定する。これによってドラッグ時にユーザがターゲット上でマウスを離した際の効果を指定できる。
dropEffectにはこのうち「none」「copy」「link」「move」の値を指定できるが、effectAllowedプロパティによって許可された効果でなければ有効にはならない。また、dropEffectに明示的に値を指定しない場合には、effectAllowedの値からcopy、link、moveの優先度で自動的に設定される。
ただし、エレメントによってはデフォルト値を持つ場合もある。例えば通常のテキストの選択領域のドラッグに対しては「copy」が、テキストフィールドからの選択領域のドラッグに対しては「move」が設定される。
setData()メソッドではドラッグするデータを設定する。第1引数にデータのMIMEタイプを、第2引数に実際のデータを指定する。設定されたデータは、ターゲット側のイベントハンドラにおいてgetData()メソッドを用いて取り出すことができる。その場合、引数には取得したいデータのMIMEタイプを指定する。
上記を踏まえて、imgエレメントのドラッグ、およびdivエレメントに対するドロップを監視する例を見てみよう。
- 0人の推薦記事
- 1人がクリップ
-
ソーシャルブックマーク(-)
- トラックバック(0)
-
- タグ
- MIME
- ターゲット
- ドラッグ
- マウス
- イベント
- 引数
- 関数
- API
- 選択領域
- MIMEタイプ
- dragleave
- drop
- DataEvent
- リスナー関数
- リスナー
- DataTransfer
- effectAllowed
- dropEffect
- types
- clearData
- setData
- getData
- SetDragImage
- addElement
- copy
- link
- move
- copyLink
- copyMove
- linkMove
- all
- エレメント
- テキストフィールド
- Drag and drop API
- ドラッグ&ドロップAPI
- 処理
- 標準
- ドロップ
- DragEvent
- dragstart
- drag
- dragend
- dragenter
- dragover
- firefox
- Firefox 3.1
- html
- none
- インタフェース
- メソッド
- 特集: 開発者のFirefox 3 (69件)
- ホワイトペーパー
- 企画特集
- 話題のタグ
SQLite対応アプリのデータベースファイルを閲覧する
グーグル、「Google Buzz」を発表--Gmailのソーシャル機能を強化
「H.264」ストリーミングのロイヤリティ無料期間が延長
マイクロソフト、「Office 2010」のRC版をリリース
新しい視点のレンタルサーバが誕生!
御社はまだフリーの転送サービスですか?
DBのパフォーマンスに困ってませんか?
経営統合後の事業損益構造の見える化を実現
アンケートから見るセキュリティ対策の実態
レガシーアプリケーションの稼働どうしてる?
利用者の理想を追求した最新レンタルサーバ
仮想環境のバックアップは難しいのか
通販サイトのアクセス集中からの危機を救う
アプリケーション仮想化 3つの課題
身近な業務をCRMが変革!
事例 VMwareでデータセンターをクラウド化
仮想化をダメにするストレージの実態
Xbox Live インディーズゲーム開発の軌跡