1.前言

  • 文本行滚动组件,效果如图

2.封装思路

  • 封装一个组件,接收一个数组,每个数组元素就是一个段文本
  • 组件使用httpVueLoader进行封装加载
  • 使用css位移,配合过渡效果才展示动画
  • 滚动逻辑类似与轮播图,需要将第一行文本复制一份到最后,当已经滚动到最后时,则关闭动画,重置到第一行
  • 使用定时器动态调整位移大小
  • 位移大小使用百分比,因为使用像素值有小数点误差
  • 接收5个参数:
参数名称 默认值 说明
data [] 文本行数组
size normal 字体大小 normal, small, size
color #333 字体颜色
interval 10 轮播间隔,单位/秒
loop true 是否开启自动循环

3.代码

<template>
<div :class="['text-row-scroll-wrap','size-'+size]" :style="{'height': boxHeight,'color':color}">
<div class="text-row-scroll-box" :style="{'transform': `translateY(${setTop})`}"
:class="{'closeAnimation': closeAnimation}">
<div class="ep-scroll-row" v-for="(item,i) in rowList" :key="i">{{item}}</div>
</div>
<div v-if="data.length==0" style="color: #999;text-align: center;">暂无数据</div>
</div>
</template> <script>
module.exports = {
data() {
return {
active_index: 0,//当前展示的下标位置
timer: null,//定时器id
closeAnimation: false,//关闭动画效果 当切换到最后一行,且动画完成时,需要回退到
}
},
props: {
size: {
type: String,
default: "normal"
},
color: {
type: String,
default: "#333"
},
data: {
type: Array,
default: function () {
return []
}
},
interval: {
type: Number,
default: 10
},
loop:{
type:Boolean,
default: true
}
},
watch:{
data:{
deep:true,
handler:function(newVal,oldVal){
if(newVal.length > 0){
//初始化
this.init()
}else{
//关闭轮播定时器
clearInterval(this.timer)
this.active_index = 0
}
},
immediate:true
}
},
mounted() { },
methods:{
//初始化轮播
init() {
clearInterval(this.timer)
this.active_index = 0
//如果列表为空 则什么也不做
if(this.data.length==0){
return
}
//如果未开启循环 且长度==1,也无需开启定时器
if(this.data.length == 0 && !this.loop){
return
}
//开启定时器
this.timer = setInterval(() => {
//开启动画
if (this.closeAnimation) {
this.closeAnimation = false
} //行下标++
this.active_index++ //等待动画结束
setTimeout(() => {
//判断是否开启了循环
if(!this.loop){
//判断是否已经到了最后一个
if(this.active_index >= this.data.length-1){
console.log('已经到了最后一个 关闭轮播')
//关闭循环定时器
clearInterval(this.timer)
}
}else{
//是否到了最后一个(伪)
if (this.active_index >= this.rowList.length - 1) {
//关闭动画
this.closeAnimation = true
//等待关闭动画的渲染
this.$nextTick(function () {
console.log('关闭动画的渲染')
console.log('重置到第一行')
//重置到第一行
this.active_index = 0
}) }
}
}, 0.5 * 1000 + 2)
}, this.interval * 1000)
}
},
computed: {
//将第一行复制一份到最后,类似于轮播图
rowList() {
if (this.data.length == 0) {
return []
} else {
var rowList = [...this.data]
rowList.push(this.data[0])
return rowList
}
},
//最外层容器的高度应该是刚好一行的高度,每行高度由字体大小和padding决定
//当前三种模式 ,调试后记录其每种模式下的高度
//每个模式下 最外层容器的高度
boxHeight() {
if (this.size == 'small') {
return '24px'
} else if (this.size == 'mini') {
return '20px'
} else {
return '29px'
}
},
//当前位移
setTop() {
var top = 0
//如果没数据 则返回0
if (this.data.length != 0) {
top = (this.active_index / this.rowList.length * 100 * -1) + '%'
return top
}
},
}
}
</script> <style scoped>
.text-row-scroll-wrap {
overflow: hidden;
} .text-row-scroll-box {
transition: all 0.5s;
} .text-row-scroll-box.closeAnimation {
transition: none;
} .size-normal .ep-scroll-row {
font-size: 16px;
padding: 3px;
} .size-small .ep-scroll-row {
font-size: 14px;
padding: 2px;
} .size-mini .ep-scroll-row {
font-size: 12px;
padding: 1px;
}
</style>

4.基本使用

  • 组件引入与注册
new Vue({
el:"#app",
data(){
return {
row_list:[
"日检:完成比例:0% / 未完成比例:100% / 点检异常比例:0%",
"周检:完成比例:1.2% / 未完成比例:98.8% / 点检异常比例:0%"
]
}
},
components:{
"text-row-scroll": httpVueLoader('./text-row-scroll.vue?time='+new Date().getTime())
},
})
  • 基本使用
<text-row-scroll :data="row_list"></text-row-scroll>

