利用CSS实现带相同间隔地无缝滚动动画

摘要:
1、html通过class是wrap的div把可视区域固定在30PX高度内,在此区域中的为可见区域,在此之外的为不可见区域2、CSS.contentp:nth-child//这里是为了获得每一个p数据,例子中具体写明了1,2。

说明:因为在移动上主要利用CSS来做动画,所以没有考虑其他浏览器的兼容性,只有-webkit这个前缀,如果需要其他浏览器,请自行补齐。

首先解释一下什么是无缝滚动动画,

例如下面的例子

See the Pen css实现上下循环滚动效果 by lilyH (@lilyH) on CodePen.

-------------------------------------------------------------------------------

实现原理:

  1. 首先需要滚动的是每一条数据,而不是数据外面包裹的父元素
  2. 保证每一条数据循环滚动的时间相同,只是他们之间滚动到可视区域的时间段不同
  3. 平分滚动的整个时间段,保证每条数据滚动的时间间隔相同

以上三条,看起来就头疼,也太绕了,下面直接说明例子中的实现方法。

1、html

通过class是wrap的div把可视区域固定在30PX高度内,在此区域中的为可见区域,在此之外的为不可见区域

2、CSS

(1).content p:nth-child(n) // 这里是为了获得每一个p数据,例子中具体写明了1,2。可以用n代替,比如2n表示偶数位置上的子元素 .content p:nth-child(2n)就是表示p元素位于0,2,4位置上的元素

(2)-webkit-animation: anim1 3s linear infinite; //这里注意的是,每一个p元素只有动画名称不同,其他的都是相同的,包括动画的时间,效果,方式等

(3)关键的就在于每一个动画如何在做,如下图所示

利用CSS实现带相同间隔地无缝滚动动画第1张

假设图中0的位置是可视区域,那么滚动的时候,数据需要从2滚动到0再滚动到1位置,只要保证每条数据进入可视区域到离开可视区域的时间相同,那么就能计算出每个数据动画位置。

另外还需要说明的是,为什么题目中说的是有间隔地,因为实际上数据从位置0移动到位置1以后,下一条数据才从位置2开始移动进入0. 所以如果滚动的是2条,那么第一条从2到1的动画时间就是0%到50%,第2条数据的动画时间就是50%到100%,为了保证在动画能循环出现,所以还需要设置动画在其他的时间段时是不可见的,并且回到初始的位置。

@-webkit-keyframes anim1{0% {top:30px;opacity:1}50% {top:-30px;opacity:1}75% {top:-30px ;opacity:0}/*为了做隐藏**/100%{top:30px;opacity:0}/*让数据回到原始的位置**/}
      @-webkit-keyframes anim2{
        0% {top:-30px;opacity:0}/**为了做隐藏*/25% {top:30px;opacity:0}/**让数据回到原始的位置**/50% {top:30px;opacity:1}100%{top:-30px;opacity:1}}

      .content p:nth-child(1){background-color:red;}.content p:nth-child(2){background-color:yellow;}

OK,有N条数据,就用100%/N,得到每一条数据的区间,用这种计算方法得到的每条数据的运动区间与间隔区间是同样的时间。。

当然用这种方法有一个不太好控制的地方在于,当数据条数是除以100不为整数的时候,时间间隔可能不是很准备;比如如果数据是3条,那么得到的每个数据的运动间隔就是100/3 ≈ 33%

免责声明:文章转载自《利用CSS实现带相同间隔地无缝滚动动画》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Win7下的内置FTP组件的设置详解验证码实现的技术与方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue-cli3热更新配置,解决热更新失败的问题,保存代码浏览器自动刷新

在vue,config.js中配置css热更新 const IS_PROD = ['production', 'test'].includes(process.env.NODE_ENV) css:{ //是否使用css分离插件ExtractTextPlugin extract:IS_PROD, //开启CSSsourcemaps? sourceMap...

在css使用自定义字体

在css文件中通过@font-face自定义字体,src 为字体文件的相对路径。 @font-face { font-family: "LED";//为字体取名字 src: url("fonts/HD_UnidreamLED.ttf") format('truetype');//字体文件 } //在样式中使用该字体 .led { font-size:50...

浏览器工作原理和实践(三)——页面

《浏览器工作原理与实践》是极客时间上的一个浏览器学习系列,在学习之后特在此做记录和总结。 一、事件循环 消息队列是一种数据结构,可以存放要执行的任务。它符合队列“先进先出”的特点,也就是说要添加任务的话,添加到队列的尾部;要取出任务的话,从队列头部去取。 从上图可以看出,改造可以分为下面三个步骤: (1)添加一个消息队列; (2)IO 线程中产生的新任务...

css补充之hover与overflow

1、hover是鼠标移动到当前标签上时,对应的css属性生效。 padding是给a标签按上、右、下、左的顺序加上边框 hover下面的属性: background-color: blue;当鼠标移动到使用hover的标签上时,该属性生效。 <!DOCTYPE html><html lang="en"><head>...

iOS AppIcon透明圆角导致的动画问题

今天设计师给了一个如下AppIcon,四边是透明的圆角区域。 这个图标在iOS14上正常显示没什么问题,但是当使用上滑手势让程序退到后台时,在程序缩小到图标的过程中,动画的4个脚都显示出了不正确的黑色块,十分难看。如下图: 后来发现,如果吧透明圆角去掉,直接使用方形,如下图,就可以解决问题。ios14系统会自动把图标切成带圆角的样式,显示在桌面上。...

给微信小程序添加简单小动画

需要实现的效果很简单,当微信小程序跳转到该页面时,微信登录BUTTON从右往左淡入出现,手机登录BUTTON从左往右淡入出现,类似于animation.css的简单效果 官方文档上是这样说的: ①创建一个动画实例 animation。 ②调用实例的方法来描述动画。 ③最后通过动画实例的 export 方法导出动画数据传递给组件的 animation 属性...