Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将光标捕捉到可拖动元素的特定点_Javascript_Html_Css - Fatal编程技术网

Javascript 将光标捕捉到可拖动元素的特定点

Javascript 将光标捕捉到可拖动元素的特定点,javascript,html,css,Javascript,Html,Css,我正在将缩略图从一个DIV拖到另一个DIV,并试图模仿AutoCAD、adobeillustrator和许多其他图形编辑软件中使用的“捕捉到网格”功能 问题1: 无论单击时指针在图像上的位置如何,如何使指针捕捉到要拖动的图像的0,0位置(x和y位置) 当我单击拖动图像时,指针会固定在单击时指针所在的位置,我要跟踪的坐标将是指针的坐标 我试过这个: cursor: url(mycustomcursor.png) 0 0 , auto; 此时会显示自定义指针,但不会按预期捕捉到0,0 问

我正在将缩略图从一个DIV拖到另一个DIV,并试图模仿AutoCAD、adobeillustrator和许多其他图形编辑软件中使用的“捕捉到网格”功能

问题1:
无论单击时指针在图像上的位置如何,如何使指针捕捉到要拖动的图像的0,0位置(x和y位置)

当我单击拖动图像时,指针会固定在单击时指针所在的位置,我要跟踪的坐标将是指针的坐标

我试过这个:

    cursor: url(mycustomcursor.png) 0 0 , auto; 
此时会显示自定义指针,但不会按预期捕捉到0,0

问题2:
如何使图像精确地粘贴在DIV中的位置,并返回从要放入的DIV顶部/左侧的偏移量(以像素为单位)

我不知道拖动时光标的位置是否相关,但当我用下面的脚本拖放图像时,图像移动的距离是我预期的两倍,换句话说,偏移量是预期的两倍。我已经添加了下面的脚本,并且不得不编辑出一堆(希望是)不相关的脚本,比如颜色、边框等的CSS。为了简化测试,我也只使用X坐标

<div style='overflow:scroll;text-align:left;position:absolute;width:90%;  height:180px;' ondrop='drop(event)' ondragover='allowDrop(event)'>
    <img id='image_1234' src='image_path/image.png' style='position:absolute;height:100px;' draggable='true' ondragstart='drag(event)'>
</div>
<div id='panel_frame' style='width:600px;height:300px;' ondrop='drop(event)' ondragover='allowDrop(event)'>
</div>

function allowDrop(evAllow) {
    evAllow.preventDefault();
}

function drag(evDrag) {
    evDrag.dataTransfer.setData('text', evDrag.target.id);
}

function drop(evDrop) {
    evDrop.preventDefault();
    var dropData = evDrop.dataTransfer.getData('text',evDrop.id);       
    evDrop.target.appendChild(document.getElementById(dropData));
    var offsetLeft = evDrop.clientX + 'px';
    document.getElementById(dropData).style.left = offsetLeft;
}

函数allowDrop(evAllow){
evAllow.preventDefault();
}
函数拖动(evDrag){
evDrag.dataTransfer.setData('text',evDrag.target.id);
}
函数下降(evDrop){
evDrop.preventDefault();
var dropData=evDrop.dataTransfer.getData('text',evDrop.id);
evDrop.target.appendChild(document.getElementById(dropData));
var offsetLeft=evDrop.clientX+'px';
document.getElementById(dropData).style.left=offsetLeft;
}

我正在Firefox中测试。感谢您的帮助。谢谢

您可能需要查看
element.offsetTop
element.offsetLeft
。根据您的布局技术,您可以将光标放置在[offsetTop,offsetLeft]上,这将为您提供屏幕左上角的位置。offsetTop似乎也采取了同样的行动。我想我可能需要1-获取图像左上角的坐标,然后2-单击时获取光标的坐标,然后3-以某种方式移动光标以消除差异。你怎么能移动光标呢?你能回答这两个问题吗@约翰