@Quelagrate

Как закрывать окно при нажатие вне него?

Доброе утро!
Подскажите, пожалуйста новичку(тупому)...имеем код:
$( ".music-btn" ).first().on( "click", function() {
  $( ".music-content" ).first().fadeToggle(100);
  $( ".music-content" ).removeClass( "close" ).addClass( "open" ); 
} );


С помощью него при нажатии на music-btn открываю и закрываю окно, но можно ли как-то сделать , чтобы это окно также закрывалось и при нажатии в рандомное место сайта? и чтобы при этом не ломалось закрытие на кнопку... и еще момент, классы добавляю из-за анимации:
.open {
	animation: open 0.1s ;
	transition: all.0.1s ease;
}

@keyframes open {
    0% {
      top: calc(42px + 40px);
    }
    100% {
      top: calc(42px + 30px);
    }
}


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

Заранее спасибо! ♥
  • Вопрос задан
  • 165 просмотров
Пригласить эксперта
Ответы на вопрос 2
@DmiDrok
$(document).on('click', function(event) {
  const isPopupClicked = Boolean(event.target.closest('.music-content'));
  if (!isPopupClicked) {
    $('.music-content').removeClass('open');
  }
});


upd: Код для плавной анимации (но без keyframes :))

HTML:
<div class="music-content"></div>
<button class="music-btn">Open</button>

CSS:
.music-content {
  width: 400px;
  height: 400px;
  visibility: hidden;
  position: absolute;
  left: 50%;
  top: 0;
  background-color: tomato;
  transform: translate(-50%, -100%);
  opacity: 0;
  transition: transform ease .5s, opacity ease .2s, visibility ease .2s;
}

.open {
  transform: translate(-50%, 20%);
  opacity: 1;
  visibility: visible;
}

JS:
$(document).on('click', function(event) {
  const isPopupClicked = Boolean(event.target.closest('.music-content'));
  if (!isPopupClicked) {
    $('.music-content').removeClass('open');
  }
});

$('.music-btn').on('click', function(event) {
  event.stopPropagation();
  $('.music-content').addClass('open');
});
Ответ написан
@Scream034
Новичок в разработке
Я так понял у тебя анимация лишь как open, да?
- Тогда можно просто в JS менять значения в свойстве animation , а как подключить @keyframes к JS можешь и сам узнать (НО если нужно могу дать пример).
- Ещё можешь добавлять класс .open - при открытии и .close - при закрытии, там же писать логику, когда закрывается, открывается и, конечно, когда он в статике.
Так-же есть и другие способы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы