jquery 的 animate(left:1000px,1000);和animate(marginLeft:1000px,1000);有啥区别呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jquery 的 animate(left:1000px,1000);和animate(marginLeft:1000px,1000);有啥区别呢?相关的知识,希望对你有一定的参考价值。

先解释一下animate()方法,animate()可 方法执行 CSS 属性集的自定义动画。该方法通过CSS样式将元素从一个状态改变为另一个状态。CSS属性值是逐渐改变的,这样就可以创建动画效果。

animate格式:

animate(styles,speed,easing,callback)
styles 必需,规定产生动画效果的 CSS 样式和值
speed 可选,规定动画的速度。默认是 "normal"
easing 可选,规定在不同的动画点中设置动画速度的 easing 函数
callback 可选,animate 函数执行完之后,要执行的函数

注意:只有数字值可创建动画(比如 "margin:30px")。字符串值无法创建动画(比如 "background-color:red")。

题主用了left: 1000px 和 marginLeft: 1000px,其中left和marginLeft是styles参数,也就是css样式表。

HTML代码:

<div class=".div1" style="width:100px;height:100px;background:red;">
    这里是div
</div>

marginLeft:1000px,marginLeft为左外边距,这个横好理解,元素本身和内容距离左偏1000像素。直接使用就可以了:

.div1 
    margin-left: 1000px;

left: 1000px,left为左偏移,同为元素本身和内容距离左偏1000像素。但需要注意的是left需要和position结合使用,需要定义position:absolute或者position:relative,如

.div1 
    position:sbsolute;
    left:1000px;


参考技术A animate(left:1000px,1000); 是用了定位position 让位置相对父节点如果没有就是相对BOD位置向右移动1000px;这是不占文档流的
animate(marginLeft:1000px,1000) 是相当于自己原来的位置移动1000px;这个是占文档流的
参考技术B 前一个是左移1000像素动画,后一个是边距加1000像素,
效果是不一样的!
参考技术C animate的具体方法是这样:$(selector).animate(styles,speed,easing,callback)

很简单就看出问题来了,styles里的left和marginLeft,分别是css盒子模型里的2个不同的属性。一个是元素的相对位置在x轴上左移1000像素,另一个是元素的左外边距加大1000像素。
left只有在相对和据对定位中设定了才有效果,但是marginLeft是没有前提条件就能满足的。
参考技术D 设置left属性只对position设置了relative、absolute、fixed的元素有效;
设置margin-left属性只对position为relative、static的元素有效!

Jquery demo

$(".logo").click(function () {

    $(this)
      .animate({ left: -200 })
      .animate({ left: 200 })
      .animate({ left: -200 })
      .animate({ left: 200 })
      .animate({ left: 0 });
});
//左右滑动

 

以上是关于jquery 的 animate(left:1000px,1000);和animate(marginLeft:1000px,1000);有啥区别呢?的主要内容,如果未能解决你的问题,请参考以下文章

jquery 的animate()方法可以改变背景颜色么?

jquery的animate怎么获取动画的CSS属性呢?

jquery的animate动画能不能在IE中执行

jQuery .animate() 回调无限循环

jquery animate 怎么延迟执行

jQuery .animate/.each 链接