基于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 相关文章推荐
Auntion-TableSort国人写的一个javascript表格排序的东西
Nov 12 Javascript
用jquery实现等比例缩放图片效果插件
Jul 24 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
Mar 12 Javascript
javascript检测对象中是否存在某个属性判断方法小结
May 19 Javascript
Bootstrap项目实战之子栏目资讯内容
Apr 25 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
Oct 21 Javascript
原生JS实现日历组件的示例代码
Sep 22 Javascript
angular 表单验证器验证的同时限制输入的实现
Apr 11 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
Oct 23 jQuery
js实现坦克大战游戏
Feb 24 Javascript
vue实现放大镜效果
Sep 17 Javascript
Vue获取微博授权URL代码实例
Nov 04 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
php完全过滤HTML,JS,CSS等标签
2009/01/16 PHP
PHP中feof()函数实例测试
2014/08/23 PHP
图文介绍PHP添加Redis模块及连接
2015/07/28 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
PHP编程一定要改掉的5个不良习惯
2020/09/18 PHP
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
浅谈Node.js之异步流控制
2017/10/25 Javascript
Vue中使用webpack别名的方法实例详解
2018/06/19 Javascript
JavaScript实现的DOM绘制柱状图效果示例
2018/08/08 Javascript
Vue Autocomplete 自动完成功能简单示例
2019/05/25 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
js/jQuery实现全选效果
2019/06/17 jQuery
javascript实现异形滚动轮播
2019/11/28 Javascript
[03:48]显微镜下的DOTA2第四期——TP动作
2014/06/20 DOTA
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[02:04]完美世界城市挑战赛秋季赛报名开始 谁是solo路人王?
2019/10/10 DOTA
python的id()函数解密过程
2012/12/25 Python
Python中多线程及程序锁浅析
2015/01/21 Python
举例简单讲解Python中的数据存储模块shelve的用法
2016/03/03 Python
基于DataFrame筛选数据与loc的用法详解
2018/05/18 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
python在地图上画比例的实例详解
2020/11/13 Python
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
生物制药自我鉴定
2014/01/25 职场文书
美食节目策划方案
2014/05/31 职场文书
2016大学自主招生推荐信范文
2015/03/23 职场文书
2015年采购部工作总结
2015/04/23 职场文书
入学证明
2015/06/23 职场文书
公司业务员管理制度
2015/08/05 职场文书
商务信函英语问候语
2015/11/10 职场文书
Mongo服务重启异常问题的处理方法
2021/07/01 MongoDB
Python list列表删除元素的4种方法
2021/11/01 Python