基于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 isType() 类型判断代码
Feb 14 Javascript
再谈javascript面向对象编程
Mar 18 Javascript
jQuery入门基础知识学习指南
Aug 14 Javascript
web前端开发upload上传头像js示例代码
Oct 22 Javascript
Vuex之理解Mutations的用法实例
Apr 19 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
Apr 21 jQuery
jQuery设置图片等比例缩小的方法
Apr 29 jQuery
vue实现点击关注后及时更新列表功能
Jun 26 Javascript
vue.js实现格式化时间并每秒更新显示功能示例
Jul 07 Javascript
vue组件三大核心概念图文详解
May 30 Javascript
js常见遍历操作小结
Jun 06 Javascript
jquery图片预览插件实现方法详解
Jul 18 jQuery
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
php 远程关机操作的代码
2008/12/05 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
2012/03/11 PHP
PHP往XML中添加节点的方法
2015/03/12 PHP
php检测文本的编码
2015/07/26 PHP
Javascript中的数学函数集合
2007/05/08 Javascript
使Ext的Template可以解析二层的json数据的方法
2007/12/22 Javascript
理解Javascript_09_Function与Object
2010/10/16 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
2015/04/27 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
微信小程序 选项卡的简单实例
2017/05/24 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
js实现动态增加文件域表单功能
2018/10/22 Javascript
vue基于两个计算属性实现选中和全选功能示例
2019/02/08 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
2019/11/12 Javascript
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
在webstorm中配置less的方法详解
2020/09/25 Javascript
利用JavaScript为句子加标题的3种方法示例
2021/01/05 Javascript
python之wxPython菜单使用详解
2014/09/28 Python
在Lighttpd服务器中运行Django应用的方法
2015/07/22 Python
对numpy中的数组条件筛选功能详解
2018/07/02 Python
python实现指定文件夹下的指定文件移动到指定位置
2018/09/17 Python
Python 中的 import 机制之实现远程导入模块
2019/10/29 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
python编写微信公众号首图思路详解
2019/12/13 Python
pytorch 彩色图像转灰度图像实例
2020/01/13 Python
python连接mysql数据库并读取数据的实现
2020/09/25 Python
image-set实现Retina屏幕下图片显示详细介绍
2012/12/24 HTML / CSS
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
Expedia挪威官网:酒店、机票和租车
2018/03/03 全球购物
英国和世界各地预订便宜的酒店:LateRooms.com
2019/05/05 全球购物
司法所长先进事迹
2014/06/02 职场文书
县政府办公室领导班子个人对照检查材料
2014/09/16 职场文书
金融专业银行实习证明模板
2014/11/28 职场文书
QT连接MYSQL数据库的详细步骤
2021/07/07 MySQL