如何将全局坐标转换为局部坐标
How do I convert global coordinates to local?
我创建了一些简单的拖放操作。(代码中有一些垃圾,看起来应该有用。)
Html:
<div id="container">
<div id="target"></div>
</div>
Javascript:
var el = document.getElementById('target');
var mover = false,
x, y, posx, posy, first = true;
el.onmousedown = function () {
mover = true;
};
document.onmouseup = function () {
mover = false;
first = false;
};
document.onmousemove = function (e) {
if (mover) {
e = e || window.event;
var target = e.srcElement || e.target;
var rect = target.getBoundingClientRect();
if (first) {
first = false;
x = (getMouseCoordinates(e).x - rect.left);
y = (getMouseCoordinates(e).y - rect.top);
}
posx = getMouseCoordinates(e).x;// - x;
posy = getMouseCoordinates(e).y;// - y;
el.style.left = posx + 'px';
el.style.top = posy + 'px';
}
};
function getMouseCoordinates(e) {
e = e || window.event;
var pageX = e.pageX;
var pageY = e.pageY;
if (pageX === undefined) {
pageX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
pageY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
}
return {
x: pageX,
y: pageY
}
}
CSS:
#target {
left: 50px;
top: 50px;
width: 150px;
height: 100px;
background-color: #ffc;
position: absolute;
}
#container {
left: 30px;
top:30px;
width: 300px;
height: 300px;
background-color: red;
position: absolute;
}
http://jsfiddle.net/YGzm6/
问题是可拖动对象位于已定位的容器内。因此,当我用鼠标的全局坐标定位可拖动对象时,可拖动对象实际上是相对于其非全局容器定位的。
那么,我该如何翻译坐标,使拖动的人不会跳来跳去呢?我肯定需要知道父容器的偏移量吗?
var x = 0, y = 0;
var element = document.getElementById('container');
do {
x += element.offsetLeft;
y += element.offsetTop;
}
while (element = element.offsetParent);
相关文章:
- 将event.offsetX和event.offset Y的坐标转换为webGL本机坐标
- OpenLayers:自动将 EPSG 4326 - 文本图层的坐标转换为地图的投影 (EPSG:900913)
- 将 GPS 坐标转换为距离,并以十进制度为单位将距离转换为半径
- 将 GeoJSON 坐标转换为其他投影以用于草坪.js
- 将位置坐标转换为画布坐标
- 如何将像素坐标转换为等轴测网格坐标
- Pixi.js / WebGL方法,用于将数据模型坐标转换为画布像素坐标
- 将坐标转换为阵列中的块位置
- 将lat/lng坐标转换为给定地图上的像素(使用JavaScript)
- 如何从(x, y)屏幕坐标转换为LatLng(谷歌地图)
- 如何将屏幕坐标转换为z变换元素上的坐标
- 在ThreeJS中将2D鼠标坐标转换为世界XZ坐标
- 将经纬度坐标转换为图像地图坐标
- 天文坐标转换的Bug
- HTML5地理定位将当前GPS位置的长宽坐标转换为一个变量
- 反向地理编码:将GPS坐标转换为位置名称的函数调用永远不会执行
- 将贴图的xyz坐标转换为经度/纬度
- 如何将画布坐标转换为tile坐标
- 将上/左偏移坐标转换为日/时间
- 如何转换“正常”"坐标转换为OpenLayers中的OSM坐标