0

有人可以帮我调试吗???我真的不知道我的代码有什么问题......

我正在尝试将数值添加到另一个数值......但它没有按我预期的那样工作......相反它只是将数字添加为字符串。

这是我的演示:(已经解决)

这是js代码:

$(document).ready(function(){
$("#map").click(function(e){
    var x = parseInt((e.pageX - this.offsetLeft)) - parseInt("140");
    var y = parseInt((e.pageY - this.offsetTop)) - parseInt("140");


  var coor = $("#map").css("background-position").split(" ");
  var cx = parseInt(coor[0].replace("px",""));
  var cy = parseInt(coor[1].replace("px",""));


    $("#map").stop().animate({"backgroundPosition": x+cx+" "+y+cy},"slow");
     alert("X:"+x+", CX: "+cx+"\n Y:"+y+", CY:"+cy+"\n Background-pos:"+$("#map").css("background-position"));

});
});

请告诉我它有什么问题...

4

4 回答 4

3

()在算术运算周围加上括号。

$("#map").stop().animate({"backgroundPosition": (x+cx)+" "+(y+cy)},"slow");

否则,添加空格字符串将强制 JS 将您的数字连接为字符串。

小提琴示例

于 2012-06-02T01:48:21.550 回答
3

在您的animate-Statement 接近尾声中,您将背景位置设置为:

x+cx+" "+y+cy

这被解释为一个字符串,因为四个 -+操作被平等地解释。实际上,您确实连接了一个字符串 ( " ")。因此,这个表达式的整个结果变成了一个字符串,加法不再是加法而是连续。

但是,如果您将数学封装到括号中,那么您应该没问题。您的倒数第二行变为:

$("#map").stop().animate({"backgroundPosition": (x+cx)+" "+(y+cy)},"slow");

(注意 周围的额外括号x+cx

于 2012-06-02T01:49:20.810 回答
0

不是吗?

var x = parseInt((e.pageX - $(this).offset().left)) - parseInt("140");
var y = parseInt((e.pageY - $(this).offset().top)) - parseInt("140");
于 2012-06-02T01:47:05.573 回答
0

以下对我有用:

$("#map").click(function(e){
        alert(e.pageX);
        alert(this.offsetLeft);
        alert(parseInt(e.pageX)-parseInt(this.offsetLeft));
于 2012-06-02T01:52:43.767 回答