模仿 velocity.js 实现 DOM 动画类库(三)
|
先来解决开始值与结束值单位不一致的问题。
单位转换
原理分析
假设动画元素初始宽度为300px
,现在需要将其改变为50%
,这就肯定需要将单位与值进行转换了,计算300px
是百分之多少,或者计算50%
是多少像素,这都和父容器宽度有关,所以首先是要获取到父容器了。
但是,velocity
并没有获取父容器的宽度,而是将动画元素的宽度设为10%
,再获取到宽度则为父容器宽度的10%
,再除以10
就得到比率。
用实际例子来说明,假设父容器宽度为1314px
,动画元素宽度为300px
,首先是将动画元素宽度设为10%
后使用getComputedStyle
得到宽度为131.4px
,再除以10
就得到13.14
,最后300/1/13.14
得到300px
占父容器的百分比。
而这个值,恰恰是300/1314/100
也能够计算得到的结果。