flash 메시지 구현(비동기 통신)
이번에는 즐겨찾기 등록/해제 시 flash 메시지를 표시할 수 있도록 해 가고 싶습니다.
즐겨찾기 기능 구현은 여기
■사양 등
・즐겨찾기 아이콘을 클릭하면 페이지 상단에 메시지가 표시된다
・화면 스크롤에 추종한다
· 연속으로 아이콘을 누르면 최신 메시지가 중단됩니다.
· jQuery를 사용하지 않음
■완성 후의 동작과 코드
create.js.erb
//①お気に入りに登録した時の処理
if(document.getElementById('article_<%= @article.id %>').innerHTML = '<%= escape_javascript( render 'shared/articles', article: @article ) %>'){
//②flashメッセージが既に存在する場合は、それを削除する
if(document.getElementById('flash-message')){
document.getElementById('flash-message').remove();
}
//③flashメッセージ(div要素)を生成する
const flashMessage = document.createElement('div');
flashMessage.setAttribute('class', 'flash-message')
flashMessage.setAttribute('id', 'flash-message')
flashMessage.setAttribute("style", `top: ${window.scrollY}px; animation-name: flash-message-fade;` );
flashMessage.innerHTML = "お気に入りに登録しました"
//④flashメッセージの挿入先を取得(body)
const body = document.querySelector("body");
body.prepend(flashMessage)
//⑤flashメッセージの表示位置をページスクロールに合わせる
document.addEventListener('scroll', function(){
flashMessage.style.top = `${window.scrollY}px`
})
//⑥flashメッセージを4秒後に消去する
window.setTimeout(function(){
flashMessage.remove();
}, 4000);
}
■ 즐겨찾기 기능 구현
이전 여기 에서 구현한 것을 그대로 사용하고 있습니다.
■ 플래시 메시지 구현
① 즐겨찾기 등록했을 때의 처리
create.js.erb
if(document.getElementById('article_<%= @article.id %>').innerHTML = '<%= escape_javascript( render 'shared/articles', article: @article ) %>'){
if분의 조건으로서, 즐겨찾기 등록의 처리를 기술하고 있습니다.
②플래시 메시지가 이미 존재하는 경우에는 삭제
create.js.erb
if(document.getElementById('flash-message')){
document.getElementById('flash-message').remove();
}
flash 메세지 표시중에 계속해 즐겨찾기 아이콘 눌렀을 때,
보고 있는 메시지를 지우고 최신 메시지를 표시합니다. ↓
③flash 메시지(div 요소)를 생성한다
create.js.erb
const flashMessage = document.createElement('div');
flashMessage.setAttribute('class', 'flash-message')
flashMessage.setAttribute('id', 'flash-message')
flashMessage.setAttribute("style", `top: ${window.scrollY}px; animation-name: flash-message-fade;` );
flashMessage.innerHTML = "お気に入りに登録しました"
style 속성의 값으로 지정하고 있는
${window.scrollY}px;
는, 현재의 스크롤 위치를 돌려줍니다.이 요소와
animation-name
에 지정된 애니메이션의 CSS는 다음과 같습니다. ↓index.css
@keyframes flash-message-fade {
0% {
display: inline;
opacity: 0;
transform: scaleY(-1);
background-color: rgb(235, 247, 129);
}
10% { opacity: 0.5; }
20% { opacity: 1; transform: scaleY(1) }
90% { opacity: 1; transform: scaleY(1); }
100% {
opacity: 0;
transform: scaleY(0);
display: none;
background-color: white;
}
}
.flash-message {
animation-duration: 3s;
animation-fill-mode: forwards;
opacity: 0;
display: none;
position: absolute;
z-index: 2;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
height: 70px;
padding-top: 1%;
}
④flash 메시지의 삽입처를 취득(body)
create.js.erb
const body = document.querySelector("body");
body.prepend(flashMessage)
body
를 가져오고 생성된 flash 메시지의 div 요소를 삽입합니다.⑤ 플래시 메시지의 표시 위치를 페이지 스크롤에 맞추기
create.js.erb
document.addEventListener('scroll', function(){
flashMessage.style.top = `${window.scrollY}px`
})
이벤트에
scroll
를 지정하는 것으로, 화면이 스크롤 되었을 때에 이벤트 발화합니다.flash 메시지의 style 속성의 top에 이전의
window.scrollY
를 대입합니다.이렇게하면 메시지가 페이지 스크롤을 따르게됩니다. ↓
⑥ 플래시 메시지를 4초 후에 지우기
create.js.erb
window.setTimeout(function(){
flashMessage.remove();
}, 4000);
}
window.setTimeout
에 설명 된 처리는 지정된 시간 후에 실행됩니다.flash 메세지를 표시로부터 4초 후에 소거되도록(듯이) 설정했습니다.
create.js.erb의 설명은 이상입니다.
그리고는 destroy.js.erb(즐겨찾기 해제)에 ①의 조건과 ③의 메시지 내용을 변경한 것을 기술합니다.
이상으로 완성입니다.
■참고문헌
htps : //에서 ゔぇぺぺr. 모잖아. 오 rg / 자 / 도 CS / 우 B
Reference
이 문제에 관하여(flash 메시지 구현(비동기 통신)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ad1117wi/items/9b089436e65564edd3ad텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)