[Modal_Callback]_모달 팝업 사용자 선택 Boolean 값으로 콜백 받기
2022. 11. 4. 16:07ㆍ[Spring]_/[Spring]_포트폴리오 페이지 만들기
728x90
반응형
환경]
개발툴 : IntelliJ
DB : oracle
프레임워크 : spring , mybatis
사용 언어 : ES6, Java , Html5 , CSS
개요]
데이터를 저장, 수정을 하는데 있어 사용자에게 확인을 받아야 하는 경우가 있습니다.
예를 들어
"입력하신 정보를 저장하시겠습니까?" 라는 알람창이 뜬 다음
사용자가 확인 버튼을 눌러야 실행이 되고,
취소버튼을 누르면 API를 호출하지 않는 경우입니다.
이를 공통함수로 원하는 옵션을 부여하여 출력할 수 있도록 해보았습니다.
참고 CSS : http://yoonbumtae.com/?p=3632
공통함수 사용, 생성방법 다음 포스트 참고
https://yn971106.tistory.com/19
시연 화면]
<HTML>
<scipt>
우선 SPA 구조로 되어있기 때문에 Index 페이지인 Main 에 common.js 와 css 폴더를 참조시킵니다.
해당 페이지 스크립트
클릭시 이벤트를 걸어줍니다.
공통함수에 선언된
confirm 메소드에 string 형식의 파라미터만 넘겨줍니다.
<CSS>
.modal-overlay{
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
background: rgba(231, 228, 228, 0.63);
box-shadow: 0 8px 32px 0 rgba(106, 173, 197, 0.37);
backdrop-filter: blur(1.5px);
-webkit-backdrop-filter: blur(1.5px);
border-radius: 10px;
border: 1px solid rgba(255, 255, 255, 0.18);
}
.modal-window{
background: rgba(59, 99, 138, 0.7);
box-shadow: 0 8px 32px 0 rgba(101, 104, 131, 0.37);
backdrop-filter: blur( 13.5px );
-webkit-backdrop-filter: blur( 13.5px );
border-radius: 10px;
border: 1px solid rgba( 255, 255, 255, 0.18 );
width: 400px;
height: 500px;
position: relative;
top: -100px;
padding: 10px;
}
.title{
padding-left: 10px;
display: inline;
text-shadow: 1px 1px 2px gray;
color: white;
}
.title h2{
display: inline;
}
.close-area{
display: inline;
float: right;
padding-right: 10px;
cursor: pointer;
text-shadow: 1px 1px 2px gray;
color: white;
}
.content{
margin-top: 20px;
padding: 0px 10px;
text-shadow: 1px 1px 2px gray;
color: white;
height: 300px;
}
.modal_btn_list{
list-style-type: none;
width: 100%;
}
.modal_btn_list li{
float:left;
margin-left : 10px;
}
.modal_footer{
height: 20%;
width: 100%;
}
.modal_right_section{
margin-top: 78px;
margin-left: 215px;
height:100%;
}
<common.js>
dialogs:{
confirm: function(message,checkedCallback,canceledCallback,options){
let CONFIRM_TEMPLATE =`
<div class="modal-overlay" data-layer="layer-confirm">
<div class="modal-window">
<div class="title">
<h2>모달</h2>
</div>
<div class="close-area">X</div>
<div class="content">
<div class="ui-layer__body_inner">${message.replace(/(?:\r\n|\r|\n)/g,'<br>')}</div>
</div>
<div class="modal_footer">
<div class="modal_right_section">
<ul class="modal_btn_list">
<li class="modal_btn_item">
<button type="button" class="modal_btn_cancel layer-cancel">
${options && options.cancelText ? options.cancelText : '취소'}
</button>
</li>
<li class="modal_btn_item">
<button type="button" class="modal_btn_cancel layer-checked">
${options && options.checkedText ? options.checkedText : '확인'}
</button>
</li>
</ul>
</div>
</div>
</div>
</div>`
let confirmElement = _Self.ui.element.create(CONFIRM_TEMPLATE,true);
confirmElement.onkeyup = function(e){
if(e.key ==='Enter' || e.key ===' '){
confirmElement.querySelector('button.layer-checked').click();
}else if(e.key === 'Escape'){
confirmElement.querySelector('button.layer-cancel').click();
}
}
document.body.appendChild(confirmElement);
function _checked(resolve){
/*uiJSLayer.close('layer-confirm');*/
document.body.removeChild(confirmElement);
if(checkedCallback){
checkedCallback(true)
}
resolve(true);
}
function _canceled(resolve){
/*uiJSLayer.close('layer-confirm');*/
document.body.removeChild(confirmElement);
if(canceledCallback){
canceledCallback(false);
}
resolve(false);
}
return new Promise(function (resolve,reject){
// uiJSLayer.open('layer-confirm');
confirmElement.querySelector('button.layer-cancel').onclick = function(){
_canceled(resolve);
};
confirmElement.querySelector('button.layer-checked').onclick = function(){
_checked(resolve);
};
/*$('[data-layer=layer-confirm]').on('layerAfterClosed',function(){
document.body.removeChild(confirmElement);
});*/
$('.close-area').on('click',function(){
_canceled(resolve);
})
});
}
}
감사합니다.
728x90
반응형
'[Spring]_ > [Spring]_포트폴리오 페이지 만들기' 카테고리의 다른 글
[포트폴리오 페이지]_19단계_게시판 심화_(파일 다운로드 2편) (0) | 2022.04.29 |
---|---|
[포트폴리오 페이지]_18단계_게시판 심화_(파일 업로드 1편) (0) | 2022.04.29 |
[포트폴리오 페이지]_17단계_CRUD 게시판 구현_(Delete) (0) | 2022.04.26 |
[포트폴리오 페이지]_16단계_CRUD 게시판 구현_(Update 기능) (0) | 2022.04.26 |
[포트폴리오 페이지]_15단계_CRUD 게시판 구현_(목록 Read 기능) (0) | 2022.04.26 |