Vue.js 文本行滚动的更多相关文章

  1. Vue.js文档

    参考网址:https://vuefe.cn/ 第一  安装 1.下载到本地后使用<script>标签直接引入 2.使用CDN引入 例如:使用CDN引入 <script src=&qu ...

  2. Vue.js文档学习

    Vue细碎小点 生命周期钩子:created().mounted().updated().destroyed() 不要在选项属性或回调上使用箭头函数,比如 created: () => cons ...

  3. Vue.js起手式+Vue小作品实战

    本文是小羊根据Vue.js文档进行解读的第一篇文章,主要内容涵盖Vue.js的基础部分的知识的,文章顺序基本按照官方文档的顺序,每个知识点现附上代码,然后根据代码给予个人的一些理解,最后还放上在线编辑 ...

  4. Vue.js 2.0 和 React、Augular

    Vue.js 2.0 和 React.Augular 引言 这个页面无疑是最难编写的,但也是非常重要的.或许你遇到了一些问题并且先前用其他的框架解决了.来这里的目的是看看Vue是否有更好的解决方案.那 ...

  5. Vue.js响应式原理

      写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出. 文章的原地址:answershuto/learnV ...

  6. Vue.js中ref ($refs)用法举例总结

    原文地址:http://www.cnblogs.com/xueweijie/p/6907676.html <div id="app"> <input type=& ...

  7. Vue.js项目脚手架构建

    vue.js文档:https://cn.vuejs.org/v2/guide/ 参考这个或者参考菜鸟教程也可以,不过还是那句话官网权威. 我这个主要是看相关的学习视频搭建的. 一.环境准备 环境准备( ...

  8. Vue.js系列之项目结构说明

    转:https://www.jb51.net/article/111658.htm 前言 在上一篇项目搭建文章中,我们已经下载安装了node环境以及vue-cli,并且已经成功构建了一个vue-cli ...

  9. Vue.js实现前段评论展示

    本来想着给这个博客弄个回复系统(类似知乎的回复),最初的实现思路是这样的:主评论后台渲染,前台新增的评论,回复用jquery操作dom放到页面上.实现的时候感觉好复杂,大量的dom操作,目前前段框架不 ...

  10. vue.js学习笔记(一)——vue-cli项目的目录结构

    vue.js是一套构建用户界面的渐进式框架.vue采用自底向上增量开发的设计.vue的核心库只关心视图层,非常容易学习,非常容易与其它库和已有项目整合.vue完全有能力驱动采用单文件组件和vue生态系 ...

随机推荐

  1. SQL Management studio copy paste result out (string_agg line break)

    refer : https://stackoverflow.com/questions/59283754/string-agg-with-line-break string agg char(10) ...

  2. Maven高级——多环境配置与应用

    多环境配置与应用 开发步骤 定义多环境 <!--配置多环境--> <profiles> <!--开发环境--> <profile> <id> ...

  3. 手搓大模型Task01:LLama3模型讲解

    前言   主要进行Qwen模型架构进行讲解. 1.Qwen整体介绍   Qwen的整体架构与Llama2类似,如下图所示: tokenizer将文本转为词表里面的数值. 数值经过embedding得到 ...

  4. foobar2000 v2.1.2 汉化版(更新日期: 2024.02.27)

    新春佳节,送上一份新年礼物,祝您在新的一年里,万事如意,心想事成,身体健康,事业有成,财源广进,家庭和睦,笑容常开,好运连连.     foobar2000 v2.1.2 汉化版 ---------- ...

  5. 安装mysql5.7报错启动失败(3534)的处理

    一 ,在官网下载好了mysql5.7之后,解压到对应的文件的夹下 二, 在cmd中进入到mysql下单bin目录下,一定要是管理员权限,执行mysqld --initialize 命令,会看到根目录下 ...

  6. excel江湖异闻录--◆K

    网名◆K,按照群里同学的说法,K神和老大kluas,以及一个名为KKK的VBA强人,都是K字头家族的高手. 因为函数实力极强,时常碾压难题,被群里同学们冠以了"K神"的称号. 用笔 ...

  7. 线段树介绍(segment tree)

    1.引入 给定一个区间\([1, n]\),希望你实现一种数据结构,支持以下操作: 1.修改\(i\)号节点的值. 2.询问区间\([i, j]\)中所有节点的和. 这不是树状数组板子 3.修改区间\ ...

  8. Win11使用Translucent TB设置Windows导航栏透明失败解决方案

    Win11使用Translucent TB设置Windows导航栏透明失败解决方案 Translucent TB下载方式:直接在Windows自带的Microsoft应用商店里面搜索下载就可以了 1. ...

  9. KubeSphere v4 开源并发布全新可插拔架构 LuBan

    2024 年 10 月 10 日,KubeSphere 开源社区激动地向大家宣布,KubeSphere v4(开源版)已正式发布,同时发布全新可插拔架构 KubeSphere LuBan. 相较于 K ...

  10. KubeSphere 开源 KubeEye:Kubernetes 集群自动巡检工具

    为什么开源 KubeEye Kubernetes 作为容器编排的事实标准,虽然架构优雅功能也非常强大,但是 Kubernetes 在日常运行过程中总会有一些疑难杂症和隐性的问题让集群管理员和 Yaml ...