基于vue中对鼠标划过事件的处理方式详解


Posted in Javascript onAugust 22, 2018

鼠标事件进行监听

需求中,在一个table(组件)表中,对于其中一列(该列为图片列),当鼠标划过该列的某个单元格子(图片)时,需要展示出该单元格子对应的遮罩层

翻阅了一些博客,发现好多都提到了mouse事件,如mouseover、mouseout、mouseenter、mouseleave,在之后我自己也通过这种方法进行了尝试。

<template>
 <el-table
 :data="tableData"
 stripe
 style="width: 100%">
 <el-table-column
  prop="pic"
  label="图片"
  width="180">
  <template slot-scope="scope">
   <div slot="wrapper" class="name-wrapper">
   <div class="img-mask" @click="toShowDialog(props.row)" :ref="'mask' + props.rowIndex">文字</div>
   <div @mouseover="changeMask(props.rowIndex)" @mouseout="changeMask(props.rowIndex)">
    <img src="...">
   </div>
   </div>
  </template>
 </el-table-column>
 </el-table>
</template>

...
changeMask(index) {
 let vm = this;
 let mask = vm.$refs['mask' + index];

 if(mask.style.display == 'none') {
 mask.style.display = 'block';
 }else {
 mask.style.display = 'none';
 }
}

最后在查看结果中发现,在划过的时候是会触发鼠标事件,但是会出现闪动的清空,当鼠标一直放在该单元格上的时候,遮罩层也会消失和出现反复切换。为缓解这种情况,还对changeMask中的显示和隐藏进行setTimeout延时,结果并不理想,不推荐这样使用。

CSS方式实现

这种方法,只需要保留上面代码中的主体部分,不需要ref和mouse事件这些,主要是通过opacity去控制遮罩层的显示和隐藏的。具体的样式代码如下:

.wrapper {
 position: relative;
 .img-mask {
 position: absolute;
 background: rgba(0, 0, 0, 0.5);
 z-index: 10;
 //设置left、right、top、bottom的原因是使得遮罩层上的文字显示在该层的最中间
 left: 0;
 right: 0;
 top: 0;
 bottom: 0;
 //透明度为0,则就是不可见
 opacity: 0;
 }
 &:hover {
 .img-mask {
  opacity: 1;
 }
 }
}

这种方法达到了预期的效果,体验也很好,推荐使用。

table中动态ref

首先,这部分并不是针对遮罩层显示隐藏的,而是处理表格中某一列或者很多单元格添加ref的。这个其实在第一种方法中就已经也出来了,现在做下总结。

:ref="'mask' + props.rowIndex"这种方法对例如表格这样一列中的每个单元格都对应着一个附加的东西,而这些东西的位置又是不同的,可以实现对每个单元格进行ref绑定,在事件处理函数中,通过传递props.rowIndex得到下标,最终通过this.$ref['mask' + props.rowIndex]得到对应的元素,然后对其css进行相关控制(只是举例)。

拓展知识:vue鼠标划过移入移出触发函数介绍

如下所示:

<ul>>
 <li class="" v-on:mouseover="changeActive($event)" v-on:mouseout="removeActive($event)"></li>
</ul>
methods:{
  // 鼠标移入加入class
  changeActive($event){
    $event.currentTarget.className="active";
  },
  removeActive($event){
    $event.currentTarget.className="";
  }
}

以上这篇基于vue中对鼠标划过事件的处理方式详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript方法和技巧大全
Dec 27 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
Jun 08 Javascript
require简单实现单页应用程序(SPA)
Jul 12 Javascript
Bootstrap零基础入门教程(三)
Jul 18 Javascript
js 模仿锚点定位的实现方法
Nov 19 Javascript
Node.js利用debug模块打印出调试日志的方法
Apr 25 Javascript
通俗解释JavaScript正则表达式快速记忆
Aug 23 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
Sep 30 Javascript
详解微信小程序之一键复制到剪切板
Apr 24 Javascript
对layui数据表格动态cols(字段)动态变化详解
Oct 25 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
Nov 18 Vue.js
JavaScript用document.write()输出换行的示例代码
Nov 26 Javascript
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
Aug 22 #Javascript
JS封装的模仿qq右下角消息弹窗功能示例
Aug 22 #Javascript
当vue路由变化时,改变导航栏的样式方法
Aug 22 #Javascript
element-ui 设置菜单栏展开的方法
Aug 22 #Javascript
详解vue-cli脚手架中webpack配置方法
Aug 22 #Javascript
element-ui使用导航栏跳转路由的用法详解
Aug 22 #Javascript
详解微信小程序canvas圆角矩形的绘制的方法
Aug 22 #Javascript
You might like
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
JavaScript中的History历史对象
2008/01/16 Javascript
js cookies实现简单统计访问次数
2009/11/24 Javascript
自动最大化窗口的Javascript代码
2013/05/22 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
Bootstrap图片轮播效果详解
2017/10/17 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
Vue3 中的数据侦测的实现
2019/10/09 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
解决qrcode.js生成二维码时必须定义一个空div的问题
2020/07/09 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
python实现在控制台输入密码不显示的方法
2015/07/02 Python
python正则表达式re之compile函数解析
2017/10/25 Python
TF-IDF算法解析与Python实现方法详解
2017/11/16 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
2020/01/02 Python
关于Keras模型可视化教程及关键问题的解决
2020/01/24 Python
Python实现Canny及Hough算法代码实例解析
2020/08/06 Python
Python 解析xml文件的示例
2020/09/29 Python
python使用numpy中的size()函数实例用法详解
2021/01/29 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
电气工程及其自动化学生实习自我鉴定
2013/09/19 职场文书
房地产还款计划书
2014/01/10 职场文书
恶搞卫生巾广告词
2014/03/18 职场文书
师范大学生求职信
2014/06/13 职场文书
解除劳动合同协议书范本2014
2014/09/25 职场文书
优秀团员事迹材料
2014/12/25 职场文书
2019年最新七夕唯美祝福语(60条)
2019/07/22 职场文书
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python
微信小程序中使用vant框架的具体步骤
2022/02/18 Javascript
python标准库ElementTree处理xml
2022/05/20 Python