Vue实现公告循环横向播报组件

一、代码组件

        注意:当公告字数很少时会固定不动,当字数达到最大宽度时,则会循环播报

<template><div class="TopCard"><!-- 小喇叭 --><div style="width: 70px"><notify style="width: 20px;height: 20px;margin-top: 5px"/></div><!-- 滚动文字外层div,文字能展示的区域--><div class="noticeBox" :style="'width:'+noticeWidth+'px;height:20px;position:relative;overflow:hidden;display:inline-block;vertical-align:middle;'"><!-- 滚动div,marginLeft变化--><div :style="'margin-left:'+marginLeft+'px;white-space:nowrap'"><span class="showNotice">{{showNotice}}</span><!-- 不会展示,用来测量第二条与第一条重合时的长度 --><span class="notice">{{notice}}</span></div></div></div>
</template><script>import notify from '../assets/icon/notify.svg'export default {name: 'Home',components:{notify},props:{noticeData:{type:Array,default:[]}},data () {return {// 适应屏幕分辨率noticeWidth: window.screen.width - 150,// 公告展示(过长时会重复两遍)showNotice: '',// 用于公告过长时,获取重复两遍中第一遍的长度notice: '',// 公告初始位置marginLeft: 150}},mounted () {this.noticeData.forEach((val, index) => {if (index === 0) {this.showNotice += '【' + (index + 1) + '】' + val} else {this.showNotice += '\xa0\xa0\xa0\xa0\xa0\xa0【' + (index + 1) + '】' + val}})// 公告上面先赋值,再获取宽度setTimeout(() => {// 公告div长度var oneNoticeWidth = document.getElementsByClassName('showNotice')[0].offsetWidth// 公告外层div长度var noticeBoxWidth = document.getElementsByClassName('noticeBox')[0].offsetWidth// 一条公告长度太大时,才滚动if (oneNoticeWidth > noticeBoxWidth) {// 滚动公告需要将公告重复两遍进行滚动,两遍中间需要加空格this.notice = this.showNotice + '\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0'// 上面先赋值,再获取宽度setTimeout(() => {// 获取一遍加中间空格的长度,即左移时第二遍与第一遍完全重合时的长度var oneNoticeAddEmptyWidth = document.getElementsByClassName('notice')[0].offsetWidth// 公告内容重复两遍this.showNotice = this.notice + this.showNoticethis.timer = setInterval(() => {this.marginLeft -= 1// 第二遍与第一遍起始位置重合时(第一条已完全移到左侧隐藏),marginLeft置0,即回到第一条if (this.marginLeft === (-1) * oneNoticeAddEmptyWidth) {this.marginLeft = 0}}, 20)}, 10)} else { //公告并没有很长时不滚动this.marginLeft = 0}}, 10)},}
</script><style scoped >/* 公告card */.TopCard .el-card__body{padding:0 10px}/* 公告title */.tips{color:#606266;font-weight:bold}.TopCard{display: flex;flex-direction: row;align-items: center;}
</style>

二、使用

<template><div ><div class="headers-middle" ><Notice v-if="this.noticeData.length>0" :noticeData="noticeData"/></div></div>
</template><script>import Notice from "../Notice";export default {data() {return {noticeData: [],}},components: {Notice,},methods: {broadcastContent(){//获取后端的公告数据service.get("/users/config/notice").then(res=>{console.log(res)if (res.code===20000){if (res.message!=null){this.setNoticeData(res.message)}}})},setNoticeData(notice){if (this.noticeData!=null && this.noticeData.length!==0){this.noticeData[0] = notice}else {this.noticeData = [];this.noticeData.push(notice)}}},mounted() {this.broadcastContent();}}
</script><style scoped>.headers-middle{position: absolute;left: 300px;top: 10px;width: 45%;}
</style>

三、效果图(循环播报)

图一:

图二:

 

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

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

相关文章

【Qt+MSVC2017_64bit +Cmake新建项目编译出错】

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 项目新电脑环境配置 QtMSVC2017_64bit Cmake新建项目编译出错 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; QtMSVC2017_64bit Cmake新建项目编译出错 Running C:\Program Fil…

【Boost】:parser代码的基本结构(二)

parser代码的基本结构 一.总体概述二. EumeFile的实现三.ParserHtml的实现四.SaveHtml实现五.完整源代码 打开parser.cc,用vscode或者vim都行。 一.总体概述 首先递归式的把文件名和路径读入一个数组内&#xff0c;接着把数组内的每一个数据按照一定的格式进行划分&#xff0c;…

Flask框架开发学习笔记《5》简易服务器代码

Flask框架开发学习笔记《5》 Flask是使用python的后端&#xff0c;由于小程序需要后端开发&#xff0c;遂学习一下后端开发。 简易服务器代码 接口解析那一块很关键&#xff0c;学后端服务器这一块&#xff0c;感觉主要就是学习相应地址的接口怎么处理。 然后写清楚每个地址…

springboot 文件下载

前言 文件下载: 将服务器某个资源文件下载到用户本地计算机过程称之为文件下载 用户通过浏览器访问页面&#xff0c;点击链接之后&#xff0c;就能从服务器下载本地中。 具体思路&#xff1a; a.确定项目中哪些资源可以被下载 aa.txt 用户须知.doc … b.将可以被下载资源放入服…

MySQL篇----第三篇

系列文章目录 文章目录 系列文章目录前言一、InnoDB与MyISAM的区别二、索引三、常见索引原则有前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、InnoDB与MyISAM…

上海市七普分乡、镇、街道数据, Shp、excel格式,多年龄段人口分布数据均有

基本信息. 数据名称: 上海市七普分乡、镇、街道数据 数据格式: Shp、excel 数据几何类型: 面 数据坐标系: WGS84 数据时间&#xff1a;2020年 数据来源&#xff1a;网络公开数据 数据字段&#xff1a; 序号字段名称字段说明1zrks总人口数&#xff08;人&#xff09;…

【类和对象】4

日期类的拓展 c语言中的printf函数只能打印内置类型&#xff0c;为了弥补这一不足&#xff0c;c利用运算符重载可以打印自定义类型。 void operator<<(ostream&out);//声明在date.h中void Date::operator<<(ostream& out)//定义在date.cpp中 {out<<…

Java正则表达式之Pattern和Matcher

目录 前言一、Pattern和Matcher的简单使用二、Pattern详解2.1 Pattern 常用方法2.1.1 compile(String regex)2.1.2 matches(String regex, CharSequence input)2.1.3 split(CharSequence input)2.1.4 pattern()2.1.5 matcher(CharSequence input) 三、Matcher详解3.1 Matcher 常…

wangEditor v4的简单使用

当前文档是 wangEditor v4 版本的。 wangEditor v5 已经正式发布&#xff0c;可参考文档。 v5 发布之后&#xff0c;v4 将不再开发新功能。 介绍 English documentation wangEditor4 —— 轻量级 web 富文本编辑器&#xff0c;配置方便&#xff0c;使用简单。 官网&#…

[python]基于LSTR车道线实时检测onnx部署

【框架地址】 https://github.com/liuruijin17/LSTR 【LSTR算法介绍】 LSTR车道线检测算法是一种用于识别和定位车道线的计算机视觉算法。它基于图像处理和机器学习的技术&#xff0c;通过对道路图像进行分析和处理&#xff0c;提取出车道线的位置和方向等信息。 LSTR车道线…

「效果图渲染」效果图与3D影视动画渲染平台

效果图渲染和3D影视动画渲染都是视觉图像渲染的领域应用。效果图渲染主要服务于建筑、室内设计和产品设计等行业&#xff0c;这些领域通常对视觉呈现的精度和细节有较高要求。与之相比&#xff0c;3D影视动画渲染则普遍应用于电影、电视、视频游戏和广告等媒体领域&#xff0c;…

项目安全-----加密算法实现

目录 对称加密算法 AES &#xff08;ECB模式&#xff09; AES(CBC 模式)。 非对称加密 对称加密算法 对称加密算法&#xff0c;是使用相同的密钥进行加密和解密。使用对称加密算法来加密双方的通信的话&#xff0c;双方需要先约定一个密钥&#xff0c;加密方才能加密&#…