vue 一行显示的动态消息

动态消息上翻显示

效果图
请添加图片描述
特点:

  1. 重复的信息,只显示一次
  2. 全部信息显示完后,只在轮播最后一个消息队列
  3. 若最后一个消息队列只有一条信息,则停止轮播,不轮播
  4. 新的消息队列进入后,触发新的轮播
<template><div class="message-list"><divv-for="(message, index) in messagesShow":key="index":class="['message-item',{ translateYing: index == 0 && translateYing },]"><slot v-bind="message">{{message}}</slot></div></div>
</template><script>
export default {props: {translateY: {type: Number,default: 22,},// 推送的消息messages: {type: Array,required: true,default: () => [],},// 静态展示时长newShowTime: {type: Number,default: 8,},// 动画切换时长newChangeTime: {type: Number,default: 1,},// 下一条是否取最新的isNewNews: {type: Boolean,default: true,}},data() {return {messagesShow: [],messagesStack: [],translateYing: false,isInAnimatingProgress: false,newShowedEnums: {},}},watch: {messages: {handler(newVal = []) {this.addMessage(newVal)},immediate: true,},},created() {// 测试 工具window.messageListCom = thiswindow.addMessage = this.addMessage/** mock 生成数组 */function mockArr(count = 10, cb = (id) => ({ id })) {return new Array(count).fill(undefined).map((item, index) => cb(index, index))}window.mockArr = mockArrconsole.log('示例 mockArr(10,(id)=>id)',mockArr())},methods: {updateNewShowedEnums(item) {const identificationKey = itemif (!this.newShowedEnums[identificationKey]) {this.newShowedEnums[identificationKey] = truereturn true}// console.log('已收集过的', item)return false},getNextNew() {if (this.isNewNews) {return this.messagesStack.pop()}return this.messagesStack.shift()},newMessageEmit() {if (!this.isInAnimatingProgress) {console.log(`新消息触发了动画 => %O `)this.animate()}},animate() {if (this.messagesShow.length === 0 && this.messagesStack.length) {this.messagesShow.push(this.getNextNew())}if (this.messagesShow.length === 1) {this.isInAnimatingProgress = truethis.setTimeoutId = setTimeout(() => {// console.log(`测试定时器离开页面后,是否仍在执行:this.setTimeoutId`)if (!this.messagesStack.length) {if (this.isTwoTimesShowLastMessages && this.messages.length == 1) {// 如果已完整的展示最后的消息队列一次,切且该队列只有一条消息就不再轮播this.isInAnimatingProgress = falsereturn}console.log('第 n 次,展示最后消息队列')this.isTwoTimesShowLastMessages = truethis.messagesStack = [...this.messages]// 清空去重的标识,避免页面长时间停留导致过占用this.newShowedEnums = {}this.messagesStack.forEach(this.updateNewShowedEnums)}if (this.messagesStack.length) {this.messagesShow.push(this.getNextNew())this.animate()}}, this.newShowTime * 1000)}if (this.messagesShow.length >= 2) {this.translateYing = truethis.setTimeoutId2 = setTimeout(() => {// console.log(`测试定时器离开页面后,是否仍在执行:this.setTimeoutId2`)this.translateYing = falsethis.messagesShow.shift()this.animate()}, (this.newChangeTime + 0.5) * 1000)}},addMessage(newVal = []) {this.messagesUniques = newVal.filter(this.updateNewShowedEnums)if (this.messagesUniques.length) {if (this.isTwoTimesShowLastMessages) {// 整个信息栈结束过// 以前的队列已每条都展示过,则直接以最新消息开始轮播this.messagesStack = [...this.messagesUniques]} else if (!this.messagesStack.length) {// 以前的队列已每条都展示过,则直接以最新消息开始轮播this.messagesStack = [...this.messagesUniques]} else {this.messagesStack = this.messagesStack.concat(this.messagesUniques)this.isTwoTimesShowLastMessages = false}this.newMessageEmit()}},},beforeUnmount() {clearTimeout(this.setTimeoutId)clearTimeout(this.setTimeoutId2)},
}
</script><style scoped>
.message-list {width: 300px;height: 22px;overflow-y: hidden;line-height: v-bind(translateY + 'px');.message-item {&.translateYing {margin-top: v-bind((-translateY) + 'px');transition: v-bind(newChangeTime + 's');}}
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/63133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html+css+JavaScript实现轮播图

html+css+JavaScript实现轮播图 实现思路 要实现一个轮播图功能,我们需要HTML来构建结构,CSS来设计样式,以及JavaScript来添加交互功能。下面我将分别分析这三个部分是如何协同工作来实现轮播图的。 HTML - 结构 HTML部分定义了轮播图的基本结构,包括图片列表、指示器和…

使用Unity脚本模拟绳索、布料(碰撞)

效果演示&#xff1a; 脚本如下&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;namespace PhysicsLab {public class RopeSolver : MonoBehaviour {public Transform ParticlePrefab;public int Count 3;public int Space 1;…

项目开发之Docker

文章目录 基础核心概念常用命令 实操1 windows11 docker mysql2 docker部署 xxljob3 container间调用异常问题4 部署mysql数据库5 docker desktop unexpected wsl error 基础 核心概念 其中的三个核心概念&#xff1a;dockerfile image/镜像 container/容器 image&#xff1a…

在Java中使用Apache POI导入导出Excel(六)

本文将继续介绍POI的使用&#xff0c;上接在Java中使用Apache POI导入导出Excel&#xff08;五&#xff09; 使用Apache POI组件操作Excel&#xff08;六&#xff09; 43、隐藏和取消隐藏行 使用 Excel&#xff0c;可以通过选择该行&#xff08;或行&#xff09;来隐藏工作表…

Ruby On Rails 笔记1——Rails 入门

突然想跟着官方文档把Ruby On Rails过一遍&#xff0c;把一些有用的记下来就可以一直看了&#xff0c;do它! https://guides.rubyonrails.org/v7.2/ 注&#xff1a;官网是英文文档&#xff0c;我自己翻译了一下&#xff0c;不确保完全准确&#xff0c;只供自己学习开发使用。 …

基于Matlab BP神经网络的电力负荷预测模型研究与实现

随着电力系统的复杂性和规模的不断增长&#xff0c;准确的电力负荷预测对于电网的稳定性和运行效率至关重要。传统的负荷预测方法依赖于历史数据和简单的统计模型&#xff0c;但这些方法在处理非线性和动态变化的负荷数据时&#xff0c;表现出较大的局限性。近年来&#xff0c;…

MperReduce学习笔记下

自定义InputFormat合并小文件 案例需求 无论hdfs还是mapreduce&#xff0c;对于小文件都有损效率&#xff0c;实践中&#xff0c;又难免面临处理大量小文件的场景&#xff0c;此时&#xff0c;就需要有相应解决方案。 案例分析 小文件的优化无非以下几种方式&#xff1a; …

中国汽车出海风口下,智能网联供应商如何掘金海外市场?

中国智能网联供应链出海掘金潮已至。 中国汽车工业协会最新发布的数据显示&#xff0c;2024年1-8月乘用车累计出口317.5万辆&#xff0c;同比增长29.4%。2023年中国汽车出口量近500万台&#xff0c;出口的销量对中国汽车总销量增长的贡献率达到55.7%。 根据各大车企披露的规划…

react + antd desgin 使用form功能时upload,radio,checkbox不能回显的问题

最近使用react开发 遇到form回显的问题 &#xff0c;处理upload回显的问题&#xff0c;提示 react-refresh:160 Warning: [antd: Upload] value is not a valid prop, do you mean fileList? 查看文档后&#xff0c;在form.item 组件下有一个特殊属性 valuePropName 子节点的值…

Visual Studio开发lua脚本环境搭建

在Visual Studio上开发lua脚本环境搭建 1、下载lua的jdk安装&#xff0c;以及环境变量配置 下载LuaForWindows_v5.1.5-52.exe安装&#xff0c; 安装好之后&#xff0c;检查是否路径自动。 下载地址&#xff1a; https://github.com/rjpcomputing/luaforwindows/releases (1…

Elasticsearch ILM 故障排除:常见问题及修复

作者&#xff1a;来自 Elastic Stef Nestor 大家好&#xff01;我们的 Elasticsearch 团队正在不断改进我们的索引生命周期管理 (index Lifecycle Management - ILM) 功能。当我第一次加入 Elastic Support 时&#xff0c;我通过我们的使用 ILM 实现自动滚动教程快速上手。在帮…

初步简单的理解什么是库,什么是静态库,什么是动态库

库是什么 库根据名字我们应该很容易理解&#xff0c;在我们日常生活种&#xff0c;包含库的东西有很多&#xff0c;像仓库&#xff0c;库房那些&#xff0c;库是拿来存放&#xff0c;方便管理东西的&#xff0c;在我们编程当中&#xff0c;库的定义也是如此 那么为什么要有库…

建筑行业数据分析如何做?

导读&#xff1a;在谈数字化转型之前&#xff0c;先来谈谈数据的价值。数字化转型的基础是数据&#xff0c;是数字化的基本的生产资料&#xff0c;数据的质量直接决定了数字化的能力、所能达到的深度和广度。目前做的数据可视化项目总感觉只是数据展现而已&#xff0c;而不达不…

服务器监控工具哪吒探针 v1 版本上线 全新设计带来新体验

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 上周黑五期间&#xff0c;哪吒探针进行了一次颇有争议的 Breaking Change 更新&#xff0c;将面板和 Agent 升级到了 v1 版本&#xff0c;并且与原来的 v0.x 版本完全不兼容。 同时&#xff0c;将 v0.x 的…

QNX的资源管理器:resmgr

参考资料: QNX官网文档 openqnx源码参考 这篇文章借用一下openqnx中的trunk/services/dumper/dumper.c作为参考 以下代码参考openqnx,现在的QNX许多机制或许有大致改进和调整,但是基本上不会跳出这个框架 在Linux中,一切设备皆文件,在/dev目录下,一个文件标识一个或多…

Node.js 中的文件系统(fs)模块详解与代码示例

Node.js 中的文件系统&#xff08;fs&#xff09;模块详解与代码示例 Node.js 的 fs 模块提供了与文件系统交互的能力&#xff0c;包括文件的读写、目录的管理等。以下是 fs 模块中一些常用方法的详细解释和代码示例&#xff1a; 1. 异步读取文件内容 作用&#xff1a;异步读…

LabVIEW密码保护与反编译的安全性分析

在LabVIEW中&#xff0c;密码保护是一种常见的源代码保护手段&#xff0c;但其安全性并不高&#xff0c;尤其是在面对专业反编译工具时。理论上&#xff0c;所有软件的反编译都是可能的&#xff0c;尽管反编译不一定恢复完全的源代码&#xff0c;但足以提取程序的核心功能和算法…

灰狼算法与蚁群算法的结合:一种新颖的优化方法

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

【前端学习路线】(超详细版本)

先附上学习路线图&#xff1a;前端学习路线 第一阶段&#xff1a;前端入门&#xff08;htmlcss&#xff09; 前端最基本的知识&#xff0c;需要先将这些内容融汇贯通&#xff0c;学习后面内容才会不吃力。学习完可以做几个静态页练习一下。 推荐视频学习链接&#xff1a; 黑马程…

四、自然语言处理_03LSTM与GRU

0、前言 随着循环神经网络&#xff08;RNN&#xff09;在各种序列数据处理任务中被广泛应用&#xff0c;研究人员逐渐发现了其在处理长序列数据时会容易出现梯度消失&#xff08;vanishing gradient&#xff09;和梯度爆炸&#xff08;exploding gradient&#xff09;问题&…