当前位置: 首页 > news >正文

vue 鼠标划入划出多传一个参数

// item可以传递弹窗显示数据, $event相关参数可以用来做弹窗定位用
@mouseover="handleMouseOver($event, item)" @mouseleave="handleMouseLeave($event, item)"

举个栗子: 做一个hover提示弹窗组件(用的vue3框架 + less插件)
可以将组件放在代码的最外层

<divv-show="show"ref="recentRef"class="recent-item-tip":style="{ left: posX + 'px', top: posY + 'px', opacity: opacity }"@mouseover="handleMouseOver2" @mouseleave="handleMouseLeave2">{{ '这里添加提示相关信息' }}
</div><script>
import { ref, ,nextTick } from 'vue';
// 提示内容
const titleInfo = ref('')
// 鼠标的横轴 
let posX = ref(0);
// 鼠标纵轴
let posY = ref(0);
// 控制显隐
let show = ref(false);
// 是否透明
let opacity = ref(0);
// 触发hover的DOM
const recentRef = ref<HTMLDivElement | null>(null);
const timer = ref(null);
// 获取鼠标位置
function handleMouseOver(e, item) {titleInfo.value = item.titleInfo;// 防抖if (timer.value) {clearTimeout(timer.value);}timer.value = setTimeout(() => {// 更新列表handleChangePos(e, item);clearTimeout(timer.value);}, 500);
}
// 这两个xx2函数是为了当鼠标划入提示弹窗内让弹窗不消失
function handleMouseOver2(e, item) {show.value = true;
}
function handleMouseLeave2(e, item) {show.value = false;
}
// 提示框定位
function handleChangePosition(e, item) {show.value = true;pushInfo.value = item.pushTime;let clientHeight = document.documentElement.clientHeight;let clientWidth = document.documentElement.clientWidth;let pointX = e.clientX;let pointY = e.clientY;nextTick(() => {// 内容宽高let selfWidth = recentRef.valueOf.clientWidth;let selfHeight = 80;if (pointX + selfWidth > clientWidth) {pointX = clientWidth - selfWidth - 10;}if (pointY + selfHeight > clientHeight) {pointY = clientHeight - selfHeight - 10;}opacity.value = 1;posX.value = pointX;posY.value = pointY;});
}
// 鼠标滑走隐藏
function handleMouseLeave() {// show.value = false;// opacity.value = 0;// pushInfo.value = '';clearTimeout(timer.value);timer.value = null;
}
</script><style lang="less">.recent-item-tip {height: 80px;width: 200px;overflow-y: scroll;position: fixed;z-index: 999;top: 0;left: 0;font-size: 12px;padding: 5px;line-height: 20px;box-sizing: border-box;word-break: keep-all;background-color: #fff; // #fffborder: 1px solid #1113171a; // #1113171Aborder-radius: 4px;box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.3);opacity: 0;}//滚动条样式::-webkit-scrollbar {width: 5px;height: 6px;border-radius: 16px;}::-webkit-scrollbar-thumb {border-radius: 16px;}::-webkit-scrollbar-track {border-radius: 16px;}
</style>
http://www.lryc.cn/news/195665.html

相关文章:

  • svn项目同步到gitLab
  • 图解Dubbo,Dubbo 服务治理详解
  • Css 如何取消a链接点击时的背景颜色
  • 1.16.C++项目:仿muduo库实现并发服务器之HttpContext以及HttpServer模块的设计
  • ABAP 新增PO计划行时 新增行交货日期默认当前最大交期
  • VSCode怎么创建Java项目
  • 软件工程与计算(十四)详细设计中面向对象方法下的模块化
  • 商城免费搭建之java商城 开源java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c
  • python教程:selenium WebDriver 中的几种等待
  • 【MATLAB源码-第49期】基于蚁群算法(ACO)算法的栅格路径规划,输出最佳路径图和算法收敛曲线图。
  • LabVIEW生产者消费者架构
  • 成都瀚网科技:如何有效运营抖店来客呢?
  • iMazing2.17.3免费苹果手机备份还原助手
  • sql查询到了数据但是实体类个别字段为null(映射失败)
  • 配置VScode开发环境-CUDA编程
  • openGauss学习笔记-101 openGauss 数据库管理-管理数据库安全-客户端接入之用SSH隧道进行安全的TCP/IP连接
  • STM32如何使用中断?
  • 用于物体识别和跟踪的下游任务自监督学习-2-(计算机视觉中的距离度量+损失函数)
  • 热成像仪的工作原理及在工业设备状态监测中的应用
  • 什么是库存管理?无需Excel,2023年这几款大热库存管理软件你get了吗?
  • c# xml 参数配置表的使用
  • ubuntu20.04 nerf Instant-ngp
  • 隐写术--python隐写
  • MySQL的InnoDB存储引擎中的自适应哈希索引技术
  • 交互设计主要做什么?新手入门必读
  • 【深度学习实验】循环神经网络(三):门控制——自定义循环神经网络LSTM(长短期记忆网络)模型
  • flutter 消息并发时处理,递归查询
  • 第五十八章 学习常用技能 - 查看查询缓存
  • AI 辅助学 Java | 专栏 1 帮你学 Java
  • 2023_Spark_实验十六:编写LoggerLevel方法及getLocalSparkSession方法