2016-06-30 2 views
0

Я только начал писать сценарии, и я не могу понять, как добавить анимацию постепенного исчезновения (ту же самую, что и угасание в анимации) при закрытии модального окна.Нужна анимация затухания для моего модального кода окна

Вот ссылка на проект: https://jsfiddle.net/myosis/kb0o27vy/

Мне нравится все об этом, это нужно только закрывающей анимации. Может кто-нибудь помочь мне !?

:)

<!DOCTYPE html> 
<html> 
<head> 
<style> 

/* The Modal (background) */ 
.modal { 
    display: none; /* Hidden by default */ 
    position: fixed; /* Stay in place */ 
    z-index: 1; /* Sit on top */ 
    padding-top: 100px; /* Location of the box */ 
    left: 0; 
    top: 0; 
    width: 100%; /* Full width */ 
    height: 100%; /* Full height */ 
    overflow: auto; /* Enable scroll if needed */ 
    background-color: rgb(255, 255, 255); /* Fallback color */ 
    background-color: rgba(255, 255, 255.4); /* Black w/ opacity */ 
    -webkit-animation-name: fadeIn; /* Fade in the background */ 
    -webkit-animation-duration: 5.4s; 
    animation-name: fadeIn; 
    animation-duration: 5.4s; 
} 
/* Modal Content */ 
.modal-content { 
    position: relative; 
    background-color: #fefefe; 
    margin: auto; 
    padding: 0; 
    border: 0px; 
    width: 822px; 
    box-shadow: 0 4px 8px 0 rgba(0,0,0,0.02),0 6px 20px 0 rgba(0,0,0,0.02); 
} 
/* 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} 
} 

/* The Close Button */ 
.close { 
    -webkit-animation-name: fadeOut; /* Fade in the background */ 
    -webkit-animation-duration: 5.4s; 
    animation-name: fadeOut; 
    animation-duration: 5.4s 
} 
.close:hover, 
.close:focus { 
    color: #000; 
    text-decoration: none; 
    cursor: pointer; 
} 
.modal-header { 
    color: #5B5B5B; 
    font-size: 30px; 
    font-family: source-sans-pro, sans-serif; 
    font-weight: 300; 
    position: relative; 
} 
.modal-body { 
    width: 538px; 
    color: #7A7A7A; 
    font-size: 14px; 
    font-family: source-sans-pro, sans-serif; 
    font-weight: 400; 
    position: relative; 
    } 
.modal-footer { 
    padding: 2px 16px; 
    background-color: #ffffff; 
    color: blac; 
} 
/* Add Animation */ 
@-webkit-keyframes fadeIn { 
    from {opacity: 0} 
    to {opacity: 1} 
} 
@-webkit-keyframes fadeOut { 
    from {opacity: 1} 
    to {opacity: 0} 
} 
</style> 
</head> 
<body> 

<h2>Animated Modal with Header and Footer</h2> 
<!-- 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">×</span> 
      <div class="clearfix grpelem" id="u1562-4"><!-- content --> 
    <p>test</p> 
    </div> 
    </div> 
    <div class="clearfix colelem" id="u1567-4"><!-- content --> 
    <p>test</p> 
    </div> 
    <div class="colelem" id="u1568"><!-- simple frame --></div> 
    <div class="clearfix colelem" id="u1566-4"><!-- content --> 
    <p>test</p> 
    </div> 
    <div class="clip_frame colelem" id="u1556"><!-- image --> 
    <img class="block" id="u1556_img" src="" alt="" width="823" height="1024"/> 
    </div> 
    <div class="modal-footer"> 
     <h3>-</h3> 
    </div> 
    </div> 
</div> 

<script> 
// 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 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"; 
    } 
} 
</script> 

</body> 
</html> 

ответ

0

Если вы не хотите использовать JQuery, здесь является быстрое решение. Я добавил setTimeout с продолжительностью времени CSS и после этого таймаута модаль установлен на display: none;. До setTimeout я добавил класс анимации для fadeOut Modal.

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

 
// Get the overlay 
 
var overlay = document.getElementById('modalOverlay'); 
 

 
// 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 the button, open the modal 
 
