当前位置: 首页 > wzjs >正文

外贸网站建设 深圳阳西网站seo

外贸网站建设 深圳,阳西网站seo,怎样创建网站视频,网站建设中 html免费前言 在开发复杂的前端界面时,我们常常需要一个可拖拽的弹窗(Modal),同时又希望用户能够在弹窗打开的情况下操作下层的内容。Ant Design 的 Modal 组件提供了强大的功能,但默认情况下,弹窗会覆盖整个页面&…

前言

在开发复杂的前端界面时,我们常常需要一个可拖拽的弹窗(Modal),同时又希望用户能够在弹窗打开的情况下操作下层的内容。Ant Design 的 Modal 组件提供了强大的功能,但默认情况下,弹窗会覆盖整个页面,阻止用户与下层内容交互。本文将通过代码示例,展示如何实现一个可拖拽的 Modal,并确保弹窗不会影响下层 HTML 的操作

效果图

在这里插入图片描述

视频演示

可拖拽antd Modal和保持下层 HTML 可操作性

技术栈

• React: 前端框架
• Ant Design: UI 组件库
• react-draggable: 可拖拽组件库

需求分析

  1. 可拖拽的 Modal: 用户可以通过拖拽 Modal 的标题栏来移动弹窗位置。
  2. 下层内容可操作: 弹窗打开时,用户仍然可以操作下层的 HTML 元素。
  3. 响应式拖拽限制: 弹窗的拖拽范围应限制在可视区域内。
    实现思路
  4. 使用 react-draggable 包装 Modal: 利用 react-draggable 提供的拖拽功能,将 Modal 包装为可拖拽组件。
  5. 自定义 Modal 的遮罩层: 通过设置遮罩层的 pointerEventsbackgroundColor,使其完全透明且不阻止鼠标事件。
  6. 动态计算拖拽边界: 根据窗口大小和 Modal 的尺寸,动态计算拖拽的边界,确保 Modal 不会超出可视区域。

代码实现

import { Button, Modal, Input } from 'antd';
import React, { useRef, useState } from 'react';
import type { DraggableData, DraggableEvent } from 'react-draggable';
import Draggable from 'react-draggable';const text = `...`; // 省略的 Lorem Ipsum 文本const App: React.FC = () => {const [open, setOpen] = useState(false);const [disabled, setDisabled] = useState(false);const [bounds, setBounds] = useState({ left: 0, top: 0, bottom: 0, right: 0 });const draggleRef = useRef<HTMLDivElement>(null);const showModal = () => {setOpen(true);};const handleOk = (e: React.MouseEvent<HTMLElement>) => {console.log(e);setOpen(false);};const handleCancel = (e: React.MouseEvent<HTMLElement>) => {console.log(e);setOpen(false);};const onStart = (_event: DraggableEvent, uiData: DraggableData) => {const { clientWidth, clientHeight } = window.document.documentElement;const targetRect = draggleRef.current?.getBoundingClientRect();if (!targetRect) {return;}setBounds({left: -targetRect.left + uiData.x,right: clientWidth - (targetRect.right - uiData.x),top: -targetRect.top + uiData.y,bottom: clientHeight - (targetRect.bottom - uiData.y),});};return (<><Button type="primary" onClick={showModal}>Open Draggable Modal</Button><div><Input placeholder="Input here" /><p>{text}</p><p>{text}</p><p>{text}</p><p>{text}</p></div><Modaltitle={<divstyle={{width: '100%',cursor: 'move',}}onMouseOver={() => {if (disabled) {setDisabled(false);}}}onMouseOut={() => {setDisabled(true);}}>Draggable Modal</div>}open={open}onOk={handleOk}onCancel={handleCancel}maskStyle={{pointerEvents: 'none', // 禁用遮罩层的交互,允许下层内容被操作backgroundColor: 'rgba(0, 0, 0, 0)', // 使遮罩层完全透明}}modalRender={modal => (<Draggabledisabled={disabled}bounds={bounds}onStart={(event, uiData) => onStart(event, uiData)}><div ref={draggleRef} style={{ position: 'relative', zIndex: 1000 }}>{modal}</div></Draggable>)}bodyStyle={{ overflow: 'hidden' }} // 防止 Modal 内容滚动style={{ pointerEvents: 'auto' }} // 确保 Modal 可以正常交互getContainer={false} // 防止 Modal 被附加到默认的 body 中wrapClassName="modal-no-mask" // 自定义样式类><p>Just don't learn physics at school and your life will be full of magic and miracles.</p><br /><p>Day before yesterday I saw a rabbit, and yesterday a deer, and today, you.</p></Modal><style>{`.modal-no-mask {pointer-events: none; /* 确保 Modal 不阻止鼠标事件 */}.modal-no-mask .ant-modal-content {pointer-events: auto; /* 确保 Modal 内容可以交互 */}`}</style></>);
};export default App;

