< elementUi组件封装: 通过 el-tag、el-popover、vue动画等实现公告轮播 >

news2024/11/15 19:36:36

在这里插入图片描述

文章目录

  • 👉 前言
  • 👉 一、效果演示
  • 👉 二、实现思路
  • 👉 三、实现案例
  • 往期内容 💨


👉 前言

在 Vue + elementUi 开发中,遇到这么一个需求,要实现公告轮播的效果。说实话,一开始是打算通过Javascript去获取并修改对应元素来控制轮播的,但是发现这样子代码比较多,而且性能不是很好。

然后…聪明的小温想到了,能不能通过vue的动画过渡,实现公告的滚动效果呢! 一不做二不休,直接上手,果然是可以实现的!

接下来,简单阐述下,开发中使用方法!

tips: vue动画过渡 - Transition 官方文档


👉 一、效果演示

话不多说,先上效果图! 白嫖万岁!当然,如果有帮助,希望不要吝啬你的点赞呀!

在这里插入图片描述

👉 二、实现思路

通过对一个index进行公告显示条数进行记录,然后通过定时器定时显示/关闭,实现对应元素的动画入场和出场动画效果!

借助elementUI中的popover组件,利用showhide方法,实现鼠标悬浮暂停轮播功能,鼠标移出继续轮播!

直接看代码吧! 简单易懂!

由于案例中,公告内容是富文本,所以说,本文用了之前提到的富文本组件,混杂了富文本回显的,大伙可以直接忽略即可!

👉 三、实现案例

> HTML模板

<template>
<span class="carousel">
  <template v-if="announcementList.length !== 0">
      <Transition name="slide-fade">
        <el-popover
          placement="bottom"
          trigger="hover"
          v-show="announcemenShow"
          @show="announcemenClose"
          @hide="announcemenOpen"
        >
          <p
            style="
              min-width: 200px;
              max-width: 30vw;
              max-height: 25vh;
              overflow-y: auto;
            "
            v-html="announcementList[announcemenIndex].label"
            class="el-tiptap-editor__content"
          ></p>
          <div style="text-align: right;">
            <el-button
              type="text"
              style="font-weight: bold; padding: 2px 0;"
              @click="goAnnouncemen"
            >查看详情</el-button>
          </div>
          <el-tag
            slot="reference"
            effect="dark"
            style="cursor: pointer;"
            :type="tagType[announcementList[announcemenIndex].type] || ''"
            @click="goAnnouncemen"
          >
            <i class="el-icon-message" style="padding-right: 5px;" > {{ announcementList[announcemenIndex].type }} :</i>
            {{ deleteHtml(announcementList[announcemenIndex].label) }}
          </el-tag>
        </el-popover>
      </Transition>
      
    </template>
    <el-tag v-else type="info">暂无公告</el-tag>
  </span>
</template>

> Js模板

let Data = {
	announcemenTimer: null,
    announcemenShow: true,
    announcemenIndex: 0,
    announcementList: [
      {
        label: '本系统由于技术原因,将于2023年4月25日 16:00开始系统更新,预计花费2小时。将于当天18:00完成本次更新!',
        type: '更新公告'
      },
      {
        label: '风控中心,监测模块问题维护',
        type: '紧急维护'
      },
      {
        label: '数据错位',
        type: '重要通知'
      },
      {
        label: '测试444',
        type: '其他'
      },
      {
        label: '测试555',
        type: '其他'
      },
    ],
    // 对应显示tag样式
    tagType: {
      '更新公告': '',
      '紧急维护': 'danger',
      '重要通知': 'warning',
      '其他': 'info',
    },
}

created() {
	this.announcemenOpen()
},
//页面销毁时清除定时器  
beforeDestroy() {    
	clearInterval(this.announcemenTimer);
},

menthods: {
	// 开启公告轮播
    announcemenOpen() {
      if(this.announcementList.length <= 1) {
        return
      }
      this.announcemenTimer = setInterval(() => {
        this.announcemenShow = false
        // window.console.log(this.announcemenIndex)
        setTimeout(() => {
          if(this.announcemenIndex < this.announcementList.length - 1) {
            this.announcemenIndex++
          } else {
            this.announcemenIndex = 0
          }
          this.announcemenShow = true
        }, 500) // 过渡动画衔接时间,和过渡动画样式对应,需要错开一点时间,视觉上看起来更流畅一点
      }, 5000) // 轮播信息滞留时间
    },
    // 关闭公告轮播
    announcemenClose() {
      clearInterval(this.announcemenTimer);
    },
    // 跳转公告页面
    goAnnouncemen() {
      if(this.$route.path == '/announcements') {
        this.$message.info('您已在公告页面,请查看公告!')
        return
      }
      
      this.$router.push({
        path: "/announcements",
        query: {
          actNav: 6,
          index: '6-3'
        },
      });
    },
}

