纯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:@[email protected];
@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([email protected]*@height);
    transform: translateY([email protected]*@height);
  }
  @end:percentage((@[email protected])/100);
  @{end}{
    -webkit-transform: translateY([email protected]*@height);
    transform: translateY([email protected]*@height);
  }
  .myLoop(@counter,@everyUpTime,@everyDelayTime,@height,(@[email protected][email protected]),(@index+1));
}

//调用循环,生成@keyframes
@keyframes scroll {
  .myLoop(100,@everyUpTime,@everyDelayTime,@height,0,0);
  @end:percentage(1);
  @{end}{
    -webkit-transform: translateY([email protected]*@height);
    transform: translateY([email protected]*@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;
}

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

如有问题,欢迎留言(???)

时间: 2024-12-29 01:48:49

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

纯css3代码写无缝滚动效果

主要用到css3中的动画 @keyframes, animation. 布局是外层一个div宽固定,然后overflow hidden 绝对定位,里面的ul 固定定位.通过对ul添加动画来实现效果.具体代码如下 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title&

9种纯CSS3人物信息卡片UI设计效果

这是一组纯CSS3人物信息卡片UI设计效果.这组人物信息卡片共9种效果,每种效果在鼠标滑过卡片时,通过CSS3使图片和HTML元素变形生成 非常漂亮的鼠标滑过动画特效. 在线预览   源码下载 使用方法 HTML结构 该人物信息卡片的基本HTML结构如下: <div class="single-member effect-3"> <div class="member-image"> <img src="demo.jpg&quo

纯CSS3实现的动感菜单效果

1. [代码] 纯CSS3实现的动感菜单效果 <!DOCTYPE html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>纯CSS3实现的动感菜单效果 - 模板巴士www.mobanbus.cn</title> <style type="text/css"> 

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

效果:http://hovertree.com/texiao/css3/1/ 本效果主要使用text-shadow实现.参考:http://hovertree.com/h/bjaf/css3_text_effect.htm 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>超炫CSS3文字特效集锦DEMO演示 - 何问起</title>

CSS3实现文字扫光效果

本篇文章由:http://xinpure.com/css3-text-light-sweep-effect/ CSS3 实现的文字扫光效果,几乎可以和 Flash 相媲美了 效果解析 我们分析一下实现这个效果需要实现的功能: 实现一个扫光背景块,因为光是移动的,所以要加入渐变效果 (例如: 手电筒照射的一小块区域) 将扫光背景块控制到文本上 (即实现文本背景) 实现扫光动画 (扫光块从左往右循环移动) 思路理清了,接下来就是一步一步实现了 背景渐变 -webkit-linear-gradient

文字上下滚动效果

案例: 第一种:直接用<marquee></marquee>   最终效果可以实现,但是据说用户效果不好(我不知道原因) HTML代码: ◎ direction   表示滚动的方向,值可以是left,right,up,down,默认为left ◎ behavior   表示滚动的方式,值可以是scroll(连续滚动)slide(滑动一次)alternate(往返滚动) ◎ loop   表示循环的次数,值是正整数,默认为无限循环 ◎ scrollamount   表示运动速度,值是

jquery实现文字上下滚动效果

文字上下滚动是经常用到的js效果,这里介绍一种上下渐隐渐出的文字展现效果! 代码实现很简单,只需要引入jquery就可以. 代码如下: <!DOCTYPE> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>文字滚动</title> <style type="text/css

javaScript 利用随机数和定时器完成几个有用的文字小操作 文字的滚动效果,文字的打印效果和文字的颜色闪烁

文字的滚动 <body> <textarea id="textarea"></textarea> <script> str=" 文 字 的 滚 动 效 果"; function roll(){ str=str.substr(1,str.length)+str.substring(0,1); document.getElementById("textarea").style.fontSize=&quo

css3实现文字渐变动画效果

利用css3这个属性(背景剪裁): background-clip: border-box || padding-box || context-box || no-clip || text 本次用到的就是: -webkit-background-clip:text; 栗子: 1. <style> .masked{ text-align: center; background-image: -webkit-linear-gradient(left, #147B96, #E6D205 25%, #