2013-04-06 63 views
0

我有这样的代码:JQuery的,错误的左翼位置

$(this).closest("p").after('<strong>' + arMess[iCurIndex] + '</strong>').next().animate({ 
      top: $(this).offset().top - 57, 
      left: -$(this).width() //[First value] Here i get 148px on chrome and 150px on firefox 

     }, 300,function(){ 
      alert($(this).offset().top - 57); 
      alert(-$(this).width()); //[Second value] Here i get the true width the one i want to present the left 
     }); 

代码概述: 在第一线我动画STRONG元素

正如你可以看到我得到2个不同的值从- $(this).width()

第一个值:我在动画过程中获得。

第二个值:我得到的动画结束后。

如果有人有大约原因想法,我得到2个不同的价值观,我将非常感激。

+2

我只是想..有边界也许问题?尝试使用'outerWidth',而不是'width' – 2013-04-06 11:03:27

回答

1

这里的问题是,JavaScript的关键字没有在内部功能相同值,是动画作为后调用它会在你设置宽度时进行。对于第一个值,此是触发动画的对象。在警报被调用的函数是正在动画的对象。

试试这个:

var $strongElement = $(this).closest("p").after('<strong>' + arMess[iCurIndex] + '</strong>').next(); 

$strongElement.animate({ 
     top: $(this).offset().top - 57, 
     left: -$strongElement.width() 
    }, 300, function(){ 
    alert(-$(this).width()); 
}); 

http://jsfiddle.net/vtyjf/

+0

谢谢你这么多moiter,我试图找到一个解决方案超过6小时,我想,如果可以,为什么您使用的是告诉我美元($)之前的变量? – 2013-04-06 15:20:54

+0

显示它是一个jQuery对象。这只是一个非常有用的命名约定。 – moiter 2013-04-06 15:42:59

+0

谢谢你。 – 2013-04-11 11:10:56

1

尝试outerWidth或检查元素的CSS,如果它得到了float:left

$(this).closest("p").after('<strong>' + arMess[iCurIndex] + '</strong>').next().animate({ 
      top: $(this).offset().top - 57, 
      left: -$(this).outerWidth(); 
         // use .outerWidth(true); if you want to 
         //calculate with margin and border values 

}, 300,function(){ 
      alert($(this).offset().top - 57); 
      alert(-$(this).outerWidth()); 
}); 
+0

谢谢你的答案巴尔拉斯,但这是无关保证金的填充,问题是,我得到不同的价值观,我认为这是一些与浏览器的默认值(Chrome = 148px,Firefox = 150px),如上面的问题。 – 2013-04-06 11:32:00

+0

@uBlankText你使用[CSS重置](http://www.cssreset.com/)? – Vucko 2013-04-06 11:37:08

+0

不,我不是,我应该在每个CSS之前使用它吗? – 2013-04-06 11:41:05