> CSS 模板

// 动画样式
<style>
.slide-fade-enter-active {
  animation: slide-fade-in 0.8s;
}
.slide-fade-leave-active {
  animation: slide-fade-out 0.6s;
}
@keyframes slide-fade-out {
  0% {
    transform: translateX(0);
  }
  100% {
    transform: translateX(-240px);
    opacity: 0;
  }
}
@keyframes slide-fade-in {
  0% {
    transform: translateX(240px);
    opacity: 0;
  }
  100% {
    transform: translateX(0);
    opacity: 1;
  }
}
</style>

// 页面样式
<style scoped lang="scss">
.carousel {
	width: 300px;
	color: #fff;
	margin-right: 15px;
	overflow: hidden;
	display: flex;
	align-items: center;
	/deep/ {
		.el-popover__reference-wrapper {
			display: flex;
			align-items: center;
		}
		.el-tag {
			width: 280px;
			margin: 0 10px;
			border-radius: 3px;
			text-align: left;
			overflow: hidden;
			text-overflow: ellipsis;
			white-space: nowrap;
		}
	}
}
</style>

案例较为粗浅,仅供参考!


往期内容 💨

🔥 < CSDN周赛解析:第 28 期 >

🔥 < elementUi 组件插件: el-table表格拖拽修改列宽及行高 及 使用注意事项 >

🔥 < 每日小技巧:N个很棒的 Vue 开发技巧, 持续记录ing >

🔥 < CSDN周赛解析:第 27 期 >

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

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

相关文章

大家进来了解2023年6月CDGA/CDGP数据治理认证考试报名

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

多个微服务怎么放入一个tomcat

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

(一)Linux 环境下搭建 ElasticSearch (CentOS 7)

目录 1、搭建 Linux 相关环境 2、执行解压操作 3、创建新用户 4、修改配置文件 elasticsearch.yml 5、启动 ElasticSearch 6、修改虚拟机配置文件 7、重新启动 ElasticSearch 8、查看是否启动命令 9、访问 ElasticSearch 1、搭建 Linux 相关环境 没有服务器安装VM&a…

Golang每日一练(leetDay0043)

目录 127. 单词接龙 Word Ladder &#x1f31f;&#x1f31f;&#x1f31f; 128. 最长连续序列 Longest Consecutive Sequence &#x1f31f;&#x1f31f; 129. 求根节点到叶节点数字之和 Sum Root-to-leaf Numbers &#x1f31f;&#x1f31f; &#x1f31f; 每日一练…

QML控件和对话框之ApplicationWindows

ApplicationWindows ApplicationWindows应用程序窗口Action菜单类控件3.StatusBar4.工具栏控件类 ApplicationWindows应用程序窗口 Application Window在 Qt Quick Controls中类似于QMain Window 在 Qt/C中的角色&#xff0c;ApplicationWindow可以充当应用程序顶层窗口&#…

气传导耳机是什么原理?气传导蓝牙耳机优缺点分析

气传导耳机&#xff0c;简而言之&#xff0c;就是一种通过空气振动进行声音传播的耳机&#xff0c;采用波束成形技术进行定向传音&#xff0c;开放双耳设计模式&#xff0c;将音频传送到耳朵。 其发声途径&#xff0c;和我们双耳聆听到环境音以及人声的途径都是一样的&#xf…

UART协议——异步全双工串行通信方式

文章目录 前言一、简介1、优点2、缺点 二、数据格式三、波特率1、定义2、波特率和采样频率 四、常见接口电平1、TTL电平2、RS232&#xff08;负逻辑&#xff09;3、RS485 前言 2023.4.22 世界地球日 一、简介 UART&#xff1a;Universal Asynchronous Receiver/Transmitter&a…

数据驱动+AI引擎,为MarTech打开全新的想象空间

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 近年来&#xff0c;随着全球数字化、信息化进程不断提速&#xff0c;企业营销的战场也逐渐转移至线上。一方面&#xff0c;消费者行为的数字化使得企业营销活动更加依赖于线上数字营销&#xff1b;另一方面&#xff0c;包括…

Python3 字符串

