基于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 图片预加载 自动等比例缩放插件
Dec 25 Javascript
从零开始学习jQuery (二) 万能的选择器
Oct 01 Javascript
JQuery中关于jquery.js与jquery.min.js的比较探讨
May 15 Javascript
深入探密Javascript数组方法
Jan 08 Javascript
jQuery操作表单常用控件方法小结
Mar 23 Javascript
jQuery使用hide方法隐藏元素自身用法实例
Mar 30 Javascript
JavaScript实现cookie的写入、读取、删除功能
Nov 05 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
Dec 31 Javascript
简述Vue中容易被忽视的知识点
Dec 09 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
Mar 17 Javascript
JavaScript, select标签元素左右移动功能实现
May 14 Javascript
JavaScript实现弹出窗口效果
Dec 09 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
yii操作session实例简介
2014/07/31 PHP
PHP正则获取页面所有图片地址
2016/03/23 PHP
php简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
js读取cookie方法总结
2014/10/31 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
JQuery中使文本框获得焦点的方法实例分析
2015/02/28 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
2016/03/18 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
微信小程序textarea层级过高的解决方法
2019/03/04 Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
2020/02/01 Javascript
es6中new.target的作用和使用场景简单示例分析
2020/03/14 Javascript
JavaScript基于用户照片姓名生成海报
2020/05/29 Javascript
[01:41]DOTA2超级联赛专访YYF 称一辈子难忘TI2
2013/05/28 DOTA
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
python 判断一个进程是否存在
2009/04/09 Python
python 调用c语言函数的方法
2017/09/29 Python
python查看列的唯一值方法
2018/07/17 Python
python基础 range的用法解析
2019/08/23 Python
python如何把字符串类型list转换成list
2020/02/18 Python
python数据预处理方式 :数据降维
2020/02/24 Python
Python第三方包PrettyTable安装及用法解析
2020/07/08 Python
python实现数字炸弹游戏
2020/07/17 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
CSS3实现酷炫的3D旋转透视效果
2019/11/21 HTML / CSS
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
环保倡议书怎么写
2014/05/16 职场文书
中药学专业毕业生推荐信
2014/07/10 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
防止web项目中的SQL注入
2021/12/06 MySQL
python_tkinter事件类型详情
2022/03/20 Python