startDrag: function(elem) {
elem.onmousedown =function(ev) {
dragObject  = this;
mouseOffset = ws.m.pin.getMouseOffset(this, ev);
return false;
}

},

//information on where we clicked our item
getMouseOffset:function (target, ev){
ev = ev || window.event;   
var mousePos  = ws.m.pin.mouseCoords(ev);
var docPos    = ws.m.pin.getPosition(target);
return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
},

//the coordinates of an item relative to the document
getPosition:function (e){

var left = 0;
var top  = 0;
left = e.offsetLeft ;
top  = e.offsetTop ;
return {x:left, y:top};
},

//capture the mouse coordinates
mouseCoords:function (ev){
if(ev.pageX || ev.pageY){
    return {x:ev.pageX, y:ev.pageY};
}
return {
    x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
    y:ev.clientY + document.body.scrollTop  - document.body.clientTop
};
        },

//Moving an Item
mouseMove:function  (ev)   {
ev  =  ev  ||  window.event;
                var mousePos = ws.m.pin.mouseCoords(ev);
//ws.map.px2Coords(mousePos);

var centerPixX = (1248 / 2) - mousePos.x;//($('#map_div').width() / 2) - p.x;
var centerPixY = (471 / 2) - mousePos.y;//($('#map_div').height() / 2) - p.y;

var diffMeterX = centerPixX * ws.map.scale;
var diffMeterY = centerPixY * ws.map.scale;

var x = Math.abs(diffMeterX - ws.map.center.x);
var y = Math.abs(diffMeterY + ws.map.center.y);

var widthHalf = 1248 / 2;
var heightHalf = 471 / 2;

var lux = ws.map.center.x - widthHalf * ws.map.scale;
var luy = ws.map.center.y + heightHalf * ws.map.scale;

        // Pixel diff from left upper
        var X = Math.round((x - lux) / ws.map.scale);
        var Y = Math.round((luy - y) / ws.map.scale); if  (dragObject)   {

dragObject.style.position  = 'absolute';

dragObject.style.top  =Y+"px";//(Y-mouseOffset.y)+"px";  //(mousePos.y-mouseOffset.y)+"px";
dragObject.style.left  =X+"px";//(X-mouseOffset.x)+"px"; //(mousePos.x-mouseOffset.x)+"px";         
}

// track the current mouse state 
        lMouseState = iMouseDown;

return false;

},

//release an Item
mouseUp:function  (ev)   {
dragObject = null;
iMouseDown = false;
}
}
        document.onmousemove = ws.m.pin.mouseMove;       
        document.onmouseup   = ws.m.pin.mouseUp;上面代码已经能搞实现拖放功能,但是当我移动地图时,标签不动,因此,为了让标签也跟着移动,先把标签的坐标换成地理坐标,然后再换回像素坐标,但我移动地图时,dragobject是零,想问一下,如何修改,谢谢!

解决方案 »

  1.   

    先问个简单的问题,想调用map_div的宽和高,下面两种写法抖掉不出来数,为什么,再线等var centerPixX =($('#map_div').width() / 2) - p.x;
    var centerPixY =($('#map_div').height() / 2) - p.y; var centerPixX =(map_div.width() / 2) - p.x;
    var centerPixY = (map_div.height() / 2) - p.y; 
      

  2.   


    我试着用下面的这句话也不行,为什么var w=document.getElementById("map_image").width; 
      

  3.   

    http://www.liehuo.net/a/200911/0410378.html
      

  4.   

    你再计算一下当前坐标和原来的坐标之差,用原来的left或者top相对应的加减就可以了,如果你全部用相对定位就会避免这个坐标问题