2017-05-02 24 views
1

this w3Schools tutorialから抽出した次のコードがあります。実行すると、「オープンモデル」をクリックすると、モーダルがCSSアニメーションで開かれることがわかります。それは美しくてシンプルです。ただし、閉じるボタンをクリックすると、逆のアニメーションを実行するのではなく、モーダルが突然終了します。モーダルを閉じるときにアニメーションを実行する方法をCSSで定義するにはどうすればよいですか?ありがとう。モーダルを閉じるときのCSSアニメーション

// Get the modal 
 
var modal = document.getElementById('myModal'); 
 

 
// Get the button that opens the modal 
 
var btn = document.getElementById("myBtn"); 
 

 
// Get the <span> element that closes the modal 
 
var span = document.getElementsByClassName("close")[0]; 
 

 
// When the user clicks on the button, open the modal 
 
btn.onclick = function() { 
 
    modal.style.display = "block"; 
 
} 
 

 
// When the user clicks on <span> (x), close the modal 
 
span.onclick = function() { 
 
    modal.style.display = "none"; 
 
} 
 

 
// When the user clicks anywhere outside of the modal, close it 
 
window.onclick = function(event) { 
 
    if (event.target == modal) { 
 
     modal.style.display = "none"; 
 
    } 
 
}
/* The Modal (background) */ 
 
.modal { 
 
    display: none; /* Hidden by default */ 
 
    position: fixed; /* Stay in place */ 
 
    z-index: 1; /* Sit on top */ 
 
    left: 0; 
 
    top: 0; 
 
    width: 100%; /* Full width */ 
 
    height: 100%; /* Full height */ 
 
    overflow: auto; /* Enable scroll if needed */ 
 
    background-color: rgb(0,0,0); /* Fallback color */ 
 
    background-color: rgba(0,0,0,0.4); /* Black w/ opacity */ 
 
} 
 

 
/* Modal Content/Box */ 
 
.modal-content { 
 
    background-color: #fefefe; 
 
    margin: 15% auto; /* 15% from the top and centered */ 
 
    padding: 20px; 
 
    border: 1px solid #888; 
 
    width: 80%; /* Could be more or less, depending on screen size */ 
 
} 
 

 
/* The Close Button */ 
 
.close { 
 
    color: #aaa; 
 
    float: right; 
 
    font-size: 28px; 
 
    font-weight: bold; 
 
} 
 

 
.close:hover, 
 
.close:focus { 
 
    color: black; 
 
    text-decoration: none; 
 
    cursor: pointer; 
 
} 
 

 
/* Modal Header */ 
 
.modal-header { 
 
    padding: 2px 16px; 
 
    background-color: #5cb85c; 
 
    color: white; 
 
} 
 

 
/* Modal Body */ 
 
.modal-body {padding: 2px 16px;} 
 

 
/* Modal Footer */ 
 
.modal-footer { 
 
    padding: 2px 16px; 
 
    background-color: #5cb85c; 
 
    color: white; 
 
} 
 

 
/* Modal Content */ 
 
.modal-content { 
 
    position: relative; 
 
    background-color: #fefefe; 
 
    margin: auto; 
 
    padding: 0; 
 
    border: 1px solid #888; 
 
    width: 80%; 
 
    box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19); 
 
    -webkit-animation-name: animatetop; 
 
    -webkit-animation-duration: 0.4s; 
 
    animation-name: animatetop; 
 
    animation-duration: 0.4s 
 
} 
 

 
/* Add Animation */ 
 
@-webkit-keyframes animatetop { 
 
    from {top: -300px; opacity: 0} 
 
    to {top: 0; opacity: 1} 
 
} 
 

 
@keyframes animatetop { 
 
    from {top: -300px; opacity: 0} 
 
    to {top: 0; opacity: 1} 
 
}
<!-- Trigger/Open The Modal --> 
 
<button id="myBtn">Open Modal</button> 
 

 
<!-- The Modal --> 
 
<div id="myModal" class="modal"> 
 

 
    <!-- Modal content --> 
 
<div class="modal-content"> 
 
    <div class="modal-header"> 
 
    <span class="close">&times;</span> 
 
    <h2>Modal Header</h2> 
 
    </div> 
 
    <div class="modal-body"> 
 
    <p>Some text in the Modal Body</p> 
 
    <p>Some other text...</p> 
 
    </div> 
 
    <div class="modal-footer"> 
 
    <h3>Modal Footer</h3> 
 
    </div> 
 
