1

我有这个代码:

jQuery:

var mouseDown=false;
var lastPositionX;
var lastPositionY;
var newX;
var newY;
var lastPositionLeft;
var lastPositionTop;
var newLeft;
var newTop;
    $("#insideMap").on("mousedown",function(){
        mouseDown=true;
        lastPositionX=e.pageX;
        lastPositionY=e.pageY;
    });
    $("#insideMap").on("mouseup",function(u){
        mouseDown=false;
    });
    $("#insideMap").on("mouseleave",function(){
        mouseDown=false;
    });
    $("#insideMap").on("mousemove",function(n){
        if (mouseDown){
            mouseDown = true; // mantain the boolean to prevent mouseleave trigger
            newX=n.pageX-lastPositionX;
            newY=n.pageY-lastPositionY;
            lastPositionLeft=$("#insideMap").position().left;
            lastPositionTop=$("#insideMap").position().top;
            newLeft=newX+lastPositionLeft;
            newTop=newY+lastPositionTop;
            $("#insideMap").css({"left":newLeft,"top":newTop});
            lastPositionX=n.pageX;
            lastPositionY=n.pageY;
        }
    });

演示:http: //jsfiddle.net/SkWeX/3/

但是有些东西仍然很糟糕:(它不能很好地工作,它仍然滞后,你能帮我吗?

4

1 回答 1

3

:) 浏览器有时想要拖动您的图像(bg),您需要防止这种情况!

jsFiddle 演示

只需将其添加到#insideMap元素的 CSS 中:

-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;

这段代码就是你所需要的:

var mouseDown=false,
    posX   = 0,
    posY   = 0,
    innerX = 0,
    innerY = 0;

$("#insideMap").on("mousedown",function(e){
    innerX = e.pageX - $(this).offset().left;
    innerY = e.pageY - $(this).offset().top;
    mouseDown= true;
}).on("mouseup",function(){
    mouseDown=false;
});

$(document).on("mousemove",function(e){    
    if (mouseDown){
        var m = {  x: e.pageX-innerX,  y: e.pageY-innerY };        
        $('#insideMap').css({ left: m.x, top: m.y });       
    }
});

一些解释:

您的代码在任何已注册的鼠标移动(并且有很多)上都很慢,因为您正在重新计算元素位置。错误的。

  • 我在 click vars 上抓取元素内的鼠标位置,innerX然后innerX
  • 在 mousemove 上,我只是将 移动CSS element position到实际的鼠标位置(你猜对了:),但减去元素被点击的位置(innerX,innerY)(以防止元素跳转到鼠标位置)。
于 2012-06-24T17:36:23.130 回答