【10分钟学习Vue自定义指令开发】鼠标放置提示指令

news/2024/11/21 22:14:55/

描述

自定义指令 v-tooltip

  • mounted(el, binding):当元素被挂载到DOM上时,这个钩子会被调用。

    • el 是指令绑定的元素,binding 包含了指令的值,即 binding.value,这里是 clickOutside 字符串。
    • tooltip 变量用于存储创建的提示框元素。
  • isOverflowing():这是一个辅助函数,用于检查元素的文本内容是否超出了其宽度。如果 scrollWidth(元素内容的宽度)大于 clientWidth(元素可视宽度),则返回 true,表示内容溢出。

  • createTooltip():这个函数用于创建提示框。

    • 创建一个新的 div 元素作为提示框,并设置其文本内容为指令的值或元素的文本内容。
    • 设置提示框的样式,包括位置、背景颜色、文字颜色、内边距、边框圆角、层级和最大宽度。
    • 将提示框添加到 document.body 中。
    • 根据元素的位置和大小调整提示框的位置,使其显示在元素的下方。
  • 鼠标移入事件:当鼠标移入元素时,会触发 mouseenter 事件。

    • 如果元素的内容溢出,即 isOverflowing() 返回 true,则调用 createTooltip() 创建提示框。
  • 鼠标移出事件:当鼠标移出元素时,会触发 mouseleave 事件。

    • 如果存在提示框,则将其从 document.body 中移除,并设置 tooltip 为 null

鼠标移入元素,显示提示内容,如使用中所描述,会提示字符串clickOutside

使用

<div v-tooltip="clickOutside"><input />
</div>

代码

/* 鼠标提示信息 */app.directive('tooltip', {mounted(el, binding) {let tooltip;// 检查内容是否超出标签宽度const isOverflowing = () => {console.log(el, el.scrollWidth, el.clientWidth, el.scrollWidth > el.clientWidth)return el.scrollWidth > el.clientWidth;};// 创建工具提示const createTooltip = () => {tooltip = document.createElement('div');tooltip.textContent = binding.value || el.textContent;tooltip.style.position = 'absolute';tooltip.style.backgroundColor = '#333';tooltip.style.color = '#fff';tooltip.style.padding = '5px 10px';tooltip.style.borderRadius = '4px';tooltip.style.zIndex = '1000';tooltip.style.maxWidth = `${el.clientWidth * 2}px`; // 限制为元素宽度document.body.appendChild(tooltip);const rect = el.getBoundingClientRect();tooltip.style.top = `${rect.bottom + 5}px`; // 调整到元素下方5px处tooltip.style.left = `${rect.left + 10}px`;};// 鼠标移入事件el.addEventListener('mouseenter', () => {if (isOverflowing()) {createTooltip();}});// 鼠标移出事件el.addEventListener('mouseleave', () => {if (tooltip) {document.body.removeChild(tooltip);tooltip = null;}});}});

拓展

【10分钟学习Vue自定义指令开发】复制指令v-copy

【10分钟学习Vue自定义指令开发】元素变化指令

【10分钟学习Vue自定义指令开发】鼠标放置提示指令

 

 


http://www.ppmy.cn/news/1548868.html

相关文章

【案例】---Hutool提取excel文档

目录 一、前言二、提取excel文档2.1、核心代码一、前言 引用jar包 <!--hutool--><dependency><groupId>cn.hutool</groupId>

蓝桥杯每日真题 - 第19天

题目&#xff1a;&#xff08;费用报销&#xff09; 题目描述&#xff08;13届 C&C B组F题&#xff09; 解题思路&#xff1a; 1. 问题抽象 本问题可以看作一个限制条件较多的优化问题&#xff0c;核心是如何在金额和时间约束下选择最优方案&#xff1a; 动态规划是理想…

【ChatGPT】实现贪吃蛇游戏

贪吃蛇游戏中。以下是实现赛博朋克风格背景的几种方法&#xff1a; 使用CSS渐变创建赛博朋克风格背景使用赛博朋克风格的背景图像集成到现有的游戏代码中 方法1&#xff1a;使用CSS渐变创建赛博朋克风格背景 您可以使用CSS的线性渐变来创建一个赛博朋克风格的背景。以下是一…

LabVIEW实现线性拟合的方法

在数据处理中&#xff0c;线性拟合是一种常用的方法&#xff0c;用于找到两组数据之间的最佳线性关系。本文将以电压&#xff08;XX&#xff09;和压力&#xff08;YY&#xff09;的关系为例&#xff0c;介绍如何使用LabVIEW进行线性拟合&#xff0c;并输出拟合结果。 一、问题…

VMware Workstation 17.6.1

概述 目前 VMware Workstation Pro 发布了最新版 v17.6.1&#xff1a; 本月11号官宣&#xff1a;针对所有人免费提供&#xff0c;包括商业、教育和个人用户。 使用说明 软件安装 获取安装包后&#xff0c;双击默认安装即可&#xff1a; 一路单击下一步按钮&#xff1a; 等待…

stm32与ht7038的项目

最近做了一个stm32与ht7038的数据采集项目 硬件包含太阳能充电电路 ht7038采集芯片电路 buck电路 stm32最小系统电路和lora模块电路 硬件PCB如下图所示 ht7038的程序如下所示ht7038.c #include "ht7038.h" #include "stm32l0xx_hal_spi.h"typedef uint8…

k8s集群对外服务之Ingress

一、Ingress 概述 1.1、service的作用 service的作用体现在两个方面&#xff0c; ①对集群内部&#xff0c;它不断跟踪pod的变化&#xff0c;更新endpoint中对应pod的对象&#xff0c;提供了ip不断变化的pod的服务发现机制&#xff1b; ②对集群外部&#xff0c;他类似负载…

【JavaEE初阶 — 多线程】线程池

目录 1. 线程池的原理 1.1 为什么要有线程池 1.2 线程池的构造方法 1.3 线程池的核心参数 1.4 TimeUnit 1.5 工作队列的类型 1.6 工厂设计模式 1.6.1 工厂模式概念 1.6.2 使用工厂模式的好处 1.6.3 使用工厂模式的典型案例 1.6.4 Thread…