Python3 字符串 字符串是 Python 中最常用的数据类型。我们可以使用引号( 或 " )来创建字符串。 创建字符串很简单&#xff0c;只要为变量分配一个值即可。例如&#xff1a; var1 Hello World! var2 "Runoob" Python 访问字符串中的值 Python 不支持单字符…

MySQL-CENTOS7下MySQL单实例安装

MySQL单实例安装 1 版本下载2 MySQL安装2.1 创建目录并解压2.2 安装数据库2.3 安装RPM包2.4 启动服务2.5 连接MYSQL 3 MYSQL卸载卸载4 FAQ 1 版本下载 mysql下载 选择对应的版本。我选择的是的8.0.31的版本。 2 MySQL安装 2.1 创建目录并解压 mkdir /mysql mkdir /mysql/s…

chatgpt智能提效职场办公-ppt怎么转pdf文件

作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 要将PPT转为PDF文件&#xff0c;可以按照以下步骤操作&#xff1a; 1.打开PPT文件&#xff0c;点击“文件”菜单&#xff0c;选择“导出…

浅析商场智能导购系统功能与实施效益

商场智能导购系统是一种基于物联网技术和人工智能算法的解决方案&#xff0c;旨在提供商场内部的智能导购服务&#xff0c;为消费者提供个性化的购物导引和推荐&#xff0c;提升用户购物体验&#xff0c;增加商场的客流量和销售额。 商场智能导购系统的方案一般包括以下主要功能…

react中前端同学如何模拟使用后端接口操作数据?

为什么前端同学需要模拟后端数据 作为一个前端&#xff0c;在实现项目功能的时候&#xff0c;需要在前端写一个静态的json数据&#xff0c;进行测试。 项目中后端的接口往往是较晚才会出来&#xff0c;并且还要写接口文档&#xff0c;于是我们的前端的许多开发都要等到接口给…

pytest中的钩子函数:pytest_addoption(parser)

# python3 # Time : 2023/4/21 9:05 # Author : Jike_Ma # FileName: conftest.pyimport pytesthosts {"dev": "http://dev.com.cn","prod": "http://prod.com.cn","test": "http://test.com.cn" }# 注册一个…

使用WSL在Windows上安装Ubuntu

1. 清理环境 查看当前的wsl 状态&#xff0c;wsl --list 可以列出当前系统中已安装的子系统。 选择需要清理的系统&#xff0c;然后用 wsl --unregister <DistributionName> 即可完成卸载。 将 wsl 默认版本设置为 2&#xff1a; wsl --set-default-version 2 可以通…

taobao.item.carturl.get( 加购URL获取 )

&#xffe5;开放平台免费API可选用户授权 获取加购URL&#xff0c;支持添加商品到购物车 公共参数 请求地址: 公共请求参数: 公共响应参数: 点击获取key和secret 请求参数 请求示例 响应示例 异常示例

matlab笔记总结(4)

https://www.bilibili.com/video/BV1MA4y1d7so/?spm_id_from333.788&vd_source3ef6540f8473c7367625a53b7b77fd66 司守奎老师在B站的讲解视频 https://matlabacademy.mathworks.com/cn/details/matlab-onramp/gettingstarted MATLAB官方的入门之旅&#xff08;英文&…

ChatGPT探索系列之六:思考ChatGPT的未来发展趋势和挑战

文章目录 前言一、未来发展趋势1. ChatGPT重塑数据分析之道2. ChatGPT颠覆企业运用人工智能和机器学习的途径3. ChatGPT颠覆自动化商业流程4. ChatGPT引领企业决策迈向新纪元 二、ChatGPT掀开未来充满机遇和挑战的新篇章总结 前言 ChatGPT发展到目前&#xff0c;其实网上已经有…

如何用Python搭建HTTP服务器,并实现远程访问和下载?

Python是编程语言中的热门语言&#xff0c;具有语法简单、语句清晰的特点。如果你不擅长编程&#xff0c;学习Python是一个不错的选择&#xff0c;初学者在学习阶段可以较为轻松地理解编程对象和思维方法。对于小白用户来说,它具有强大且丰富的库,封装后可以轻松调用,因此也更受…

数学建模第一天:数学建模工具课之MATLAB的入门

目录 一、MATLAB的简介 二、Matlab基础知识 1. 变量 ①命名规则 ②特殊变量名 2、数学符号与函数调用 ①符号 ②数学函数 ③自定义函数 三、数组与矩阵 1、数组 ①创建数组 ②访问数组元素 ③数组运算 2、矩阵 ①定义 ②特殊矩阵 ③矩阵运算 四、控制流 …