【发布时间】:2009-08-20 03:51:32
【问题描述】:
我正在尝试使用 dojo.dnd 拖动对象,但希望头像与对象处于相同位置(相对于鼠标)
即如果有人点击对象的中间,则鼠标光标将位于头像的中间。
我得到了各种奇怪的结果。 如果我将一个函数连接到 body.onmousemove,则 dnd 的放置部分会失败。
我怎样才能让它工作?
<html><head><title>DnD Events</title><style type="text/css">.target{border: 1px dotted gray;width: 300px;height: 300px;padding: 5px;-moz-border-radius: 8pt 8pt;radius: 8pt;}.source{border: 1px dotted skyblue;
@ 987654337@width: 300px;-moz-border-radius: 8pt 8pt;radius: 8pt;}.dojoDndItemOver{background: #feb;border: 1px dotted gray;}.target .dojoDndItemAnchor{background: #ededed;border: 1px solid gray;}.dojoDndAvatarHeader {display: none;}</style><script type="text/javascript" src="dojo/dojo.js" djconfig="parseOnLoad: true, isDebug:false"></script><script type="text/javascript">dojo.require("dojo.dnd.Source");dojo.require("dojo.dnd.Container");dojo.require("dojo.dnd.Moveable");
@ 987654361@dojo.require("dojo.dnd.Avatar");<br>var mouse = { x: 0, y: 0 , handle:undefined};function mouseCoords(ev) {var px, py;ev = ev || window.event;if (ev.pageX || ev.pageY) {px = ev.pageX; py = ev.pageY;} else {px = ev.clientX + dojo.body().scrollLeft - dojo.body().clientLeft;py = ev.clientY + dojo.body().scrollTop - dojo.body().clientTop;}mouse = { x: px, y: py };// dojo.byId("msg").innerHTML = dojo.toJson(mouse);
>}//dnd WORKS when following lines are commented out. (positioning fails)var mchandle = dojo.connect(document, "onmousemove", 'mouseCoords');//dojo.query(".dojoDndItem").connect("onclick", 'mouseCoords');//dojo.dnd.Source.onMouseDown('mouseCoords')</script><script type="text/javascript"><br><br><br><br>var item_price;var total = 0;function AddItems(target, nodes) {for (var i = 0; i < nodes.length; i++){ total += parseFloat((target.getItem(nodes[i].id)).data); }dojo.byId("cost").innerHTML = total;}function SubstractItems(target, nodes) {for (var i = 0; i < nodes.length; i++) {total -= parseInt((target.getItem(nodes[i].id)).data);}dojo.byId("cost").innerHTML = total;}
@987654398 @var sum = 0;for (var i = 0; i < nodes.length; i++) {dojo.dnd.manager().OFFSET_X = 0 - (mouse.x - dojo._abs(nodes[i]).x);dojo.dnd.manager().OFFSET_Y = 0 - (mouse.y - dojo._abs(nodes[i]).y);dojo.dnd.manager().updateAvatar();sum += parseInt((target.getItem(nodes[i].id)).data);}dojo.byId("msg").innerHTML = "Selected Item Price is $" + sum;}function ClearMsg(){ dojo.byId("msg").innerHTML = ""; }function init() {dojo.subscribe("/dnd/drop", function(source, nodes, iscopy) {var t = dojo.dnd.manager().target;ClearMsg();if (t == source) { return; }if (t == cart) { AddItems(t, nodes); }if (t == shelf) { SubstractItems(t, nodes); }
@987654418 @});dojo.subscribe("/dnd/start", function(source, nodes, iscopy) {ShowPrice(source, nodes);});dojo.subscribe("/dnd/cancel", function() {ClearMsg();});}dojo.addOnLoad(init);</script>
><br><br><br></head><body style="font-size: 12px;"><table><tbody><tr valign="top"><td>SOURCE<div dojotype="dojo.dnd.Source" jsid="shelf" class="source" id="source1" accept="red,blue"
@9 87654438@<img src="BLUE.png" class="dojoDndItem" dndtype="blue" dnddata="10" title="$10" /><img src="RED.png" class="dojoDndItem" dndtype="red" dnddata="60" title="$60" /><img src="BLUE.png" class="dojoDndItem" dndtype="blue" dnddata="13" title="$13" /><img src="RED.png" class="dojoDndItem" dndtype="red" dnddata="15" title="$15" /><img src="BLUE.png" class="dojoDndItem" dndtype="blue" dnddata="3" title="$3" /><img src="RED.png" class="dojoDndItem" dndtype="red" dnddata="148" title="$148" /><img src="BLUE.png" class="dojoDndItem" dndtype="blue" dnddata="1" title="$1" />
@98765446@<img src="BLUE.png" class="dojoDndItem" dndtype="blue" dnddata="3" title="$3" /></div></td><td>TARGET<div dojotype="dojo.dnd.Source" jsid="cart" class="target" accept="red,blue" id="target1"></div></td><td>Total Price (USD): <span id="cost">0.00</span><br /><b>Message: <span id="msg" style="color: blue"></span></b><td></tr><tbody /></table></body>
@ 987654463@
【问题讨论】:
标签: javascript dojo drag-and-drop onmousemove