前端使用Ant Design中的Modal框实现长按顶部拖动弹框需求

news2024/11/15 3:24:42

需求:需要Ant Design中的一个Modal弹框,并且可以让用户按住顶部实现拖动操作

实现:在Ant Design的Modal框的基础上,在title中添加一个onMouseDown去记录拖拽的坐标,然后将其赋值给Modal的style属性

代码部分:

import { PureComponent } from 'react';
import { Modal } from 'antd';
class ZRJModal extends PureComponent {
  constructor(props) {
    super(props)
    //Modal 的初始值
    this.state = {
      styleTop: 100,
      styleLeft: 0,
    }
  }
  //计算是否超出屏幕;超出后
  inWindow = (left:any, top:any, startPosX:any, startPosY:any) => {
    let H = document.body.clientHeight;
    let W = document.body.clientWidth;
    if ((left < 20 && startPosX > left) || (left > W - 20 && startPosX < left) ||
      (top < 20 && startPosY > top) || ((top > H - 20 && startPosY < top))) {
      document.body.onmousemove = null;
      document.body.onmouseup = null;
      return false;
    }
    return true;
  }
  onMouseDown = (e:any) => {
    e.preventDefault();
    let startPosX = e.clientX;
    let startPosY = e.clientY;
    const { styleLeft, styleTop } = this.state;
    document.body.onmousemove = e => {
      let left = e.clientX - startPosX + styleLeft;
      let top = e.clientY - startPosY + styleTop;
      if (this.inWindow(e.clientX, e.clientY, startPosX, startPosY)) {
        this.setState({
          styleLeft: left,
          styleTop: top,
        })
      }
    };
    //鼠标放开时去掉移动事件
    document.body.onmouseup = function () {
      document.body.onmousemove = null;
    };
  };
  render() {
    const { styleLeft, styleTop } = this.state;
    const style = { left: styleLeft, top: styleTop }
    return <Modal
      title={<div style={{width:'100%',cursor:'move'}} onMouseDown={this.onMouseDown}>孜然卷弹框</div>}
      style={style}
      visible={this.state.RGZJvis}
      onOk={this.RGZJOK}
      okText={'保存'}
      width={650}
      onCancel={this.RGZJhandleCancel}
    >
      孜然卷内容
    </Modal >
  }
}
export default ZRJModal

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

没有面试邀约还在怪学历?帮助1万人通过面试的简历实战经验

很多人说自己明明投了很多公司的简历&#xff0c;但是都没有得到面试邀请的机会。自己工作履历挺好的&#xff0c;但是为什么投自己感兴趣公司的简历&#xff0c;都没有面试邀请的机会。反而是那些自己没有投递的公司&#xff0c;经常给自己打电话。 造成这些现象的主要原因&am…

解决白屏问题:让你的网站重焕生机

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Ubuntu上安装任意版本nodejs方法

在Ubuntu中安装指定版本的Node.js&#xff0c;可以使用Node Version Manager (NVM)。以下是安装步骤&#xff1a; 首先&#xff0c;安装NVM。在命令行中输入&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash 这个命令会下载并…

Maya人物建模

【MAYA人物建模】超详细讲解人物嘴巴、鼻子、眼睛、耳朵、头发、帽子等布线细节&#xff0c;零基础人物头部布线教程_哔哩哔哩_bilibili 原始图像凑合用&#xff0c;视屏中截图 图像导入过程技巧总结 前视图/右视图模式下导入图形 创建图层 锁定后可以避免图片位置的移动 前视…

【Pytorch、torchvision、CUDA 各个版本对应关系以及安装指令】

Pytorch、torchvision、CUDA 各个版本对应关系以及安装指令 1、名词解释 1.1 CUDA CUDA&#xff08;Compute Unified Device Architecture&#xff09;是由NVIDIA开发的用于并行计算的平台和编程模型。CUDA旨在利用NVIDIA GPU&#xff08;图形处理单元&#xff09;的强大计算…

外包干了10天,技术退步明显···

先说一下自己的情况&#xff0c;本科生&#xff0c;通过校招进入杭州某软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&…

⭐每天一道leetcode:69.x的平方根(简单;不使用sqrt函数)

⭐今日份题目 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。 注意&#xff1a;不允许使用任何内置指数函数和算符&#xff0c;例如 pow(x, 0.5) 或者 x ** 0.5 。 示…

Return On Investment (ROI)

Return On Investment &#xff08;ROI&#xff09;投资回报率 ROI (A - B) / A