</div> 
 

 
</div>

答えて

3

利用transition代わりのanimation、その後、代わりに変更インラインスタイル

注意のクラスを切り替えるには、グレーをアニメーション化するかどうかに対処するためにいくつかのアップデートが必要な場合があります背景の有無

// Get the modal 
 
var modal = document.getElementById('myModal'); 
 

 
// Get the button that opens the modal 
 
var btn = document.getElementById("myBtn"); 
 

 
// Get the <span> element that closes the modal 
 
var span = document.getElementsByClassName("close")[0]; 
 

 
// When the user clicks on the button, open the modal 
 
btn.onclick = function() { 
 
    modal.classList.add('show'); 
 
} 
 

 
// When the user clicks on <span> (x), close the modal 
 
span.onclick = function() { 
 
    modal.classList.remove('show'); 
 
} 
 

 
// When the user clicks anywhere outside of the modal, close it 
 
window.onclick = function(event) { 
 
    if (event.target == modal) { 
 
     modal.classList.remove('show'); 
 
    } 
 
}
/* The Modal (background) */ 
 
.modal { 
 
    position: fixed; /* Stay in place */ 
 
    z-index: 1; /* Sit on top */ 
 
    left: 0; 
 
    top: 0; 
 
    width: 100%; /* Full width */ 
 
    height: 100%; /* Full height */ 
 
    overflow: auto; /* Enable scroll if needed */ 
 
    background-color: rgb(0,0,0); /* Fallback color */ 
 
    background-color: rgba(0,0,0,0.4); /* Black w/ opacity */ 
 
    top: -100%; 
 
    opacity: 0; 
 
    transition: top 0.4s, opacity 0.4s; 
 
} 
 
.modal.show { 
 
    top: 0; 
 
    opacity: 1; 
 
} 
 

 
/* Modal Content/Box */ 
 
.modal-content { 
 
    background-color: #fefefe; 
 
    margin: 15% auto; /* 15% from the top and centered */ 
 
    padding: 20px; 
 
    border: 1px solid #888; 
 
    width: 80%; /* Could be more or less, depending on screen size */ 
 
} 
 

 
/* The Close Button */ 
 
.close { 
 
    color: #aaa; 
 
    float: right; 
 
    font-size: 28px; 
 
    font-weight: bold; 
 
} 
 

 
.close:hover, 
 
.close:focus { 
 
    color: black; 
 
    text-decoration: none; 
 
    cursor: pointer; 
 
} 
 

 
/* Modal Header */ 
 
.modal-header { 
 
    padding: 2px 16px; 
 
    background-color: #5cb85c; 
 
    color: white; 
 
} 
 

 
/* Modal Body */ 
 
.modal-body {padding: 2px 16px;} 
 

 
/* Modal Footer */ 
 
.modal-footer { 
 
    padding: 2px 16px; 
 
    background-color: #5cb85c; 
 
    color: white; 
 
} 
 

 
/* Modal Content */ 
 
.modal-content { 
 
    position: relative; 
 
    background-color: #fefefe; 
 
    margin: auto; 
 
    padding: 0; 
 
    border: 1px solid #888; 
 
    width: 80%; 
 
    box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19); 
 
}
<!-- Trigger/Open The Modal --> 
 
<button id="myBtn">Open Modal</button> 
 

 
<!-- The Modal --> 
 
<div id="myModal" class="modal"> 
 

 
    <!-- Modal content --> 
 
<div class="modal-content"> 
 
    <div class="modal-header"> 
 
    <span class="close">&times;</span> 
 
    <h2>Modal Header</h2> 
 
    </div> 
 
    <div class="modal-body"> 
 
    <p>Some text in the Modal Body</p> 
 
    <p>Some other text...</p> 
 
    </div> 
 
    <div class="modal-footer"> 
 
    <h3>Modal Footer</h3> 
 
    </div> 
 
</div> 
 

 
</div>

+0

これはどのような「アニメーション」を使用しても機能しますか?フェーディング、3Dフリップなどがあります。 –

+1

@MateusFelipe は_effects_に関しては 'animation'で' transition'とほとんど同じことができます。ここでは_fading_を行うために 'opacity'が使用され、3Dの場合は' transition'と組み合わせて 'transform'を使うことができます – LGSon

+1

@MateusFelipeこのような場合、' transition'を使って 'animation ' – LGSon

関連する問題