关键点解析

  1. react-draggable 的使用
    Draggable 组件通过 bounds 属性限制拖拽范围,确保 Modal 不会超出可视区域。
    onStart 回调函数用于动态计算拖拽边界。
  2. 自定义遮罩层
    • 通过设置 maskStylepointerEventsnonebackgroundColor 为透明,使遮罩层不会阻止鼠标事件,同时保持完全透明。
  3. Modal 的可交互性
    • 设置 style={{ pointerEvents: ‘auto’ }} 确保 Modal 内容可以正常交互。
    • 使用 getContainer={false} 防止 Modal 被附加到默认的 body 中,避免样式冲突。
  4. 动态计算拖拽边界
    • 在 onStart 回调中,根据窗口大小和 Modal 的尺寸动态计算拖拽边界,确保 Modal 的拖拽范围始终在可视区域内。
    效果展示
  5. 可拖拽的 Modal: 用户可以通过拖拽标题栏移动 Modal 的位置。
  6. 下层内容可操作: 弹窗打开时,用户仍然可以操作下层的输入框和其他内容。
  7. 响应式拖拽限制: Modal 的拖拽范围始终在可视区域内,不会超出屏幕边界。

总结

通过结合 react-draggableAnt DesignModal 组件,我们实现了一个可拖拽的弹窗,并确保弹窗不会影响下层 HTML 的操作。这种实现方式在复杂的前端界面中非常实用,例如在地图应用、图表展示或多任务操作场景中,用户可以在弹窗打开的情况下继续操作下层内容。
希望本文的实现思路和代码示例能为你的项目提供帮助!

http://www.dtcms.com/wzjs/128341.html

相关文章:

  • wordpress bbs吗seo网站推广优化论文
  • 惠州市建设公司网站百度网站推广关键词怎么查
  • 网站做的不满意网站seo在线优化
  • 私人公司怎么做网站网络整合营销策划书
  • 做外卖有哪些网站网络营销推广方式案例
  • 最大郑州网站建设公司上海知名网站制作公司
  • 利用excel做填报网站爱站网seo查询
  • 2018wordpress主题seo优化排名百度教程
  • 网页制作素材网站设计网站模板
  • 用vs2012怎么做网站游戏代理平台一天结一次
  • wordpress更新css中山seo关键词
  • 存量权益登记在哪个网站上做如何做网络推广运营
  • 北京网站建设开发公司天津百度网站快速排名
  • 做电影网站一年赚多少关键词快速排名不限行业
  • 软件开发用什么软件编程优化师是一份怎样的工作
  • 云服务器做网站好吗品牌seo培训咨询
  • 网站建设实训的认识广告网站推荐
  • 无锡网站外包网站排名优化系统
  • 做设计需要素材的常用网站seo推广怎么收费
  • 西安做网站哪家公司好廊坊百度关键词优化怎么做
  • 徐州网站建设优化宣传广西南宁做网站的公司
  • 美津浓网站做一下脚型测试网络推广公司有哪些
  • 政府网站流行设计特点广州网站优化软件
  • wordpress 主题添加旅游企业seo官网分析报告
  • 请人做网站南京seo培训
  • 关于做面包的网站网站推广应该坚持什么策略
  • 网站建设需要注意什么 知乎媒体营销
  • 英文广告网站模板免费下载湖南靠谱seo优化公司
  • 做调查问卷能赚钱的网站seo网站推广的主要目的
  • 常熟网站建设icp备案十堰seo