我想允许用户从一个div容器中拖动图标并将其拖放到画布上并保持原始图标不变。图标在表格上动态添加。当我拖动图标时,我也希望用光标拖动图标效果。当我使用“helper:'clone'”属性时,我得到效果但是删除的位置不正确,当我删除此属性时,原始图标被删除。
我的图标的父容器
<div id="dvEquipmentTool" style="removed: absolute; border: 1px solid rgb(173, 201, 247);
display: block; background-color: white; height: 400px; z-index: 50000; padding: 3px;
removed 100px; removed 50px; width: 200px !important;" class="ui-draggable">
<table id="tbEquipmentTool" border="0" style="background-color: White; padding-left: 10px;
max-height: 400px !important;">
<tbody>
<tr id="tRow1">
<td>
<img src="" id="imgEquipIcon1" class="ui-draggable" style="position: relative; left: 473px;
top: 183px;">
</td>
<td>
<span id="lblImgEquipName1" class="label">10-FL-105-A20</span><span id="lblImgEquipID1"
class="label" style="display: none;">100200</span>
</td>
<td width="10px">
</td>
</tr>
<tr id="tRow2">
<td>
<img src="" id="imgEquipIcon2" class="ui-draggable" style="position: relative;">
</td>
<td>
<span id="lblImgEquipName2" class="label">10-FL-3111-A20</span><span id="lblImgEquipID2"
class="label" style="display: none;">100199</span>
</td>
<td width="10px">
</td>
</tr>
</tbody>
</table>
</div>
使图像可拖动的Javascript功能
$("img[id^=imgEquipIcon]").each(function () {
$(this).draggable({ containment: "#dvContainer", scroll: false,//helper: 'clone',
stop: function (event, ui) {
var stoppos = $(this).position();
alert(stoppos.left+","+ stoppos.top);
var img = new Image();
img.src = this.src;
createEquipIcon(img, stoppos.left, stoppos.top);
}
});
});
function createEquipIcon(img, X, Y) {
var dv = document.createElement('div');
$(dv).css('top', Y);
$(dv).css('left', X);
$(dv).css('cursor', 'move');
$(dv).css('position', 'absolute');
$(dv).css('background-color', 'red');
dv.appendChild(img);
var index = img.id.replace('imgEquipIcon', '');
var container = document.getElementById('dvContainer');
container.appendChild(dv);
//code for drawing on canvas goes here
}
用于绘制图像的画布
<div id="dvContainer" runat="server" style="overflow: visible; background-repeat: no-repeat">
<canvas id="myCanvas" width="1000px" height="600px">
<b> *Your browser doesn't support canvas. Please switch to different browser.</b>
</canvas>
答案 0 :(得分:6)
演示:http://jsfiddle.net/m1erickson/cyur7/
在拖动之前和拖动之后:
制作HTML工具栏
Html toolbar-div with tool-imgs:
<div id="toolbar">
<img class="tool" width=32 height=32 src="equipment1.jpg">
<img class="tool" width=32 height=32 src="equipment1.jpg">
<img class="tool" width=32 height=32 src="equipment1.jpg">
</div>
使用jQuery
使所有.tools可拖动使所有.tools可拖动:
// select all .tool's
var $tools=$(".tool");
// make all .tool's draggable
$tools.draggable({ helper:'clone' });
// assign each .tool its index in $tools
$tools.each(function(index,element){
$(this).data("toolsIndex",index);
});
使画布成为放置目标:
// make the canvas a dropzone
$canvas.droppable({
drop:dragDrop,
});
删除后,在画布上绘制img
删除处理程序
// handle a drop into the canvas
function dragDrop(e,ui){
// get the drop point (be sure to adjust for border)
var x=parseInt(ui.offset.left-offsetX)-1;
var y=parseInt(ui.offset.top-offsetY);
// get the drop payload (here the payload is the $tools index)
var theIndex=ui.draggable.data("toolsIndex");
// drawImage at the drop point using the dropped image
ctx.drawImage($tools[theIndex],x,y,32,32);
}