图片去水印软件 Inpaint使用教程

Inpaint中文版是一款功能强大&#xff0c;实用方便的图片快速去水印软件&#xff0c;Inpaint中文版操作简单易上手&#xff0c;可以帮助你达到一键美化图片的效果。图片水印现在已经非常流行&#xff0c;能够借助一款不错的图片水印去除工具可以让图片处理工作简单便捷。本文讲…

AI大模型解锁写作技能,成为网红不是梦

AI大模型的出现改变了人们的生活方式&#xff0c;包括写作技能的提升。如今&#xff0c;想要成为网红并不是遥不可及的梦想。借助AI大模型&#xff0c;可以轻松地解锁写作技能&#xff0c;迅速积累粉丝&#xff0c;开启网红之路。 AI大模型拥有强大的计算和学习能力&#xff0…

看了很多文章,就这篇说明白了什么是接口测试!

接口&#xff08;API&#xff09;是一个简称&#xff0c;全名叫应用程序编程接口(Application Programming Interface)&#xff0c;是一些预先定义的函数。目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解…

基于Springboot的志愿服务管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的志愿服务管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

【Redis知识点总结】(三)——Redis持久化机制、内存淘汰策略、惰性删除机制

Redis知识点总结&#xff08;三&#xff09;——Redis持久化机制、内存淘汰策略、惰性删除机制 Redis持久化RDBAOFAOF与RDB的对比混合持久化 内存淘汰策略惰性删除机制 Redis持久化 Redis有两种数据持久化的方式&#xff0c;一种是RDB、一种是AOF。 RDB RDB是内存快照&#…

数据结构 - 堆(优先队列)+ 堆的应用 + 堆练习

文章目录 前言堆一、什么是堆二、堆又分为大根堆和小根堆三、由于堆的逻辑结构被看成完全二叉树&#xff0c;那么我们先来了解一下完全二叉树。四、堆使用数组还是链表储存数据呢&#xff1f;五、数组构建二叉树和父子节点之间的定位六、堆进行的操作七、实现小根堆1、堆的初始…

【Spring Boot 源码学习】BootstrapContext的实际使用场景

《Spring Boot 源码学习系列》 BootstrapContext的实际使用场景 一、引言二、往期内容三、主要内容3.1 BootstrapContext3.2 BootstrapRegistry 初始化器实现3.3 BootstrapContext 的实际使用场景3.3.1 早期启动时3.3.2 环境配置准备完成时3.3.3 应用上下文准备完成后关闭 Boot…

如果要填写邀请码,但是不想新建窗体 还要有确定和取消按钮和逻辑判断使用模态对话框即可

如果要填写邀请码&#xff0c;但是不想新建窗体 还要有确定和取消按钮和逻辑判断 如果你不想新建窗体来填写邀请码&#xff0c;但又希望有确定和取消按钮以及逻辑判断&#xff0c; 如果你不想新建窗体&#xff0c;并且希望在需要时显示一个临时的文本框来填写邀请码&#xff…

遥感生态指数(RSEI)——四个指数的计算

遥感生态指数RSEI&#xff08;Risk-Screening Environmental Indicators&#xff09;分布数据是一种基于卫星遥感影像反演计算得到的数据产品。生态环境质量评价在一定程度上反映一个地区生态环境系统的好坏,也可以在一定程度上反映人类社会活动和环境质量的关系,其对可持续发展…

Sftp服务器搭建(linux)

Sftp服务器搭建&#xff08;linux&#xff09; 一、基本工作原理 FTP的基本工作原理如下&#xff1a; 1&#xff09;建立连接&#xff1a;客户端与服务器之间通过TCP/IP建立连接。默认情况下&#xff0c;FTP使用端口号21作为控制连接的端口。​​​​​​​ 2&#xff09;身…

Halcon棋盘格畸变矫正

前言 通常我们使用的相机都是带有一定的畸变的&#xff0c;只是畸变的大小不同。对于我们常见的测量项目来说&#xff0c;对测量精度的要求很高&#xff0c;通常从相机镜头上进行优化&#xff0c;但是即使镜头优化或者成本原因&#xff0c;造成图像仍有一定的畸变时&#xff0…

微信小程序-可以用区域

简介 movable-view和movable-area是可移动的视图容器&#xff0c;在页面中可以拖拽滑动。 本篇文章将会通过该容器实现一个常用的拖拽按钮功能。 使用效果 代码实现 side-view.wtml 布局见下面代码&#xff0c;left view为内容区域&#xff0c;right view为操作按钮&a…