btn.onclick = function() { 
 
    modal.className = modal.className.replace(/ modalClose/g, ''); 
 
    overlay.className = overlay.className.replace(/ modalClose/g, ''); 
 
    
 
    modal.style.display = "block"; 
 
    overlay.style.display = "block"; 
 
}; 
 

 
overlay.onclick = function() { 
 
    modal.className = modal.className + ' modalClose'; 
 
    overlay.className = overlay.className + ' modalClose'; 
 
    
 
    setTimeout(function() { 
 
    modal.style.display = "none"; 
 
    overlay.style.display = "none"; 
 
    }, 300); 
 
}; 
 

 

 
// When the user clicks on <span> (x), close the modal 
 
span.onclick = function() { 
 
    modal.className = modal.className + ' modalClose'; 
 
    overlay.className = overlay.className + ' modalClose'; 
 

 
    setTimeout(function() { 
 
    modal.style.display = "none"; 
 
    overlay.style.display = "none"; 
 
    }, 300); 
 
}; 
 

 
// When the user clicks anywhere outside of the modal, close it 
 
window.onclick = function(event) { 
 
    if (event.target == modal) { 
 
    modal.style.display = "none"; 
 
    } 
 
};
body, html { 
 
    width: 100%; 
 
} 
 
.u1568 { 
 
    z-index: 23; 
 
    width: 200px; 
 
    background-color: transparent; 
 
    color: #5B5B5B; 
 
    line-height: 36px; 
 
    font-size: 30px; 
 
    font-family: source-sans-pro, sans-serif; 
 
    font-weight: 300; 
 
    position: relative; 
 
    margin-right: -10000px; 
 
    left: 25px; 
 
} 
 

 
.u1567-4 { 
 
    z-index: 31; 
 
    width: 200px; 
 
    background-color: transparent; 
 
    color: #9E9E9E; 
 
    font-size: 14px; 
 
    font-family: source-sans-pro, sans-serif; 
 
    font-weight: 400; 
 
    font-style: italic; 
 
    margin-left: 49px; 
 
    margin-top: 9px; 
 
    position: relative; 
 
} 
 

 
#u1568 { 
 
    z-index: 35; 
 
    width: 538px; 
 
    height: 1px; 
 
    border-width: 0px; 
 
    border-color: transparent; 
 
    background-color: #E2E2E2; 
 
    margin-left: 49px; 
 
    margin-top: 4px; 
 
    position: relative; 
 
} 
 

 

 
/* The Modal (background) */ 
 
#modalOverlay { 
 
    position: fixed; 
 
    background-color: rgba(0,0,0,0.1); 
 
    width: 100%; 
 
    height: 100%; 
 
    left: 0; 
 
    top: 0; 
 
    right: 0; 
 
    display: none; 
 
    z-index: 99; 
 
} 
 
.modal { 
 
    display: none; 
 
    opacity: 0; 
 
    /* Hidden by default */ 
 
    position: fixed; 
 
    /* Stay in place */ 
 
    z-index: 100; 
 
    /* Sit on top */ 
 
    padding-top: 100px; 
 
    /* Location of the box */ 
 
    left: 50%; 
 
    top: 50%; 
 
    width: 300px; 
 
    height: 300px; 
 
    overflow: auto; 
 
    margin-left: -150px; 
 
    margin-top: -150px; 
 
    /* Full height */ 
 
    overflow: auto; 
 
    /* Enable scroll if needed */ 
 
    background-color: rgb(255, 255, 255); 
 
    /* Fallback color */ 
 
    background-color: rgba(255, 255, 255.4); 
 
    /* Black w/ opacity */ 
 
    -webkit-animation-name: fadeIn; 
 
    /* Fade in the background */ 
 
    -webkit-animation-duration: .3s; 
 
    -webkit-animation-fill-mode: forwards; 
 
    animation-name: fadeIn; 
 
    animation-duration: .3s; 
 
    animation-fill-mode: forwards; 
 
} 
 

 

 
/* Modal Content */ 
 

 
.modal-content { 
 
    position: relative; 
 
    background-color: #fefefe; 
 
    margin: auto; 
 
    padding: 0; 
 
    border: 0px; 
 
    width: 822px; 
 
    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.02), 0 6px 20px 0 rgba(0, 0, 0, 0.02); 
 
} 
 

 

 
} 
 

 
/* 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 
 
    } 
 
} 
 

 
.modalClose { 
 
    -webkit-animation-name: fadeOut; 
 
    /* Fade in the background */ 
 
    
 
    -webkit-animation-duration: .3s; 
 
    animation-name: fadeOut; 
 
    animation-duration: .3s; 
 
    animation-fill-mode: forwards; 
 
    -webkit-animation-fill-mode: forwards; 
 
} 
 
