鼠标拖拽拖动盒子时,与盒子内某些点击事件冲突问题解决

目录

  • 问题
  • 解决思路
  • 解决代码(标注【主要代码】的为重点)

问题

拖动该悬浮球时,鼠标弹起可能会触发悬浮球内事件
在这里插入图片描述

解决思路

  • 鼠标拖动盒子时,将 isMove 设为 true 意为正在拖动盒子,此时将 class="btns_move" 遮挡容器展示在悬浮球上层,以覆盖悬浮球,此时也就不存在触发悬浮球点击事件的冲突了;鼠标拖动完盒子弹起时再将 isMove 设为 false 意为不在拖动盒子(遮挡容器 class="btns_move" 不存在),可以触发悬浮球点击事件
  • 【注解】click 点击事件主要是在鼠标弹起时触发class="btns_move" 容器展示时,鼠标已不再悬浮器上点击,所以也就不存在鼠标在悬浮球上弹起的说法,因此可解决拖动盒子时与悬浮球点击事件冲突的问题
    在这里插入图片描述

解决代码(标注【主要代码】的为重点)

index.vue

<div ref="btns" class="btns" @mousedown="mousedownHandler"><div class="btns_other_police" @click="$refs.SearchDialogRef.open('police')"><img :src="require(`@/assets/portrait/iconfont/${theme}_police.png`)" /><span>其他警员</span></div><div class="btns_fullscreen_show" @click="handleScreenFull"><img :src="require(`@/assets/portrait/iconfont/${theme}_expand.png`)" /><span> {{ isFullscreen ? '退出全屏' : '全屏显示' }} </span></div><!-- <div v-show="isMove" class="btns_move">我是避免拖动盒子与盒子内事件冲突的元素</div> --><div v-show="isMove" class="btns_move" />  <!-- 【主要代码】 -->
</div>

index.scss

.btns {$btnWiddth: 70px;position: absolute;bottom: 10px;right: 10px;// z-index: 9999;z-index: 2000;width: $btnWiddth;height: 147px;cursor: move;opacity: 0.8;&_other_police,&_fullscreen_show {width: $btnWiddth;height: $btnWiddth;display: flex;flex-direction: column;align-items: center;justify-content: center;// background-color: red;border-radius: 50px;font-size: 12px;cursor: pointer;img {width: 25px;height: 25px;margin-bottom: 5px;}}&_other_police {margin-bottom: 7px;}&_move {width: 100%;height: 100%;// background-color: red;position: absolute; /* 【主要代码】 */top: 0;// z-index: -10;}
}

mixins/index.js

