纯css3实现文字间歇滚动效果
场景:
假设有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实现文字间歇滚动效果的更多相关文章
- 纯css3代码写无缝滚动效果
主要用到css3中的动画 @keyframes, animation. 布局是外层一个div宽固定,然后overflow hidden 绝对定位,里面的ul 固定定位.通过对ul添加动画来实现效果.具 ...
- 【css】纯css实现文字循环滚动效果
不用js来实现. html: <div class="box"> <p class="animate"> 文字滚动的内容文字滚动的内容文 ...
- CSS3实现文字折纸效果
CSS3实现文字折纸效果 效果图: 代码如下,复制即可使用: <!DOCTYPE html> <html> <head> <title></tit ...
- 纯CSS3实现的动感菜单效果
1. [代码] 纯CSS3实现的动感菜单效果 <!DOCTYPE html><head><meta http-equiv="Content-Type" ...
- Long Shadows Generate是一款在线使用纯CSS3实现长阴影的效果,一款强大的扁平化长投影制造器。
Long Shadows Generate是一款在线使用纯CSS3实现长阴影的效果,一款强大的扁平化长投影制造器. Long Shadows Generate 彩蛋爆料直击现场 Long Shadow ...
- js实现文字上下滚动效果
大家都知道,做html页面时,为了提升网页的用户体验,我们需要在网页中加入一些特效,比如单行区域文字上下滚动就是经常用到的特效.如下图示效果: <html> <head> &l ...
- 9种纯CSS3人物信息卡片动态展示效果
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- 纯css3艺术文字样式效果代码
效果:http://hovertree.com/texiao/css3/1/ 本效果主要使用text-shadow实现.参考:http://hovertree.com/h/bjaf/css3_text ...
- 纯CSS3实现轮播切换效果
使用纯css3实现与轮播器一样的功能. HTML代码: <div class="slide-container"> <input type="radio ...
随机推荐
- Python学习笔记第四周
目录 一.基础概念 1.装饰器 1.装饰器本质就是函数 2.实现装饰器知识储备 1.函数即变量 2.高阶函数 3.嵌套函数 例子 1.将一个函数名作为实参传递给另外一个函数 2.返回值为函数名 3.函 ...
- HDU2019数列有序!
Problem Description 有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序. Input 输入数据包含多个测 ...
- AtCoder Grand Contest 031 B - Reversi
https://atcoder.jp/contests/agc031/tasks/agc031_b B - Reversi Time Limit: 2 sec / Memory Limit: 1024 ...
- Android 播放内部mp3音乐
private void heartSound() { try { AssetManager am = getAssets();//获得该应用的AssetManager AssetFileDescri ...
- POI导出Excel--合并单元格
package com.test.util; import java.io.FileNotFoundException; import java.io.FileOutputStream; import ...
- Writing and playing with custom Terraform Providers
转自:https://petersouter.xyz/writing-and-playing-with-custom-terraform-providers/ I’ve been digging de ...
- lch 儿童围棋课堂 初级篇1 ( (李昌镐 著))
第1章 常用术语 第2章 吃子 第3章 死活:死活题初步 第4章 劫争 第5章 中盘 第6章 官子 第7章 形势判断 第8章 对杀技巧 第9章 手筋 第1章 常用术语 一 镇 在对方棋子上方隔一路落下 ...
- Bat相关的项目应用
原 bat 命令如何启动远程PC上的一个程序? 原 bat 自动解压缩,发布asp.net程序 原 bat 自动更新代码,编译,压缩asp.net程序 原 bat自动备份压缩文件 原 bat命令ora ...
- python之路---03 整型 bool 字符串 for循环
十三.整型(int) 基本操作: 1.+ - * / % // ** 2. .bit_length() 计算整数在内存中占⽤的⼆进制码的⻓度 如: 十四.布尔值(bool) True False ...
- docker nginx 运行后无法访问
## 1 最近在学docker部署,一开始打算将nginx先docker化的. 对照官方的docker镜像介绍说明,进行自定义配置 将官方的nginx.conf复制出来后,修改添加了一些自定义,主要是 ...