是否有可能从网页中的SVG元素接收拖放事件?
我尝试了Google Closure库,但无济于事。
具体来说,假设我的页面包含
<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)))
然后我做获得一个拖动图片(鬼),虽然我没有设法接收拖动事件,例如通过做
(on-raw "#item1" :dragstart (fn [e] (.log js/console (str "dragstart " e))))
使用类似的SVG元素代码,我甚至没有鬼......
任何提示?
由于
答案 0 :(得分:15)
SVG Elements不支持拖动事件:http://www.w3.org/TR/SVG/svgdom.html#RelationshipWithDOM2Events。
您可以使用鼠标事件伪造拖动事件,请参阅http://svg-whiz.com/svg/DragAndDrop.svg(查看来源)。
答案 1 :(得分: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;
}
};
它适用于所有浏览器。希望它有所帮助:)