场景:

假设有4条数据或者标题,视口中只显示两条,采用每次向上滚动一条数据来展示所有的数据。效果如图:

用JavaScript也很容易实现,但是需要操作DOM,可以参考这篇博客。考虑到项目中经常使用Vue,已经很少操作DOM了,所以考虑最好通过CSS来实现,可以通过Vue给模板元素动态绑定class来实现相同的功能,如果需要考虑css3兼容性的话,可以去使用JavaScript去完成。

主要用到了css3的两个属性:@framekeys和animation

通过 @keyframes 规则,能够创建动画。创建动画的原理是,将一套 CSS 样式逐渐变化为另一套样式。

animation能够将动画与元素绑定。

注意:由于视口中显示两条数据,所以要把最前面的两行数据拼接在所有最后面,主要是为了避免一次动画完成之后即所有的数据都已经滚动到视口的上方,等待下一次动画的过程中会有空白出现的现象,把最前面的两行数据拼接在最后面,当除了拼接的数据以外的其他数据滚动到视口上方时,拼接的数据临时占位等待下一次动画出现,不至于出现空白。

HTML代码如下:

<div>
<ul>
<li>第一行</li>
<li>第二行</li>
<li>第三行</li>
<li>第四行</li>
<li>第一行</li>
<li>第二行</li>
</ul>
</div>

使用less编写样式代码如下:

//必须给定的参数
@height:30px;//每次滚动的距离
@num:4;//需要滚动多少条数据
@animatinTime:5s;//多长时间完成所有数据的向上滚动一次 //可选的参数
@delayRatio:4;
@upRatio:1;//延迟滚动时间和滚动一条数据所用到的时间之比 //内部计算使用到的变量,不需要对其赋值
@ratioSum:@delayRatio+@upRatio;
@eachSum:1/@num;
@everyUpTime:@eachSum*@upRatio/@ratioSum*100;
@everyDelayTime:@eachSum*@delayRatio/@ratioSum*100; //使用循环生成@keyframes动画的时间节点
.myLoop(@counter,@everyUpTime:1,@everyDelayTime:4,@height:30px,@i:0,@index:0) when(@i < @counter){
@start:percentage(@i/100);
@{start}{
-webkit-transform: translateY(-@index*@height);
transform: translateY(-@index*@height);
}
@end:percentage((@i+@everyDelayTime)/100);
@{end}{
-webkit-transform: translateY(-@index*@height);
transform: translateY(-@index*@height);
}
.myLoop(@counter,@everyUpTime,@everyDelayTime,@height,(@i+@everyDelayTime+@everyUpTime),(@index+1));
} //调用循环,生成@keyframes
@keyframes scroll {
.myLoop(100,@everyUpTime,@everyDelayTime,@height,0,0);
@end:percentage(1);
@{end}{
-webkit-transform: translateY(-@num*@height);
transform: translateY(-@num*@height);
}
} //封装成mixin,方便在其他需要动画的位置调用
.scroll(){
-webkit-animation: scroll @animatinTime infinite;
} //举例
div{
width: 200px;
height: 60px;
overflow: hidden;
}
ul{
height: 100%;
width: 100%;
.scroll();
}
li{
line-height: 30px;
height: 30px;
}

编译后的css代码为:

@keyframes scroll {
0% {
-webkit-transform: translateY(0px);
transform: translateY(0px);
}
20% {
-webkit-transform: translateY(0px);
transform: translateY(0px);
}
25% {
-webkit-transform: translateY(-30px);
transform: translateY(-30px);
}
45% {
-webkit-transform: translateY(-30px);
transform: translateY(-30px);
}
50% {
-webkit-transform: translateY(-60px);
transform: translateY(-60px);
}
70% {
-webkit-transform: translateY(-60px);
transform: translateY(-60px);
}
75% {
-webkit-transform: translateY(-90px);
transform: translateY(-90px);
}
95% {
-webkit-transform: translateY(-90px);
transform: translateY(-90px);
}
100% {
-webkit-transform: translateY(-120px);
transform: translateY(-120px);
}
}
div {
width: 200px;
height: 60px;
overflow: hidden;
}
ul {
height: 100%;
width: 100%;
-webkit-animation: scroll 5s infinite;
}
li {
line-height: 30px;
height: 30px;
}

