Javascript dojo-鼠标(x,y)-拖放-失败
我正试图使用dojo.dnd拖动一个对象,但希望化身与对象处于相同的位置(相对于鼠标)Javascript dojo-鼠标(x,y)-拖放-失败,javascript,dojo,drag-and-drop,onmousemove,Javascript,Dojo,Drag And Drop,Onmousemove,我正试图使用dojo.dnd拖动一个对象,但希望化身与对象处于相同的位置(相对于鼠标) 即,如果一个人在物体的中间点击,那么鼠标光标将位于化身的中间。 我有各种奇怪的结果。 如果我将函数连接到body.onmousemove,dnd的下降部分将失败 我怎样才能让它工作 DnD事件 .target { 边框:1px点灰色; 宽度:300px; 高度:300px; 填充:5px; -moz边界半径:8pt 8pt; 半径:8pt; } .source { 边框:1px点天蓝色; 高度:200p
即,如果一个人在物体的中间点击,那么鼠标光标将位于化身的中间。
我有各种奇怪的结果。 如果我将函数连接到body.onmousemove,dnd的下降部分将失败 我怎样才能让它工作
DnD事件
.target
{
边框:1px点灰色;
宽度:300px;
高度:300px;
填充:5px;
-moz边界半径:8pt 8pt;
半径:8pt;
}
.source
{
边框:1px点天蓝色;
高度:200px;
宽度:300px;
-moz边界半径:8pt 8pt;
半径:8pt;
}
.dojoDndItemOver
{
背景:#feb;
边框:1px点灰色;
}
.target.dojoDndItemAnchor
{
背景:#ededed;
边框:1px纯灰色;
}
.dojodndavatherheader{
显示:无;
}
dojo.require(“dojo.dnd.Source”)代码>
dojo.require(“dojo.dnd.Container”)代码>
dojo.require(“dojo.dnd.Moveable”)代码>
dojo.require(“dojo.dnd.Manager”)代码>
dojo.require(“dojo.dnd.Avatar”)代码>
var mouse={x:0,y:0,句柄:未定义}代码>
功能鼠标命令(ev){
var px,py;
ev=ev | | window.event;
if(ev.pageX | | ev.pageY){
px=ev.pageX;py=ev.pageY;
}其他{
px=ev.clientX+dojo.body().scrollLeft-dojo.body().clientLeft;
py=ev.clientY+dojo.body().scrollTop-dojo.body().clientTop;
}
鼠标={x:px,y:py};
//dojo.byId(“msg”).innerHTML=dojo.toJson(鼠标);
}
//dnd在注释掉以下行时起作用。(定位失败)
var mchandle=dojo.connect(文档“onmousemove”、“mouseCoords”)代码>
//dojo.query(“.dojodnitem”).connect(“onclick”,“mouseCoords”)代码>
//dojo.dnd.Source.onMouseDown('mouseCoords')
var项目价格代码>
var总计=0代码>
函数附加项(目标,节点){
for(var i=0;i
{total+=parseFloat((target.getItem(nodes[i].id)).data);}
dojo.byId(“成本”).innerHTML=total;
}
函数减法项(目标,节点){
for(var i=0;i
total-=parseInt((target.getItem(nodes[i].id)).data);
}
dojo.byId(“成本”).innerHTML=total;
}
函数ShowPrice(目标,节点){
var总和=0;
for(var i=0;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=“所选商品价格为$”+sum;
}
函数ClearMsg()
{dojo.byId(“msg”).innerHTML=“”;}
函数init(){
dojo.subscribe(“/dnd/drop”),函数(源、节点、iscopy){
var t=dojo.dnd.manager().target;
ClearMsg();
if(t==source){return;}
if(t==cart){AddItems(t,nodes);}
if(t==shelf){减法项(t,节点)}
});
dojo.subscribe(“/dnd/start”),函数(源、节点、iscopy){
ShowPrice(源、节点);
});
dojo.subscribe(“/dnd/cancel”,function(){
ClearMsg();
});
}
dojo.addOnLoad(init)代码>
来源
目标
var mchandle;
dojo.require("dojo.dnd.Source");
var lastSrc;
function init() {
dojo.subscribe("/dnd/drop", function(source, nodes, iscopy) {
dojo.byId("msg").innerHTML += " drop";
dojo.disconnect(mchandle);
});
dojo.subscribe("/dnd/start", function(source, nodes, iscopy) {
lastSrc = source;
mchandle = dojo.connect(dojo.doc, "onmousemove", "mouseCoords");
dojo.byId("msg").innerHTML = "start";
var px = 0;
var py = 0;
for (var i = 0; i < nodes.length; i++) {
var nPos = dojo._abs(nodes[i]);
px = nPos.x > px ? nPos.x : px;
py = nPos.y > py ? nPos.y : py;
}
dojo.dnd.manager().OFFSET_X = 0 - (source._lastX - px);
dojo.dnd.manager().OFFSET_Y = 0 - (source._lastY - py);
});
dojo.subscribe("/dnd/cancel", function() {
dojo.byId("msg").innerHTML += " cancel";
dojo.query("[dojotype=\"dojo.dnd.Source\"]").forEach(function(node, index, array) {
var elemXY = dojo.coords(node);
if ( //in source box
(elemXY.x <= document.mouse.x && document.mouse.x <= (elemXY.x + elemXY.w)) && (elemXY.y <= document.mouse.y && document.mouse.y <= (elemXY.y + elemXY.h))) {
var s = new dojo.dnd.Source(node, null);
s.insertNodes(true, lastSrc.getSelectedNodes(), null, null);
}
});
dojo.disconnect(mchandle);
lastSrc = null;
});
}
dojo.addOnLoad(init);
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;
}
document.mouse = {
"x": px,
"y": py
};
}
_5.getItem(_6[i].id) is undefined
} catch (e) {\r\n dojo.js (line 203)