/* The Close Button */ 
 
.close { 
 

 
} 
 
.close:hover, 
 
.close:focus { 
 
    color: #000; 
 
    text-decoration: none; 
 
    cursor: pointer; 
 
} 
 
.modal-header { 
 
    color: #5B5B5B; 
 
    font-size: 30px; 
 
    font-family: source-sans-pro, sans-serif; 
 
    font-weight: 300; 
 
    position: relative; 
 
} 
 
.modal-body { 
 
    width: 538px; 
 
    color: #7A7A7A; 
 
    font-size: 14px; 
 
    font-family: source-sans-pro, sans-serif; 
 
    font-weight: 400; 
 
    position: relative; 
 
} 
 
.modal-footer { 
 
    padding: 2px 16px; 
 
    background-color: #ffffff; 
 
    color: blac; 
 
} 
 

 
/* Add Animation */ 
 
@-webkit-keyframes fadeIn { 
 
    from { 
 
    opacity: 0 
 
    } 
 
    
 
    to { 
 
    opacity: 1 
 
    } 
 
} 
 
@-webkit-keyframes fadeOut { 
 
    from { 
 
    opacity: 1 
 
    } 
 
    
 
    to { 
 
    opacity: 0 
 
    } 
 
}
<h2>Animated Modal with Header and Footer</h2> 
 

 
<!-- Trigger/Open The Modal --> 
 
<button id="myBtn">Open Modal</button> 
 

 
<!-- The Overlay --> 
 
<div id="modalOverlay"></div> 
 

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

 
    <!-- Modal content --> 
 
    <div class="modal-content"> 
 
    <div class="modal-header"> 
 
     <span class="close">×</span> 
 
     <div class="clearfix grpelem" id="u1562-4"> 
 
     <!-- content --> 
 
     <p>test</p> 
 
     </div> 
 
    </div> 
 
    <div class="clearfix colelem" id="u1567-4"> 
 
     <!-- content --> 
 
     <p>test</p> 
 
    </div> 
 
    <div class="colelem" id="u1568"> 
 
     <!-- simple frame --> 
 
    </div> 
 
    <div class="clearfix colelem" id="u1566-4"> 
 
     <!-- content --> 
 
     <p>test</p> 
 
    </div> 
 
    <div class="clip_frame colelem" id="u1556"> 
 
     <!-- image --> 
 
     <img class="block" id="u1556_img" src="" alt="" width="823" height="1024" /> 
 
    </div> 
 
    <div class="modal-footer"> 
 
     <h3>-</h3> 
 
    </div> 
 
    </div> 
 

 
</div>

+0

Мне нравится изучать все предлагаемые варианты, я должен сказать @Phil Мне нравится ваше лучшее, именно то, что я искал! Как мне пойти и добавить это в часть для wen, которую я нажимаю вне модального окна? – myosis

+0

Эй, я обновил свой ответ и добавил наложение. Надеюсь, это то, что вам нужно. Это классный jQuery-плагин для модалов: http://flaviusmatis.github.io/easyModal.js/. Его легкий и легкий для понимания. – Phil

+0

Я потерян, мне сложно с этим наложением, все работает хорошо! Я, однако, пытался избавиться от полос прокрутки в модальном окне, но потерялся в бесконечном цикле получения нигде :( Возможно, у вас есть идея, как вернуть их туда исходное положение? – myosis

0

вы можете использовать JQuery, чтобы сделать это

$('#myBtn').click(function(){ 
    $('#myModal').fadeIn(5000); 
}); 

$('.close').click(function(){ 
    $('#myModal').fadeOut(5000); 
}); 
0

Мне нравится использовать JavaScript, поэтому я использую setInterval функцию.

После того, как вы хотите, чтобы закрыть, вы используете:

setInterval(myModal.opacity = myModal.opacity - 0.1, 500); 

Так изменяет непрозрачность на -0.1 каждые 0,5 секунды. Конечно, вы можете изменить 500 в соответствии с вашей скоростью затухания, или 0,1, чтобы изменить, насколько непрозрачность снижается.

Смежные вопросы