基于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 相关文章推荐
js简单的表格添加行和删除行操作示例
Mar 31 Javascript
用json方式实现在 js 中建立一个map
May 02 Javascript
JavaScript返回网页中锚点数目的方法
Apr 03 Javascript
BetterScroll 在移动端滚动场景的应用
Sep 18 Javascript
JavaScript常用数组操作方法,包含ES6方法
May 10 Javascript
微信小程序实现的一键复制功能示例
Apr 24 Javascript
微信小程序实现的picker多级联动功能示例
May 23 Javascript
构建Vue大型应用的10个最佳实践(小结)
Nov 07 Javascript
vue和小程序项目中使用iconfont的方法
May 19 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
Jul 10 Javascript
理解JavaScript中的Proxy 与 Reflection API
Sep 21 Javascript
一篇文章弄清楚Ajax请求的五个步骤
Mar 17 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
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
在PHP中读取和写入WORD文档的代码
2008/04/09 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
Javascript操纵Cookie实现购物车程序
2006/11/23 Javascript
使用Modello编写JavaScript类
2006/12/22 Javascript
function, new function, new Function之间的区别
2007/03/08 Javascript
JS+CSS实现一个气泡提示框
2013/08/18 Javascript
Js实现动态添加删除Table行示例
2014/04/14 Javascript
jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法
2015/11/27 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
基于JS实现Android,iOS一个手势动画效果
2016/04/27 Javascript
学习Node.js模块机制
2016/10/17 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
微信小程序 Buffer缓冲区的详解
2017/07/06 Javascript
使用react实现手机号的数据同步显示功能的示例代码
2018/04/03 Javascript
JS实现碰撞检测效果
2020/03/12 Javascript
Vue 实现对quill-editor组件中的工具栏添加title
2020/08/03 Javascript
vc6编写python扩展的方法分享
2014/01/17 Python
Python二分法搜索算法实例分析
2015/05/11 Python
对numpy下的轴交换transpose和swapaxes的示例解读
2019/06/26 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
2019/10/30 Python
tensorboard实现同时显示训练曲线和测试曲线
2020/01/21 Python
Python类如何定义私有变量
2020/02/03 Python
从多个tfrecord文件中无限读取文件的例子
2020/02/17 Python
Python自动化操作实现图例绘制
2020/07/09 Python
3D动画《斗罗大陆》上线当日播放过亿
2021/03/16 国漫
html5指南-6.如何创建离线web应用程序实现离线访问
2013/01/07 HTML / CSS
手对手的教你用canvas画一个简单的海报的方法示例
2018/12/10 HTML / CSS
幼儿园庆六一活动方案
2014/03/06 职场文书
联片教研活动总结
2014/07/01 职场文书
土建施工员岗位职责
2015/04/11 职场文书
2015年大学迎新晚会总结
2015/07/16 职场文书
小学三年级作文之写景
2019/11/05 职场文书
在Django中使用MQTT的方法
2021/05/10 Python
正确使用MySQL update语句
2021/05/26 MySQL