在Vue中使用CSS3实现内容无缝滚动的示例代码


Posted in Vue.js onNovember 27, 2020

一、效果预览

最近在做一个活动页面,遇到幸运用户中奖的滚动公告需求。下面是实现效果:

在Vue中使用CSS3实现内容无缝滚动的示例代码

(gif录制略显卡顿,实际效果很流畅)

二、无缝滚动原理

1、容器宽高固定,超出内容隐藏;
2、内容准备2份,现参与滚动的内容有A、B两份,向左滚动;
3、滑动过程中,B份紧随A份之后,营造出无缝滚动回来的效果;
4、在A部分内容完全滚出容器的一瞬间,立刻将AB内容位置复原,由于A、B内容一模一样,这个复原过程很难看出来;
5、循环第3步;

在Vue中使用CSS3实现内容无缝滚动的示例代码

三、代码

1、html部分

<template>
  <div class="lucky-user">  <!-- 容器 -->
    <ul class="user-list" :style="`animation-duration: ${luckyUsers.length * 4}s;`">  <!-- 内容区容器 -->
     <li v-for="(item, index) in luckyUsers" :key="index">{{ item }}</li>   <!-- 内容A -->
     <li v-for="(item, index) in luckyUsers" :key="index+'copy'">{{ item }}</li>  <!-- 内容B -->
    </ul>
  </div>
</template>

2、CSS部分

.lucky-user {
  width: 540px; //容器定宽高
  height: 30px;
  margin: 0 auto;
  font-size: 18px;
  line-height: 30px;
  color: #E9B65F;
  overflow: hidden; //超出内容隐藏
  .user-list {
    width: fit-content; // Q1
    white-space: nowrap; // 内容不换行
    animation-name: seamless-scrolling; // Q3
    animation-timing-function: linear; // 动画速度曲线,匀速
    animation-iteration-count: infinite; // 动画循环无限次播放
    li {
      display: inline-block;
      margin-right: 30px;
    }
  }
}

@keyframes seamless-scrolling {
  0% {
    transform: translateX(0px);
  }
  100% {
    transform: translateX(-50%); //Q2
  }
}

Q1:因为滚动内容一般都不是固定的,需要接口获取,所以内容区的宽度也就无法确定,这里使用CSS3的新特性width: fit-content,使宽度自适应内部内容,至于为什么这里需要设置宽度属性,见下文
Q2:设置动画。由于内容区实际有AB两份,B是A的副本,所以一段动画的终点就是内容区向左位移50%(内容区width的50%),这也就解释了Q1中为什么一定要设置宽度属性了:如果不设置,width的值不会随内容撑开,此时的50%是父容器width的50%,终点值就错了
Q3:为什么animation不采用简写形式,而是拆开? 因为animation-duration 动画时长不能固定,如果接口获取到的数据很多,动画时长固定5s,那滚动地得有多快?所以animation-duration采用属性绑定形式,根据数据长度进行延长  :style="animation-duration: ${luckyUsers.length * 4}s;" 具体乘几看自己喜欢。
我也试过采用简写形式进行style属性绑定,结果发现动画不生效。

3、JS部分

export default {
 name: 'app',
  data() {
   return {
    luckyUsers: []
   }
  },
  created() {
   this.getLuckyUsersList()
  },
  methods: {
   getLuckyUsersList () {
     //调接口拿取数据
     this.luckyUsers = [
      '000000抽中了xxx奖品',
      '111111抽中了xxx奖品',
      '222222抽中了xxx奖品',
     ]
    }
  }
}

四、总结

无缝滚动的实现主要借助了css3中的animation、width:fit-content自适应属性、translate位移等特性;
从实现原理上看,其实就是一个欺骗眼睛的小伎俩而已~

到此这篇关于在Vue中使用CSS3实现内容无缝滚动的示例代码的文章就介绍到这了,更多相关Vue CSS3无缝滚动内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
如何使用 vue-cli 创建模板项目
Nov 19 Vue.js
基于vue与element实现创建试卷相关功能(实例代码)
Dec 07 Vue.js
vue实现两个区域滚动条同步滚动
Dec 13 Vue.js
Vue使用鼠标在Canvas上绘制矩形
Dec 24 Vue.js
Vue实现随机验证码功能
Dec 29 Vue.js
vue项目如何监听localStorage或sessionStorage的变化
Jan 04 Vue.js
Vue过滤器,生命周期函数和vue-resource简单介绍
Jan 12 Vue.js
详解Vue的七种传值方式
Feb 08 Vue.js
VUE实现吸底按钮
Mar 04 Vue.js
vue-cropper组件实现图片切割上传
May 27 Vue.js
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
Jun 09 Vue.js
Vue监视数据的原理详解
Feb 24 Vue.js
vuex的数据渲染与修改浅析
Nov 26 #Vue.js
vue动态合并单元格并添加小计合计功能示例
Nov 26 #Vue.js
vue单元格多列合并的实现
Nov 26 #Vue.js
VUE项目实现主题切换的多种方法
Nov 26 #Vue.js
Vue项目如何引入bootstrap、elementUI、echarts
Nov 26 #Vue.js
vue实现广告栏上下滚动效果
Nov 26 #Vue.js
Vue组件生命周期运行原理解析
Nov 25 #Vue.js
You might like
BBS(php &amp; mysql)完整版(六)
2006/10/09 PHP
用PHP制作的意见反馈表源码
2007/03/11 PHP
php中邮箱地址正则表达式实现与详解
2012/04/24 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
2014/07/28 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
2015/08/25 PHP
Laravel中Trait的用法实例详解
2016/03/16 PHP
PHP折半(二分)查找算法实例分析
2018/05/12 PHP
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
2010/02/07 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
教你如何使用node.js制作代理服务器
2014/11/26 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
2017/05/18 Javascript
jQuery简单绑定单个事件的方法示例
2017/06/10 jQuery
jQuery实现checkbox即点即改批量删除及中间遇到的坑
2017/11/11 jQuery
javaScript和jQuery自动加载简单代码实现方法
2017/11/24 jQuery
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
python 实现堆排序算法代码
2012/06/05 Python
python的常见命令注入威胁
2013/02/18 Python
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
python中常用检测字符串相关函数汇总
2015/04/15 Python
Python中类型关系和继承关系实例详解
2015/05/25 Python
Python获取运行目录与当前脚本目录的方法
2015/06/01 Python
python的命名规则知识点总结
2019/10/04 Python
python内打印变量之%和f的实例
2020/02/19 Python
Python第三方库的几种安装方式(小结)
2020/04/03 Python
python中关于数据类型的学习笔记
2020/07/19 Python
Python爬虫之Selenium实现关闭浏览器
2020/12/04 Python
HTML5页面音视频在微信和app下自动播放的实现方法
2016/10/20 HTML / CSS
美国第一香水网站:Perfume.com
2017/01/23 全球购物
PHP如何自定义函数
2016/09/16 面试题
十八大演讲稿
2014/05/22 职场文书
学风建设主题班会
2015/08/17 职场文书
python pygame 开发五子棋双人对弈
2022/05/02 Python