import { mapGetters } from 'vuex'
import screenfull from 'screenfull'
import portraitMock from '../../../../public/static/portraitMock.json'export const PortraitMixin = {data() {return {lightEchartsNoDataColor: '#000',blueEchartsNoDataColor: '#fff',timeFormat: 'yyyy/MM/dd',timeValueFormat: 'yyyy-MM-dd',portraitMock,initBtnX: 0,initBtnY: 0,isMove: false // 【主要代码】}},computed: {...mapGetters(['isFullscreen'])},mounted() {const _this = thiswindow.addEventListener('resize',() => {// 全屏下监控是否按键了ESCif (_this.checkFull()) {// 全屏下按键esc后要执行的动作screenfull.exit()_this.$store.commit('SET_isFullscreen', false)}},false)document.addEventListener('mouseup', () => {this.isMove = false // 【主要代码】document.removeEventListener('mousemove', this.mousemoveHandler)})},filters: {noDataFilter(val) {return val || val === 0 ? val : '-'},numFilter(val) {return val || val === 0 ? Number(val).toLocaleString() : '-'},bmQlfFilter(val, color, key) {const data = val.filter((item) => item.policeColorCode.includes(color))return data.length ? (data[0][key] || data[0][key] === 0 ? data[0][key] : '-') : '-'}},methods: {// 全屏显示handleScreenFull() {if (!screenfull.isEnabled) {this.$message({message: 'you browser can not work',type: 'warning'})return false}if (this.isFullscreen) {screenfull.exit()this.$store.commit('SET_isFullscreen', false)this.$store.commit('SET_isShowHeader', true)} else {screenfull.request()this.$store.commit('SET_isFullscreen', true)this.$store.commit('SET_isShowHeader', false)}},/*** 是否全屏并按键ESC键的方法*/checkFull() {const isFullscreen =window.fullScreen ||window.isFullscreen ||document.webkitIsFullScreen ||document.msFullscreenEnabledlet isFull = document.fullscreenEnabled && !isFullscreen// to fix : false || undefined == undefinedif (isFull === undefined) {isFull = false}return isFull},toDetailHandler(type) { // 该方法和此处无关if (type === 'zffx') {this.$router.push({path: '/warning-manage-common/warning-query',query: {date: JSON.stringify({kssj: this.zffxSearchTime[0],jssj: this.zffxSearchTime[1]}),...(this.searchXm ? { zrr: this.searchXm } : {}),...(this.searchBm ? { ssbm: this.searchBm } : {})}})}},mousedownHandler($event) {this.initBtnX = $event.pageX - this.$refs.btns.offsetLeftthis.initBtnY = $event.pageY - this.$refs.btns.offsetTopdocument.addEventListener('mousemove', this.mousemoveHandler)},mousemoveHandler($event) {this.isMove = true // 【主要代码】this.$refs.btns.style.left = $event.pageX - this.initBtnX + 'px'this.$refs.btns.style.top = $event.pageY - this.initBtnY + 'px'}}
}

解决效果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/133898.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用 SOAR 加快事件响应并加强网络安全

随着攻击面的扩大和攻击变得越来越复杂&#xff0c;与网络攻击者的斗争重担落在了安全运营中心 &#xff08;SOC&#xff09; 身上。SOC 可以通过利用安全编排、自动化和响应 &#xff08;SOAR&#xff09; 平台来加强组织的安全态势。这一系列兼容的以安全为中心的软件可加快事…

单元格法近似求解多边形最大内接矩形问题【思路讲解+java实现】

文章目录 问题描述问题解决方案多边形网格化区分每个单元格是在多边形内部还是外部根据已标记单元格寻找最大内接矩形剪枝优化多角度旋转 案例测试代码实现说明 问题描述 给定一个多边形的点集&#xff0c;希望找出多边形内部面积最大的矩形。该问题可能出现在&#xff0c;从一…

聊聊Spring事务同步器TransactionSynchronization

在一些业务场景中可能我们需要去对某一个spring事务的生命周期进行监控&#xff0c;比如在这个事务提交&#xff0c;回滚&#xff0c;被挂起的时候&#xff0c;我们想要去执行一些自定义的操作&#xff0c;这怎么去做呢&#xff1f;其实spring作为一个高扩展性的框架&#xff0…

关系型三大范式与BCNF有什么用呢

学的时候就知道是一堆公式。 实际中在设计表的时候可能会用到。 前提是关系型数据库&#xff0c;比如mysql。 &#xff08;实际中oracle比mysql更好用。但是他收费啊。&#xff09; 第一范式&#xff1a;每个属性都是原子的&#xff08;需要做到每个属性都是不可分割的。&…

02 java ---- Android 基础app开发

目录 相对布局 显示一个美女 显示两个美女 安卓APP启动过程 安卓布局控件 常用布局之相对布局 常用布局之相对布局 padding和margin 按键美化 常用布局之线性布局 安卓按键响应的几种方式 直接设置按键的onClick绑定的函数 自定义类实现按键监听事件的接口 匿名内…

[NLP] LLM---<训练中文LLama2(一)>训练一个中文LLama2的步骤

一 数据集 【Awesome-Chinese-LLM中文数据集】 【awesome-instruction-dataset】【awesome-instruction-datasets】【LLaMA-Efficient-Tuning-数据集】Wiki中文百科&#xff08;25w词条&#xff09;wikipedia-cn-20230720-filteredBaiduBaiKe&#xff08;563w词条&#xff09; …

4.后端·新建子模块与开发(传统模式)

文章目录 学习资料新建子模块与各层查询entity的列表entitymapper层service层controller层 测试 学习资料 https://www.bilibili.com/video/BV13g411Y7GS?p8&spm_id_frompageDriver&vd_sourceed09a620bf87401694f763818a31c91e b站的学习视频 新建子模块与各层 在r…

Linux Ubuntu20.04深度学习环境快速配置命令记录

一、驱动安装 1、更新系统包 sudo apt-get updatesudo apt-get upgrade 2、安装显卡驱动 使用apt方式安装驱动&#xff0c;多数情况不容易成功&#xff0c; 使用一下方法更佳&#xff1a; 1.查看合适显卡的驱动版本 ubuntu-drivers devices NVIDIA GeForce 驱动程序 - …

POJ 3684 Physics Experiment 弹性碰撞

一、题目大意 我们有N个半径为R厘米的球&#xff0c;固定在距离地面高度为H的管道上&#xff0c;刚开始释放第一个&#xff0c;之后每过一秒释放一个&#xff0c;释放下面的球不会影响到上面的球的高度&#xff0c;忽略一切阻力&#xff0c;认为球之间的碰撞为弹性碰撞&#x…

【电子元件】常用电子元器件的识别之电容器

目录 前言1. 电容器的简介2.电容器的识别1. 铝电解电容器2.钽电解电容器3.固态电解电容器4.瓷介电容器5. 贴片陶瓷电容器6. 聚丙烯电容7. 金属化聚丙烯薄膜电容器8. 独石电容器9. 涤纶电容器10. 超小型金属化聚酯薄膜电容器11. 可变电容器11.1 空气可变电容器11.2 薄膜介质可变…

JMeter基础 —— 使用Badboy录制JMeter脚本!

1、使用Badboy录制JMeter脚本 打开Badboy工具开始进行脚本录制&#xff1a; &#xff08;1&#xff09;当我们打开Badboy工具时&#xff0c;默认就进入录制状态。 如下图&#xff1a; 当然我们也可以点击录制按钮进行切换。 &#xff08;2&#xff09;在地址栏中输入被测地…

国庆中秋特辑(一)浪漫祝福方式 用循环神经网络(RNN)或长短时记忆网络(LSTM)生成祝福诗词

目录 一、使用深度学习中的循环神经网络&#xff08;RNN&#xff09;或长短时记忆网络&#xff08;LSTM&#xff09;生成诗词二、优化&#xff1a;使用双向 LSTM 或 GRU 单元来更好地捕捉上下文信息三、优化&#xff1a;使用生成对抗网络&#xff08;GAN&#xff09;或其他技术…

深度学习-卷积神经网络-纹理表示卷积神经网络-卷积神经网络-[北邮鲁鹏]

这里写目录标题 参考文章全连接神经网络全连接神经网络的瓶颈全连接神经网络应用场景 卷积神经网络卷积层(CONV)卷积核卷积操作卷积层设计卷积步长(stride)边界填充特征响应图组尺寸计算 激活层池化层(POOL)池化操作定义池化操作作用池化层超参数常见池化操作 全连接层(FC)样本…

重建与发展:数字资产借贷行业朝着可持续发展迈进!

纵观历史&#xff0c;贷款和货币一样古老&#xff0c;无论哪种形式的货币都需要有其借贷市场。现在&#xff0c;比特币以其分散和透明的性质&#xff0c;在加密领域占据龙头地位。 就像之前的货币一样&#xff0c;比特币要真正蓬勃发展&#xff0c;也需要一个强大的借贷市场。然…

如何在Windows 10/11中重置网络,以及重置后的注意事项有哪些

本文介绍如何在Windows 10和Windows 11中重置网络设置。 如何重置Windows 10网络设置 在Windows10中使用网络重置实用程序相当简单。 一、进入“开始”菜单>“设置”,然后选择“网络和Internet”。 二、在左侧导航窗格中,选择“状态”以确保你正在查看网络状态窗口。然…

嵌入式入门教学——模电基础概念

目录 1、模拟信号和模拟电路 2、研究领域 3、常用术语 3.1、共价键 3.2、电场 3.3、温度的电压当量 3.4、动态信号 3.5、直流电流和交流电流 3.6、内阻 3.7、信号频率 3.8、电容 3.9、电感 3.10、相位 3.11、信号失真 3.12、电导 3.13、跨导 3.14、电位 3.15…

数据结构——图(图的存储及基本操作)

文章目录 前言一、邻接矩阵法&#xff08;顺序存储&#xff09;1.无向图存储邻接矩阵算法2.有向图存储邻接矩阵算法 二、邻接表法(图的链式存储结构)总结 前言 邻接矩阵法(图的顺序存储结构) 1.1 无向图邻接矩阵算法 1.2 有向图邻接矩阵算法邻接表法(图的一种链式存储结构) 一…

Unity WebView 中文输入支持

WebView 中文输入支持 &#x1f96a;效果展示&#x1f371;原理 &#x1f96a;效果展示 &#x1f4a1;使用版本为4.4&#xff1b; &#x1f4a1;测试环境&#xff1a;unity editor 2022.3.15f1c1、Windows&#xff1b; &#x1f371;原理 提取页面激活的输入框&#xff0c;…

github上创建分支并合并到master

github上创建分支并合并到master 目录概述需求&#xff1a; 设计思路实现思路分析1.创建分支2.commit changes3.create pull request按钮4.网页解析器5.数据处理器 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,ful…

多线程|多进程|高并发网络编程

一.多进程并发服务器 多进程并发服务器是一种经典的服务器架构&#xff0c;它通过创建多个子进程来处理客户端连接&#xff0c;从而实现并发处理多个客户端请求的能力。 概念&#xff1a; 服务器启动时&#xff0c;创建主进程&#xff0c;并绑定监听端口。当有客户端连接请求…