Search code examples
javascripthtmlcssanimation

Pop out automatically disappear after some seconds


I found this on how to make a popout on click in Javascript, however I am trying to alter it a bit so when it's clicked on it should automatically disappear again after some seconds... But i can't get it to work, i tried to set the animation to

@keyframes fadeIn {
0% {opacity: 0;}
50% {opacity:1 ;}
100%{opacity:0;}
}

It dissapears but it still comes back again... why is that?

function myFunction() {
    var popup = document.getElementById("myPopup");
    popup.classList.toggle("show");
}
/* Popup container - can be anything you want */
.popup {
    position: relative;
    display: inline-block;
    cursor: pointer;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

/* The actual popup */
.popup .popuptext {
    visibility: hidden;
    width: 160px;
    background-color: #555;
    color: #fff;
    text-align: center;
    border-radius: 6px;
    padding: 8px 0;
    position: absolute;
    z-index: 1;
    bottom: 125%;
    left: 50%;
    margin-left: -80px;
}

/* Popup arrow */
.popup .popuptext::after {
    content: "";
    position: absolute;
    top: 100%;
    left: 50%;
    margin-left: -5px;
    border-width: 5px;
    border-style: solid;
    border-color: #555 transparent transparent transparent;
}

/* Toggle this class - hide and show the popup */
.popup .show {
    visibility: visible;
    -webkit-animation: fadeIn 3s;
    animation: fadeIn 3s;
}

/* Add animation (fade in the popup) */
@-webkit-keyframes fadeIn {
    0% {opacity: 0;}
    50% {opacity:1 ;}
	100%{opacity:0;}
}

@keyframes fadeIn {
    0% {opacity: 0;}
    50% {opacity:1 ;}
	100%{opacity:0;}
}
<h2>Popup</h2>
<div class="popup" onclick="myFunction()">Click me to toggle the popup!
  <span class="popuptext" id="myPopup">A Simple Popup!</span>
</div>


Solution

  • I think you need to set the default state of .popup .show to opacity: 0 because after the animation runs it will return to the default state you define.

    .popup .show {
        opacity: 0; /* add this */
        visibility: visible;
        -webkit-animation: fadeIn 3s;
        animation: fadeIn 3s;
    }
    

    function myFunction() {
        var popup = document.getElementById("myPopup");
        popup.classList.toggle("show");
    }
    /* Popup container - can be anything you want */
    .popup {
        position: relative;
        display: inline-block;
        cursor: pointer;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
    }
    
    /* The actual popup */
    .popup .popuptext {
        visibility: hidden;
        width: 160px;
        background-color: #555;
        color: #fff;
        text-align: center;
        border-radius: 6px;
        padding: 8px 0;
        position: absolute;
        z-index: 1;
        bottom: 125%;
        left: 50%;
        margin-left: -80px;
    }
    
    /* Popup arrow */
    .popup .popuptext::after {
        content: "";
        position: absolute;
        top: 100%;
        left: 50%;
        margin-left: -5px;
        border-width: 5px;
        border-style: solid;
        border-color: #555 transparent transparent transparent;
    }
    
    /* Toggle this class - hide and show the popup */
    .popup .show {
        opacity: 0;
        visibility: visible;
        -webkit-animation: fadeIn 3s;
        animation: fadeIn 3s;
    }
    
    /* Add animation (fade in the popup) */
    @-webkit-keyframes fadeIn {
        0% {opacity: 0;}
        50% {opacity:1 ;}
    	100%{opacity:0;}
    }
    
    @keyframes fadeIn {
        0% {opacity: 0;}
        50% {opacity:1 ;}
    	100%{opacity:0;}
    }
    <h2>Popup</h2>
    <div class="popup" onclick="myFunction()">Click me to toggle the popup!
      <span class="popuptext" id="myPopup">A Simple Popup!</span>
    </div>