基于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 相关文章推荐
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
Feb 18 Javascript
javaScript函数中执行C#代码中的函数方法总结
Aug 07 Javascript
让网页跳转到指定位置的jquery代码非书签
Sep 06 Javascript
js实现俄罗斯方块小游戏分享
Jan 31 Javascript
javascript倒计时效果实现
Nov 12 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
Apr 07 Javascript
详解微信小程序开发之下拉刷新 上拉加载
Nov 24 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
Feb 19 Javascript
Vuex简单入门
Apr 19 Javascript
理解javascript async的用法
Aug 22 Javascript
JS 数组基本用法入门示例解析
Jan 16 Javascript
BootStrap前端框架使用方法详解
Feb 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
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
PHP正则表达式过滤html标签属性(DEMO)
2016/05/04 PHP
php简单统计在线人数的方法
2016/05/10 PHP
你可能不再需要JQUERY
2021/03/09 Javascript
JavaScript Event学习第十一章 按键的检测
2010/02/10 Javascript
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
jQuery 源码分析笔记(6) jQuery.data
2011/06/08 Javascript
使用闭包对setTimeout进行简单封装避免出错
2013/07/10 Javascript
jQuery中关于ScrollableGridPlugin.js(固定表头)插件的使用逐步解析
2014/07/17 Javascript
Bootstrap每天必学之弹出框(Popover)插件
2016/04/25 Javascript
jQuery购物网页经典制作案例
2016/08/19 Javascript
js改变透明度实现轮播图的算法
2020/08/24 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
js获取ip和地区
2017/03/10 Javascript
vue生成随机验证码的示例代码
2017/09/29 Javascript
Vuex的初探与实战小结
2018/11/26 Javascript
JavaScript语句错误throw、try及catch实例解析
2020/08/18 Javascript
Python列表生成器的循环技巧分享
2015/03/06 Python
Python3 jupyter notebook 服务器搭建过程
2018/11/30 Python
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
树莓派用python中的OpenCV输出USB摄像头画面
2019/06/22 Python
python输入多行字符串的方法总结
2019/07/02 Python
python常用库之NumPy和sklearn入门
2019/07/11 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
2020/02/05 Python
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
美国咖啡批发网站:Coffee.org
2017/06/29 全球购物
华为慧通面试题
2012/09/11 面试题
银行见习期自我鉴定
2014/01/29 职场文书
优秀教师演讲稿
2014/05/06 职场文书
2014年党员承诺书范文
2014/05/20 职场文书
不服从上级领导安排的检讨书
2014/09/14 职场文书
对照四风自我剖析材料
2014/10/07 职场文书
委托书英文
2015/01/28 职场文书
建筑工程催款函
2015/06/24 职场文书