杂记(animate方法实现元素居中)

17 篇文章 0 订阅
11 篇文章 0 订阅

1 动画实现margin:auto;

想要使用动画效果令元素居中,我首先反应到的是使用transition或者animate()方法,然而animate()只接受数值作为参数,即如

$("#div").animate({margin:'20px auto'},'slow')

是无效的,同样的使用transition这个CSS属性也是对于直接定义margin:20px auto;也是达不到预期想要的动画效果。
解决方法就是

  • 通过JavaScript进行计算,把margin:20px auto;时的marginLeft数值给算出来
  • 赋值于animate()方法,而且要添加animate()的回调函数用来真正定义margin:20px auto;

值得注意的是使用以下形式获取marginLeft数值有几个需要注意的地方:

var marginLeft = $('#div').css('width','20px auto').css('marginLeft');

第一个,这样读取数值的时候,元素样式也会随之改变,所以读取数据后还要进行样式还原才能赋值于animate()方法
第二个,为了兼容,常常使用jQuery1.8.3版本,当使用jQuery1.8.3版本时,使用以上方法读出的marginLeft值在不同浏览器会得出不同的数值,如Chrome得出的是正确的数值,而Firefox得出的是0px(使用高版本如3.2.1输出正常),IE8得出的是auto
那么如何解决第二个问题,首先我第一想法是舍弃jQuery,使用原生JavaScript来获取marginLeft,这里又有几个我理解不足的知识点了

2 stylegetComputedStyle()以及currentStyle

参考网站:获取元素CSS值之getComputedStyle方法熟悉

2.1 style属性

JavaScript改变样式常常会使用到style属性,然而在读取方面使用style属性只能读取该元素的内联样式声明,而该元素在<sytle>元素或CSS文件中定义的样式并无法读取。

2.2 getComputedStyle()方法(IE9)

getComputedStyle()方法用于获取当前元素所有最终使用的CSS属性值,语法为:

var e = document.getElementById('abc');
alert(getComputedStyle(e).width);//getComputedStyle还可以接受伪类作为第二个参数

还有getProperValue()如:getComputedStyle(e)).getPropertyValue('width'),详情请看上面的参考网站

2.3 currentStyle属性

IE浏览器并不支持getComputedStyle()方法,它们使用特定的属性currentStyle属性,语法为:

var e = document.getElementById('abc');
alert(currentStyle(e).width);

还有getAttribute()currentStyle(e).getAttribute('width'),详情请看上面的参考网站


所以最终的查询方法可以编写为:

var e = document.getElementById('abc');
alert((e.currentStyle ? e.currentStyle : getComputedStyle(e)).marginLeft)

但是使用原生的查询方法查询marginLeft,IE依旧输出auto,火狐依旧输出0px

3 innerWidthouterWidthclientWidthoffsetWidth

最后想出的办法是先求出改动元素当前的宽度以及当前浏览器的body相减除以二求出最后的marginLeft,这里又引出了一堆我的知识盲区。。

3.1 innerWidthinnerWidth()方法

JavaScript的innerWidth属性(IE8前版本不支持)只用于window对象(直接使用width无效),作用是求出浏览器宽度(包括滚动条,不包括工具栏)
innerWidth()方法是jQuery的方法,作用是读取元素内容区宽度内边距之和的数值

直接读取$(window).Width()可得出去除滚动条的浏览器宽度,注意输出为数字而不是字符串,使用css()方法输出称为字符串后缀px

3.2 outerWidthouterWidth()方法

JavaScript的outerWidth属性(IE8前版本不支持)只用于window对象,作用是求出浏览器宽度(包括滚动条,包括工具栏)
outerWidth()方法是jQuery的方法,作用是读取元素内容区宽度内边距边框长度之和的数值,若outerWidth()方法添加第二参数true,即读取元素内容区宽度内边距边框长度外边距之和的数值

3.3 clientWidth属性

JavaScript的clientWidth属性,jQuery中的innerWidth()方法实质就是输出这个值

3.4 offsetWidth属性

JavaScript的offsetWidth属性,jQuery中的outerWidth()方法实质就是输出这个值

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要现到达某个元素旁的动画效果,可以使用 jQuery 的 `animate()` 方法和 `offset()` 方法。`offset()` 方法可以获取元素的位置信息,从而让我们知道动画需要过渡到哪个位置。具体步骤如下: 1. 引入 jQuery 库。 2. 获取目标元素和当前元素。可以使用 `$` 函数、`id` 或其他选择器来获取元素。 3. 使用 `offset()` 方法获取目标元素的位置信息。 4. 使用 `animate()` 方法,让当前元素过渡到目标元素的位置。可以使用对象或字符串的形式来设置多个属性。 5. 设置过渡时间和缓动函数。过渡时间越长,动画的速度就越慢。缓动函数会影响动画的加速度和减速度,从而让动画更加自然。 示例代码如下: HTML ```html <button id="btn">点击我</button> <div id="box1"></div> <div id="box2"></div> ``` CSS ```css #box1 { position: absolute; top: 200px; left: 200px; width: 100px; height: 100px; background-color: red; } #box2 { position: absolute; top: 400px; left: 400px; width: 100px; height: 100px; background-color: blue; } ``` JavaScript ```javascript $('#btn').click(function() { var targetOffset = $('#box2').offset(); $('#box1').animate({ 'top': targetOffset.top, 'left': targetOffset.left }, 1000, 'easeOutElastic'); }); ``` 在 JavaScript 中,我们使用了 jQuery 的 `$` 函数来获取元素。当按钮被点击时,我们使用 `offset()` 方法获取了目标元素的位置信息。然后,我们调用了 `animate()` 方法来让当前元素过渡到目标元素的位置。`animate()` 方法的第一个参数是一个对象,用于设置要过渡的 CSS 属性和终止值。`animate()` 方法的第二个参数是过渡时间,单位是毫秒。第三个参数是缓动函数,可以使用 jQuery 提供的预设函数(如 `easeOutElastic`)或自定义函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值