vue实现修改title提示框-默认样式【两种方式】

news2025/1/14 18:33:44

博主介绍

📢点击下列内容可跳转对应的界面,查看更多精彩内容!

🍎主页:水香木鱼
🍍专栏:后台管理系统


文章目录

简介:这是一篇有关【vue实现修改title提示框-默认样式【两种方式】】的文章,博主用最精简的语言去表达给前端读者们。

使用hover:afterafter
封装提示框组件

1、方式一:使用 &:hover:after、&:after 修改样式

鼠标悬浮展示内容

在这里插入图片描述

Ⅰ、html

    <div class="box" v-for="item in list" :key="item.id">
      <!-- 判断名称是否超过3位,如果超过3位,第四位后显示为省略号 item.name.length > 3 ? item.name.slice(0, 3) + "..." : item.name -->
      <p class="title" :data-title="item.name">
        {{ item.name.length > 3 ? item.name.slice(0, 3) + "..." : item.name }}
      </p>
    </div>

Ⅱ、css

/*修改提示框*/
.title[data-title] {
  position: relative;
  // 样式:
  &:hover:after {
    opacity: 1;
    transition: all 0.1s ease 0.5s;
    visibility: visible;
  }
  // 背景的样式 位置 字体等
  &:after {
    content: attr(data-title);
    position: absolute;
    padding: 1px 10px;
    left: 50px;
    bottom: -1.5em;
    border-radius: 4px;
    color: #fff;
    background-color: rgba(80, 79, 79, 0.8);
    box-shadow: 0 0 4px rgba(0, 0, 0, 0.16);
    font-size: 14px;
    white-space: nowrap;
    visibility: hidden;
    opacity: 0;
  }
}

2、方式二:封装提示框组件

在这里插入图片描述

Ⅰ、tooltip.vue

<!--提示框组件-->
<template>
  <transition name="fade">
    <div
      ref="tooltip"
      class="m-tooltip"
      v-show="showTooltip"
      @mouseenter="onShow"
      @mouseleave="onHide"
      :style="`max-width: ${maxWidth}px; top: ${top}px; left: ${left}px;`"
    >
      <div class="u-tooltip-content">
        <slot>暂无内容</slot>
      </div>
      <!-- 底部三角形 -->
      <div class="u-tooltip-arrow"></div>
    </div>
  </transition>
</template>
<script>
export default {
  name: "Tooltip",
  props: {
    maxWidth: {
      // 提示框内容最大宽度
      type: Number,
      default: 120,
    },
  },
  data() {
    return {
      showTooltip: false,
      hideTimer: null,
      top: 0, // 提示框top定位
      left: 0, // 提示框left定位
    };
  },
  methods: {
    show(target) {
      clearTimeout(this.hideTimer);
      const rect = target.getBoundingClientRect();
      const targetTop = rect.top + window.pageYOffset;
      const targetLeft = rect.left + window.pageXOffset;
      const targetWidth = rect.width;
      this.showTooltip = true;
      this.$nextTick(() => {
        const tipWidth = this.$refs.tooltip.offsetWidth; // 提示框元素宽度
        const tipHeight = this.$refs.tooltip.offsetHeight; // 提示框元素高度
        this.top = targetTop - tipHeight;
        this.left = targetLeft - (tipWidth - targetWidth) / 2;
      });
    },
    onShow() {
      clearTimeout(this.hideTimer);
      this.showTooltip = true;
    },
    onHide() {
      this.hideTimer = setTimeout(() => {
        this.showTooltip = false;
      }, 100);
    },
  },
};
</script>
<style lang="less" scoped>
// 渐变过渡效果
.fade-enter-active,
.fade-leave-active {
  transition: all 0.3s;
}
.fade-enter,
.fade-leave-to {
  opacity: 0;
  transform: scale(0.8); // 缩放变换
  -ms-transform: scale(0.8); /* IE 9 */
  -webkit-transform: scale(0.8); /* Safari and Chrome */
}
// 滑动渐变过渡效果
.slide-fade-enter-active {
  transition: all 0.3s ease;
}
.slide-fade-leave-active {
  transition: all 0.3s ease;
}
.slide-fade-enter,
.slide-fade-leave-to {
  transform: translateY(6px); // 滑动变换
  -ms-transform: translateY(6px); /* IE 9 */
  -webkit-transform: translateY(6px); /* Safari and Chrome */
  opacity: 0;
}
.m-tooltip {
  position: absolute;
  z-index: 999;
  padding-bottom: 6px;
  .u-tooltip-content {
    padding: 10px;
    margin: 0 auto;
    word-break: break-all;
    word-wrap: break-word;
    border-radius: 4px;
    font-weight: 400;
    font-size: 14px;
    background: #ffffff;//背景颜色
    box-shadow: 0px 2px 8px 0px rgba(0, 121, 221, 0.3);//修改阴影显示
  }
  .u-tooltip-arrow {
    margin: 0 auto;
    width: 0;
    height: 0;
    border-left: 2px solid transparent;
    border-right: 2px solid transparent;
    border-top: 4px solid #fff;
  }
}
</style>

