React Flow浏览器默认事件失效问题解决

ops/2024/10/18 9:24:18/

前情提要

React Flow可以使用滑轮来实现对于该部分区域的放大和缩小,并且自动拦截浏览器默认的滑轮和滑轮+按键组合事件,如:Ctrl+鼠标滑轮事件。那么这就导致在非该区域的地方使用了浏览器默认的滑轮事件且改变了原有页面的大小时,在回到React Flow区域当中,并不能够还原,本文主要针对的是,在不影响当前Flow的功能外,实现对浏览器Ctrl+鼠标滑轮事件的解除拦截效果。

实现流程

首先要明确一个事,React Flow有一个属性可以对浏览器事件进行解除拦截的效果的。这个属性叫

preventScrolling(true:拦截,false:不拦截)

当我们添加这个属性时,可以通过true或false进行对浏览器事件的解绑和绑定的效果,了解了这个那么接下来的事情就好办了。那就是使用动态布尔值来进行对该属性进行处理,并且使用react状态管理、钩子、键盘监听来实现这个对Ctrl+鼠标滑轮的解绑。

实现流程

首先引入相关库:

import React, { useEffect, useState } from 'react';

定义状态变量及函数:

  const [isCtrlPressed, setIsCtrlPressed] = useState(true);  // 状态跟踪 Ctrl 键是否被按下

钩子函数里面放监听,两个监听,一个是ctrl被按下为false,一个是ctrl被释放为true。

 useEffect(() => {const handleKeyDown = (event: any) => {if (event.ctrlKey) {setIsCtrlPressed(false);}};const handleKeyUp = (event: any) => {if (!event.ctrlKey) {setIsCtrlPressed(true);}};window.addEventListener('keydown', handleKeyDown);window.addEventListener('keyup', handleKeyUp);return () => {window.removeEventListener('keydown', handleKeyDown);window.removeEventListener('keyup', handleKeyUp);};}, []);

最后在ReactFlow组件中添加 preventScrolling={isCtrlPressed}即可,大功告成,收摊回家。


http://www.ppmy.cn/ops/5372.html

相关文章

Vue.js------Vue组件基础

能够理解Vue组件概念和作用能够掌握封装创建组件能力能够使用组件之间通信能够完成todo案例 一.Vue组件创建和使用 1.折叠面板-实现多个 创建一个文件夹demo 具体步骤请参考vue.js---vue基础 ⚫ 解决方案: 采用vue提供的单.vue文件-组件方式来封装一套然后复用 在component…

皇后之战:揭秘N皇后问题的多维解法与智慧【python 力扣52题】

作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。 会一些的技术:数据分析、算法、SQL、大数据相关、python 欢迎加入社区:码上找工作 作者专栏每日更新: LeetCode解锁1000题: 打怪升级之旅 python数据分析…

Ollama教程——使用langchain:ollama与langchain的强强联合

相关文章: Ollama教程——入门:开启本地大型语言模型开发之旅 Ollama教程——模型:如何将模型高效导入到ollama框架 Ollama教程——兼容OpenAI API:高效利用兼容OpenAI的API进行AI项目开发 Ollama教程——使用langchain:ollama与…

快速删除node_modules依赖包的命令rimraf

1、安装rimraf npm install -g rimraf 2、使用命令删除node_modules rimraf node_modules *** window系统,使用命令很快就删除node_modules ***

第二十六章: mybatis plus 如何使用`LambdaQueryWrapper` 和 `QueryWrapper`

第二十六章: mybatis plus 如何使用LambdaQueryWrapper 和 QueryWrapper 目标 掌握 LambdaQueryWrapper 和 QueryWrapper的用法掌握 List对象转map对象掌握 List对象获取某字段的集合 LambdaQueryWrapper 和 QueryWrapper 是 MyBatis-Plus 中提供的查询条件构造器…

笔记本电脑上的聊天机器人: 在英特尔 Meteor Lake 上运行 Phi-2

对应于其强大的能力,大语言模型 (LLM) 需要强大的算力支撑,而个人计算机上很难满足这一需求。因此,我们别无选择,只能将它们部署至由本地或云端托管的性能强大的定制 AI 服务器上。 为何需要将 LLM 推理本地化 如果我们可以在典配…

【干货精品分享】Elasticsearch 6.7 Should 子语句的失效

在ES 使用多条件 查询,并且是多个条件只需要满足部分条件的时候,我们通常会使用到ES的should查询 GET /trademark_query_index/_search {"query":{"bool" : {"must":[{"match" : {"origin": {"…

Redis 核心知识点常考面试题(持续更新中)

Redis 核心知识点常考面试题(持续更新中) Redis单线程IO多路复用原理Redis缓存穿透、缓存雪崩、缓存击穿问题Redis与数据库双写不一致问题基于Redis实现分布式锁的的应用场景Redis持久化方式Redis内存淘汰机制Redis删除策略Redis主从复制、哨兵、集群Red…