基于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 相关文章推荐
JScript中使用ADODB.Stream判断文件编码的代码
Jun 09 Javascript
在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
Nov 28 Javascript
javascript读取Xml文件做一个二级联动菜单示例
Mar 17 Javascript
JS模拟实现ECMAScript5新增的数组方法
Mar 20 Javascript
vue+vux实现移动端文件上传样式
Jul 28 Javascript
关于jquery中attr()和prop()方法的区别
May 28 jQuery
小程序ios音频播放没声音问题的解决
Jul 11 Javascript
详解vue-cli下ESlint 配置说明
Sep 03 Javascript
零基础之Node.js搭建API服务器的详解
Mar 08 Javascript
基于js实现判断浏览器类型代码实例
Jul 17 Javascript
JavaScript常用工具函数汇总(浏览器环境)
Sep 17 Javascript
详细分析JavaScript中的深浅拷贝
Sep 17 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
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
PHP判断表单复选框选中状态完整例子
2014/06/24 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
URI、URL和URN之间的区别与联系
2006/12/20 Javascript
js原型链原理看图说明
2012/07/07 Javascript
Jquery解析json数据详解
2013/12/26 Javascript
node.js中的console用法总结
2014/12/15 Javascript
动态加载js、css的实例代码
2016/05/26 Javascript
JavaScript调试之console.log调试的一个小技巧分享
2017/08/07 Javascript
React如何将组件渲染到指定DOM节点详解
2017/09/08 Javascript
详解微信小程序中组件通讯
2018/10/30 Javascript
javascript中的闭包概念与用法实践分析
2019/07/26 Javascript
webpack常用构建优化策略小结
2019/11/21 Javascript
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python求pi的方法
2014/10/08 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
浅谈python中的占位符
2017/11/09 Python
python numpy元素的区间查找方法
2018/11/14 Python
基于python实现百度翻译功能
2019/05/09 Python
python实现的生成word文档功能示例
2019/08/23 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
2020/03/25 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
如何用python批量调整视频声音
2020/12/22 Python
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
yy结婚证婚词
2014/01/10 职场文书
高二生物教学反思
2014/01/27 职场文书
妈妈的账单教学反思
2014/02/06 职场文书
公司总经理岗位职责
2014/03/15 职场文书
社区务虚会发言材料
2014/10/20 职场文书
单位考核聘任报告
2015/03/02 职场文书
2016教师暑期培训学习心得体会
2016/01/09 职场文书
心得体会该怎么写呢?
2019/06/27 职场文书
您对思维方式了解多少?
2019/12/09 职场文书
SQL SERVER触发器详解
2022/02/24 SQL Server
修改Nginx配置返回指定content-type的方法
2022/09/23 Servers