Ⅱ、页面使用

  • mouseenter
  • mouseleave
<template>
  <div>
    <div
      class="u-tag"
      @mouseenter="onShowTip($event, item.name)"
      @mouseleave="onHideTip"
      v-for="item in list"
      :key="item.id"
    >
      {{ item.name }}
    </div>
    <!-- 提示框组件 -->
    <Tooltip ref="tooltip" :maxWidth="240">
      <div class="u-content" v-if="content">{{ content }}</div>
    </Tooltip>
  </div>
</template>
<script>
import Tooltip from "../components/Tooltip";//引入组件
export default {
  components: {
    Tooltip,
  },
  data() {
    return {
      list: [
        {
          id: 1,
          name: "诸葛亮",
        },
        {
          id: 2,
          name: "周瑜",
        },
        {
          id: 3,
          name: "小乔",
        },
        {
          id: 4,
          name: "大乔",
        },
      ],
      content: "",
    };
  },
  methods: {
    onShowTip(e, content) {
      this.content = content;
      this.$refs.tooltip.show(e.target);
    },
    onHideTip() {
      this.$refs.tooltip.onHide();
    },
  },
};
</script>
<style lang="less" scoped>
.u-content {
  // 自定义设置tooltip提示框内容样式
  color: #333;
}
.u-tag {
  margin-top: 200px;
  margin-right: 20px;
  display: inline-block;
  padding: 6px 12px;
  border-radius: 15px;
  height: 20px;
  font-size: 14px;
  font-weight: 400;
  line-height: 20px;
  cursor: pointer;
}
</style>

相关推荐

⭐前端vue实现卡片翻转效果【css3实现】
⭐前端css3实现角标【二维式与立体式角标实现】
⭐前端vue项目最强优化-美化浏览器右侧滚动条样式与el-scrollbar
⭐vue实现隐藏浏览器右侧滚动条功能
⭐vue封装全屏组件【无插件操作】

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

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

相关文章

RV1126笔记六:人脸识别方案<四>

若该文为原创文章,转载请注明原文出处。 一、介绍 人脸识别方案设计逻辑流程图,方案代码分为分为三个业务流程,主体代码负责抓取、合成图像,算法代码负责人脸识别功能。通过摄像头实时采集数据,识别人脸,并提取人脸特征,把特征值和数据库对比后,把名字合合到图像上,…

Spring Boot全局异常处理器(原理及使用详解)

目录 1 什么是全局异常处理器 2 为什么需要全局异常 3 原理和目标 4 ControllerAdvice注解 4.1 Advice&#xff08;通知&#xff09; 4.2 ControllerAdvice结合方法型注解ExceptionHandler,用于捕获Controller中抛出的指定类型的异常&#xff0c;从而达到全局不同类型的异…

【Unity】使用 System.Windows.Forms 的问题

因为最近开发需要用到使用 Windows 自带的窗口打开、文件选择等功能&#xff0c;然后兜兜转转需要使用 System.Windows.Forms 这个库。这个库在 WinForm 里是很常见的&#xff0c;但是要在 Unity 里使用&#xff0c;并打包出来还是有些坑的。 我这里使用的 Unity 版本&#xf…

MATLAB算法实战应用案例精讲-【连接分析】PageRank

前言 拉里佩奇 Larry Page和谢尔盖布林 Sergey Brin于1996年在斯坦福大学开发了PageRank算法,此后于1998年基于该算法,共同创立了Google公司。PageRank这个名字一语双关,既源于其算法创始人Larry Page,也源于网页 Web Page。 PageRank算法将网页按重要性进行排序。有了这…

搭建nacos

一、nacos的介绍 开启nacos的作用&#xff1a; 在项目开发过程中我们可以把服务提供者的网络地址&#xff08;IP&#xff0c;端口号&#xff09;等编码到代码中&#xff0c; 这种做法存在许多问题&#xff1a; 一旦服务提供者地址变化&#xff0c;就需要手工修改代码一旦是…

Wireshark TS | Packet Challenge 之 DNS 案例分析

前言 来自于 Sharkfest Packet Challenge 中的一个数据包案例&#xff0c;Sharkfest 是 Wireshark 官方组织的一年一度的大会&#xff0c;致力于在 Wireshark 开发人员和用户社区之间分享知识、经验和最佳实践。印象中早期是一年一次&#xff0c;近几年发展成一年两次&#xf…

艾美捷超氧化物歧化酶检测试剂盒参数说明

超氧化物歧化酶是催化超氧化物离子O2-的歧化反应2O2-&#xff0b;2H →O2&#xff0b;H2O2的酶.EC1&#xff0e;15&#xff0e;1&#xff0e;1.是金属酶&#xff0c;已知在金属酶中有真核生物细胞质的深绿色Cu-Zn酶&#xff08;分子量约3万&#xff09;、线粒体、细菌红紫色的M…

