こんにちは
react-rnd の下記 issue
に投稿されている、この回答 を参考に、以下を作成しました。
jsx
1 import React , { Component } from "react" ;
2 import { render } from "react-dom" ;
3 import { Rnd } from "react-rnd" ;
4 import Modal from "react-modal" ;
5 import "./modal.css" ;
6
7 const rndStyle = {
8 display : "flex" ,
9 alignItems : "center" ,
10 justifyContent : "center" ,
11 border : "solid 1px #ddd" ,
12 background : "#f0f0f0"
13 } ;
14
15 class App extends Component {
16 constructor ( props ) {
17 super ( props ) ;
18 this . state = { showModal : false , dragging : false } ;
19 }
20
21 handelModal = ( ) => {
22 const { showModal } = this . state ;
23 this . setState ( {
24 showModal : ! showModal
25 } ) ;
26 } ;
27
28 onLocationClick = ( ) => {
29 console . log ( this . state ) ;
30 if ( this . state . dragging ) return ;
31 this . handelModal ( ) ;
32 } ;
33
34 onBoxDragStop = ( ) => {
35 const that = this ;
36 setTimeout ( function ( ) {
37 that . setState ( { dragging : false } ) ;
38 } , 500 ) ;
39 } ;
40
41 onBoxDrag = ( ) => {
42 this . setState ( { dragging : true } ) ;
43 } ;
44
45 componentDidMount ( ) {
46 Modal . setAppElement ( "body" ) ;
47 }
48
49 render ( ) {
50 return (
51 < React.Fragment >
52 < Modal
53 isOpen = { this . state . showModal }
54 className = " Modal "
55 overlayClassName = " Overlay "
56 onRequestClose = { this . handelModal }
57 >
58 Modal
59 </ Modal >
60 < Rnd
61 style = { rndStyle }
62 default = { {
63 x : 0 ,
64 y : 0 ,
65 width : 320 ,
66 height : 200
67 } }
68 onDragStop = { this . onBoxDragStop }
69 onDrag = { this . onBoxDrag }
70 >
71 < div
72 style = { {
73 height : "100%" ,
74 width : "100%" ,
75 textAlign : "center" ,
76 paddingTop : 150 ,
77 fontSize : 24
78 } }
79 onClick = { this . onLocationClick }
80 >
81 react-rnd
82 </ div >
83 </ Rnd >
84 </ React.Fragment >
85 ) ;
86 }
87 }
88
89 render ( < App /> , document . getElementById ( "root" ) ) ;
90
上記のコードを以下にて動作確認することができます。
これは、react-rnd のサンプル をベースとして、ドラッグ対象のエリアをクリックすると、 react-modal によるモーダルが表示されるようにしたものです。モーダルを消去するには、モーダルの外側をクリックするか、ESCキーを押します。
以上、参考になれば幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/18 05:34 編集
2019/11/18 06:58