2015-09-06 73 views
0

我有html工具箱的圖像集。我想將它們拖放到raphael畫布上。使用jQuery UI或HTML5我想我可以拖放,但如何使該工具箱HTML元素(圖像)拉斐爾對象時,它被刪除?Raphael.JS:如何拖放圖像DOM元素在拉斐爾紙

我需要經過HTML ELEM功能拉斐爾這樣的:

var r = Raphael(0, 0, 800, 800); 

raiseMeWhenDropped(html_elem, e) { 
    // create image on canvas area when dropped from toolbox 
    r.image(html_elem.src, e.mouseXdropped, e.mouseYdropped, 30, 30); 
} 
+0

你可以把測試用例上的jsfiddle – Ian

回答

1

最簡單的方法很可能是使用HTML拖放,讓您的功能handlerdrop事件。您可以將drop event添加到papercanvas元素中。像這樣的例子:

var r = Raphael(0, 60, 800, 800); 
 
var canvas = r.canvas; 
 
var dragImage = document.getElementById('test'); 
 

 
dragImage.addEventListener('dragstart', function (e) { 
 
    dragEvent = e; 
 
}); 
 

 
canvas.addEventListener('dragover', function (e) { 
 
    e.preventDefault(); 
 
}); 
 

 
canvas.addEventListener('drop', function (e) { 
 
    e.preventDefault(); 
 
    r.image(dragEvent.target.src, e.offsetX - dragEvent.offsetX, e.offsetY - dragEvent.offsetY, dragEvent.target.clientWidth, dragEvent.target.clientHeight); 
 
})
svg 
 
{ 
 
    background-color: #ddd; 
 
} 
 

 
img 
 
{ 
 
    cursor: pointer; 
 
}
<script src="http://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script> 
 

 
<img draggable="true" id="test" src="https://www.gravatar.com/avatar/a4d924e65b84f1572ea3598437aa5559?s=48&d=identicon&r=PG&f=1" /><span>You can drop the image on the grey zone</span>

+0

THX!那是我在找的東西。你能解釋爲什麼我們使用addEventListener('dragover')嗎?我測試瞭如果我們刪除它,沒有任何工作。 – sirjay

+0

這就是您定義放置目標的方式。由於默認情況下,頁面上的大部分區域都不是有效目標,因此通過防止拖動時的默認行爲,基本上可以說它是一個有效的放置目標。我總覺得它有點違反直覺,但這就是它的工作原理。看到這裏:https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Drag_operations#droptargets –