2012-09-05 6 views
7

Webページ内のSVG要素からドラッグ&ドロップイベントを受け取る可能性はありますか?埋め込みSVGのイベントをドラッグアンドドロップしますか?

Googleクローズライブラリを試しましたが、無駄です。具体的に

、マイページ

<ul id = "list"> 
    <li class="item" id="item1">foo</li> 
    <li class="item">bar</li> 
    <li class="item">baz</li> 
</ul> 

が含まれており、私のスクリプトは、(Clojurescript/C2)が含まれているとし

(let [items (select-all ".item") 
     lst (select "#list") 
     target (fx/DragDrop. lst nil)] 
    (dorun (map 
    (fn [item] 
     (let [source (fx/DragDrop. item nil)] 
     (. source (addTarget target)) 
     (. source (init)))) 
    items)) 
    (. target (init))) 

それから私は、私はしませんがは、ドラッグイメージ(ゴースト)を得るかドラッグイベントの受信を管理するSVG要素のために同様のコードを使用して

(on-raw "#item1" :dragstart (fn [e] (.log js/console (str "dragstart " e)))) 

を行うことで、私も幽霊を得ることはありません...

任意のヒントは?

おかげ

答えて

13

ドラッグイベントは、SVG要素でサポートされていません:​​。

ドラッグイベントをマウスイベントで偽装することができます。http://svg-whiz.com/svg/DragAndDrop.svg(ソースを表示)を参照してください。

+0

これは標準の一部ではありませんが、いくつかのブラウザでサポートされることを期待していました。また、SVGのドラッグアンドドロップをカプセル化したJSライブラリが利用できる...しかし、例のおかげで! – Rom1

+1

Operaはsvg要素のドラッグイベントをサポートしています(他のHTML5要素と同じです)。 –

+0

確かにそうです!問題は、私のコード、またはC2、あるいはGoogleのクロージャーとOperaがうまくいっていないようなことです(私は 'webkitMatchesSelector'または何かに関連した奇妙なエラーを受け取ります...)。他のブラウザがそれに従うかどうか知っていますか? – Rom1

1

いつでも実装できます。

this.isTouching = function(element){ 
     if(this.x <= element.x && element.x <= (this.x + this.width) && 
      this.y <= element.y && element.y <= (this.y + this.height)){ 
      return true; 
     }else{ 
      return false; 
     } 
    }; 
をそして、それはすべてのブラウザで動作します。基本的に、あなたがドラッグしているとき、要素が別のものに触れているかどうかを確認する必要があります。期待しています:)

関連する問題