JS滚动数字组件封装-初识ES5面向对象编程-动画与定位方式transition和transfrom的优缺点兼容性对比

本文介绍了如何使用JavaScript封装一个滚动数字组件,深入探讨了ES5中的面向对象编程,包括原型链的使用。同时,文章对比了CSS动画方式transition和transform的优缺点及兼容性处理,最后提供了组件的HTML、CSS和JS代码实现。
摘要由CSDN通过智能技术生成

1.效果展示

滚动数字组件效果
动图如上,但是帧率不高,显示的效果可能有点不好,可以访问艾媒集团官网-艾媒监测查看效果。

2.需求分析

在这个动画效果中,我们可以看到,滚动的区域就是最里面的矩形区域,滚动的内容分为两种,一种是可以滚动的数字,一种是不允许滚动的分隔符。
设矩形局域的类名为box,数字内容的类名为num,分隔符的类名为separator。可得矩形区域所具有的固定样式如下:

.box{
	display : inline-block;/*为了让容器的宽度自适应内容,如果不需要则去除*/
	overflow : hidden;/*或overflow-y:hidden。总之垂直方向的溢出一定要隐藏*/
	white-space : nowrap;/*内容不允许换行,如果需要多行则需要创建多个box*/
}

而数字内容和分隔符与父元素高度的关系如下:
滚动数字组件原理
上面的图不知道大家看懂了多少,我这里再稍微解释一下,为什么要用相对定位去做动画。首先,如果不考虑外部情况的话,让一个盒子距离现有位置的顶部距离发生改变的话,方法有这么几种。我这里列举一下,并说一下优点缺点。

2.1 定位方式对比

定位方法 所属排版流派 优点 缺点
margin 标准流 简单,很多人都会用 当使用maring-top:100%时得到的值是父元素的宽度值,即上下左右的margin的%只以父元素的宽度为参照
padding 标准流 简单 padding无法使用负值,所以单纯使用padding无法实现元素的向上移动。
小结 标准流 简单,常见 共同缺点,使用padding或margin都容易导致父元素或子元素的宽高因为挤压而发生改变。加上无法实现便捷地上下移动,因此不考虑使用标准流实现动画
transfrom css3 功能强大,支持xyz3轴的平移旋转 浏览器兼容问题需要开发者手动解决,例如向上移动一格,CSS的标准属性为transfrom: translateY(-100%);但是有些浏览器因为版本更新问题无法支持标准CSS3属性,必须用带前缀的属性,常见的前缀有-webkit- 、-moz-、-ms-、-o-。分别对应chrome、firefox、IE和opera五大浏览器中的四个。完整的transfrom属性见表后2.2.1示例。
top(absolute) 定位流 排版稳定,常见 绝对定位的元素会脱离标准流,导致父元素无法识别到子元素宽高,从而无法根据子元素宽高来做宽高自适应
top(relative) 定位流 不脱离标准流、排版稳定,常见 暂无

2.2 动画方式介绍和优缺点对比

想让一个元素实现动画或者说是过渡效果,一般有几种方式。
1.是使用css的transition属性,例如想让div.box元素的宽度属性有一个0.4s的过渡动画,则可以设置

.box{
	transition: width 0.4s;/*或transition: all 0.4s;*/
}

但是因为是CSS3的新增属性,transform和transition一样需要做兼容处理。

2.2.1 transfrom的兼容处理

示例代码如下:

.box{
	-webkit-transfrom: translateY(-50%);/*兼容老版本chrome浏览器*/
	-ms-transfrom: translateY(-50%);/*兼容老版本IE*/
	-moz-transfrom: translateY(-50%);/*兼容老版本firefox*/
	-o-transfrom: translateY(-50%);/*兼容老版本opera浏览器*/
	transfrom: translateY(-50%);/*标准写法*/
}

可以看到,为了使得transform属性在各大浏览器上都可以正常使用,我们需要同时设置5个属性,分别是1个标准属性和4个浏览器私有属性。如果写在css中还好,但是当我们要用js去动态设置transform的位置时就会显得

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月桦剑士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值