Debian系列-在新的GNOME下无法启动Qt

Debian系列-在新的GNOME下无法启动Qt 文章目录Debian系列-在新的GNOME下无法启动Qt摘要启动Qt 报错 No protocol specified解决方法1 打开一个新的终端2 echo $DISPLAY3 export DISPLAY更新一下关键字&#xff1a; Debian、 Qt、 xcb、 No protocol specified、 关键字5摘要 …

转行做程序员,哪种编程语言既高薪又适合你?

“你为什么学习这门编程语言”&#xff1f;大多人当初面对选择这个问题的时候&#xff0c;都只是单纯的“听朋友说”或是百度看到了表面&#xff0c;或者是一拍脑门决定的。其实并不了解这个编程语言的特性和市场现状以及这个语言是否适合自己。 这类的情况还是算是好的&#x…

并发编程学习(四):wait()、nitify()

1、wait、notify原理 Owner 线程发现条件不满足&#xff0c;调用wait()方法&#xff0c;即可进入WaitSet&#xff0c;变为WAITING 状态。BLOCKED和WAITING的线程都处于阻塞状态&#xff0c;不占用CPU时间片。BLOCKED线程会在Owner线程释放锁时唤醒。WAITING线程会在Owner线程调…

【数据库】简答题知识点

数据库系统的结构 数据库系统的逻辑结构可以分为用户级、概念级和物理级三个层次。每个层次的数据库都有自身对数据进行逻辑描述的模式&#xff0c;分另称为外模式、概念模式和内模式。 外模式&#xff1a;是与和具体的应用或者项目有关的逻辑表示&#xff0c;用户可以操作的…

【Proteus仿真】【51单片机】自动浇花灌溉系统设计

文章目录一、功能简介二、软件设计三、实验现象联系作者一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用LCD1602液晶、按键、DS18B20、PCF8591 ADC、土壤湿度传感器、水位传感器、蜂鸣器模块等。 系统运行后&#xff0c;LCD1602显示传感器检测的温度、湿…

【Linux操作系统】多线程(一)

文章目录1. 线程概念2. 线程控制2.1 创建线程2.2 线程ID2.3 线程等待2.4 线程终止2.5 线程分离3. 线程同互斥与同步3.1 互斥量3.2 死锁3.3 同步-条件变量3.4 生产者消费者模型3.5 POSIX信号量3.6 基于环形队列的生产消费者模型1. 线程概念 线程&#xff1a;是在进程内部运行的…

解决资源消耗,top的运用记录

第一条命令uptime load average 后面的三个数字&#xff0c;分别代表1分钟、5分钟和15分钟内机器的平均负载 使用top命令解决负载问题 Cpu(s)这一行提供了CPU运行情况信息 这些缩写分别代表了不同含义 (1)us&#xff1a;用户CPU时间 运行非优雅的用户进程所占CPU时间的百…

离线下载NLTK依赖包([WinError 10061] 由于目标计算机积极拒绝,无法连接)的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…

房产管理系统CAD图形管理应用有哪些?

数图互通房产管理 数图互通房产管理系统建设涵盖学校所有房屋资源管理业务以及CAD图纸的管理&#xff0c;对不同类型的房屋实现相应的业务子系统&#xff0c;实现完善、高效、可溯的房屋资源业务管理&#xff0c;保证数据的完整性、一致性和精确性&#xff0c;及业务的。 通过…

向内而生 向远而行 | 希尔贝壳荣获“2022年度最具投资价值创新企业”奖

12月22日&#xff0c;以“向内而生 向远而行”为主题的2022年度猎云网创投奖项评选正式落下帷幕&#xff0c;各项榜单评选结果正式发布。希尔贝壳凭借先进的技术创新能力获评“2022年度最具投资价值创新企业”奖。 获奖理由 北京希尔贝壳科技有限公司成立于2017年&#xff0c;…

可视化 相机pose或者 pose视锥

可视化 相机pose或者 pose视锥 https://www.camcalib.io/post/visualizing-camera-calibration-results https://bitbucket.org/iviso/camcalib_multiview_pointcloud_example/src/master/ https://bitbucket.org/iviso/ 其他&#xff1a; https://towardsdatascience.com/c…

快速部署PHP Web环境(nginx php mysql redis)

先看最终效果&#xff0c;如下&#xff1a; 它是什么&#xff1f; 它是 docker 容器虚拟化技术。总共只有几KB大小的描述文件&#xff0c;文件里定义了要安装什么、配置什么&#xff0c;一执行就全自动处理好了。 它有什么用&#xff1f; 解决新来同事搭环境搭半天的问题解…

矽昌-- Station 模式支持

Station 模式支持 1. 修改配置 ​ 在/etc/config/wireless中增加一段即可&#xff0c;实例如下&#xff1a; config wifi-ifaceoption key 12345678option ifname sfi0option network wwanoption encryption psk2ccmpoption device radio0option mode staoption bssid A8:5A:…