此时,就已经完成了需要的功能,此处只是以向上滚动为例,其他方向的滚动类似。

如有问题,欢迎留言(・∀・)

纯css3实现文字间歇滚动效果的更多相关文章

  1. 纯css3代码写无缝滚动效果

    主要用到css3中的动画 @keyframes, animation. 布局是外层一个div宽固定,然后overflow hidden 绝对定位,里面的ul 固定定位.通过对ul添加动画来实现效果.具 ...

  2. 【css】纯css实现文字循环滚动效果

    不用js来实现. html: <div class="box"> <p class="animate"> 文字滚动的内容文字滚动的内容文 ...

  3. CSS3实现文字折纸效果

    CSS3实现文字折纸效果 效果图: 代码如下,复制即可使用: <!DOCTYPE html> <html> <head> <title></tit ...

  4. 纯CSS3实现的动感菜单效果

    1. [代码] 纯CSS3实现的动感菜单效果 <!DOCTYPE html><head><meta http-equiv="Content-Type" ...

  5. Long Shadows Generate是一款在线使用纯CSS3实现长阴影的效果,一款强大的扁平化长投影制造器。

    Long Shadows Generate是一款在线使用纯CSS3实现长阴影的效果,一款强大的扁平化长投影制造器. Long Shadows Generate 彩蛋爆料直击现场 Long Shadow ...

  6. js实现文字上下滚动效果

    大家都知道,做html页面时,为了提升网页的用户体验,我们需要在网页中加入一些特效,比如单行区域文字上下滚动就是经常用到的特效.如下图示效果: <html> <head> &l ...

  7. 9种纯CSS3人物信息卡片动态展示效果

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  8. 纯css3艺术文字样式效果代码

    效果:http://hovertree.com/texiao/css3/1/ 本效果主要使用text-shadow实现.参考:http://hovertree.com/h/bjaf/css3_text ...

  9. 纯CSS3实现轮播切换效果

    使用纯css3实现与轮播器一样的功能. HTML代码: <div class="slide-container"> <input type="radio ...

随机推荐

  1. vsftp管理脚本(CentOS6用)

    #!/bin/bash # ### BEGIN INIT INFO # Provides: vsftpd # Required-Start: $local_fs $network $named $re ...

  2. sudo with no password

    /********************************************************************************* * sudo with no pa ...

  3. SQL内外连

    分组查询select 查询信息 from 表名where 条件group by 按照列分组(可多个 ,隔开)order by 排序方式(查询信息如果列名和聚合函数同时出现,要么在聚合函数中出现,要么就 ...

  4. putty 、xshell的使用 和 putty 、xshell、 shell 间免密登陆

    相关软件的使用: ######################################################################### 以上是相关软件的使用! 以下是免密 ...

  5. 斐波那契 - pythoon实现

    def fn_1(n): if n == 0 : return n elif n == 1 : return n else: a = [0,1] for i in range(2,n): a.appe ...

  6. centos6安装opencv2

    环境 centos6.5 opencv2.4 python2.6(centos自带的) 下载 opencv可从GitHub下载https://github.com/opencv/opencv/tree ...

  7. 马拉车 o(n)(最长连续回文串) hdu 3068

    #include<bits/stdc++.h> ; using namespace std; +]; string manacher(string ss) { string tt=&quo ...

  8. PyCharm下载安装

    PyCharm 是一款功能强大的 Python 编辑器,具有跨平台性,鉴于目前最新版 PyCharm 使用教程较少,为了节约时间,来介绍一下 PyCharm 在 Windows下是如何安装的. 这是 ...

  9. 生产环境部署MongoDB副本集(带keyfile安全认证以及用户权限)

    本文同步于个人Github博客:https://github.com/johnnian/Blog/issues/8,欢迎留言. 安装软件包:mongodb-linux-x86_64-3.4.1.tgz ...

  10. linux kernel笔记

    文章目录 关于linux内核中的__attribute__关键字 Linux kernel启动参数 gdt / ldt PCB 关于linux内核中的__attribute__关键字 part I: ...