2015-09-06 65 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 –