场景:

假设有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. php 中 ">>" "<<" 的含义

    运算符  说明 <<<    管道,引入自c++.将被其后标记括起来的内容视为一个字符串处理,其中的变量会被展开 <<     左移,位操作算符 >>     ...

  2. Android驱动中的remap_pfn_range()校验漏洞(CVE-2013-2596)

    简单介绍 当然类似函数还有io_remap_pfn_range(). remap_pfn_range() 为用户态提供了一种手段访问内核地址空间.它通过新页表,将一块内核物理内存映射到用户态进程空间. ...

  3. 简易计算器的java实现

    伪代码 public class MainTestwei { 定义两个数组,List<Double> number和 List<Character>calculation分别用 ...

  4. 1px的实现方法

    1.用伪元素实现 .border_1px_top{ position:relative;} .border_1px_top:before{ content: ""; positio ...

  5. 20155208徐子涵 2016-2017-2 《Java程序设计》第5周学习总结

    20155208徐子涵 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 异常处理 8.1 语法与继承结构 Java中所有错误都会被打包为对象,运用tr ...

  6. ubuntu shell插件

    1. NetSpeed 在状态栏显示当前网速 2. Screenshot Tool 同样在 Ubuntu 18.04 之前我们使用 Shutter,但在Ubuntu 18.04 Shutter的托盘图 ...

  7. [动态差分+二维前缀和][小a的轰炸游戏]

    链接:https://ac.nowcoder.com/acm/contest/317/E来源:牛客网 题目描述 小a正在玩一款即时战略游戏,现在他要用航空母舰对敌方阵地进行轰炸 地方阵地可以看做是n× ...

  8. 拷贝某个区间(copy,copy_back)

    copy 为outputIterator中的元素赋值而不是产生新的元素,所以outputIterator不能是空的 如要元素安插序列,使用insert成员函数或使用copy搭配insert_itera ...

  9. npx:npm包执行器

    npx 作用: 单次执行命令而不需要安装到本机 执行依赖包里的二进制文件 使用不同版本的 node 利用 npx 可以下载模块这个特点,可以指定某个版本的 Node 运行脚本.它的窍门就是使用 npm ...

  10. linux配置 ssh 免密 登录

    1:第一步给每一台电脑生成公私钥 使用   在 root 目录下面 使用  ssh-keygen -t rsa ,然后不停敲回车.就可以生成公私钥.默认放在  .ssh 目录下面. 2:进入.ssh ...