基于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 相关文章推荐
jQuery+css+html实现页面遮罩弹出框
Mar 21 Javascript
javascript-简单的计算器实现步骤分解(附图)
May 30 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
Oct 22 Javascript
jQuery遍历DOM元素与节点方法详解
Apr 14 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
Dec 16 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
Jan 12 Javascript
JS实现颜色动态淡化效果
Mar 06 Javascript
JS库中的Particles.js在vue上的运用案例分析
Sep 13 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
Dec 05 Javascript
jquery根据name取得select选中的值实例(超简单)
Jan 25 jQuery
基于element-ui的rules中正则表达式
Sep 04 Javascript
vue组件从开发到发布的实现步骤
Nov 11 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
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
php imagecreatetruecolor 创建高清和透明图片代码小结
2010/05/15 PHP
批量修改RAR文件注释的php代码
2010/11/20 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
jquery 1.4.2发布!主要是性能与API
2010/02/25 Javascript
JavaScript中数组的排序、乱序和搜索实现代码
2011/11/30 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
javascript中with()方法的语法格式及使用
2014/08/04 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
js实现tab切换效果实例
2015/09/16 Javascript
javascript实现tab切换的两个实例
2015/11/05 Javascript
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
EasyUI Combobox设置默认值 获取text的方法
2016/11/28 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
2017/04/13 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
微信小程序实现展示评分结果功能
2019/02/15 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
vue中的过滤器及其时间格式化问题
2020/04/09 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
python使用wmi模块获取windows下的系统信息 监控系统
2015/10/27 Python
Python学习笔记之解析json的方法分析
2017/04/21 Python
python TCP Socket的粘包和分包的处理详解
2018/02/09 Python
Python实现端口检测的方法
2018/07/24 Python
opencv3/python 鼠标响应操作详解
2019/12/11 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
Unineed旗下时尚轻奢网站:FABHunt
2019/05/13 全球购物
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
工作表扬信
2015/01/17 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
消防演习感想
2015/08/10 职场文书
2015年度女工工作总结
2015/10/22 职场文书
python 详解turtle画爱心代码
2022/02/15 Python
MySQL 主从复制数据不一致的解决方法
2022/03/18 MySQL
什么是css原子化,有什么用?
2022/04/24 HTML / CSS