Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.05.2020, 17:37
Кандидат Javascript-наук
Отправить личное сообщение для drkrol Посмотреть профиль Найти все сообщения от drkrol
 
Регистрация: 09.10.2013
Сообщений: 114

Как сделать анимацию появления уведомления?
Здравствуйте. Есть вот такая анимация на gsap. Я пытаюсь повторить это на чистом js...
https://jsfiddle.net/0gtq67ka/

Не выходит.

var playShowMsg;
function showMsg() {
clearTimeout(playShowMsg);
document.querySelector(".msg").classList.remove("showmsg")
playShowMsg = setTimeout(function(){document.querySelector(".msg").classList.add("showmsg");}, 0);
playShowMsg = setTimeout(function(){document.querySelector(".msg").classList.remove("showmsg")}, 2000);
}


.showmsg {
	visibility: visible !important;
	opacity: 1 !important;
	transform: translateY(-5vh);
}


смысл такой:
кликаешь, появляется блок, через 2 секунды исчезает.
Если кликаешь ещё раз, то анимация должна сразу же повториться. Попробуйте в jsfiddle несколько раз быстро подряд прощёлкать. Оно под каждое нажатие проанимируется, а в моей попытке сделать также оно так не анимируется...

У меня какой-то сбой с таймером получается, потому что если 2 раза подряд нажать, то анимация не проиграется. Я попытался через clearTimeout сделать, но ничего не вышло(((

Последний раз редактировалось drkrol, 24.05.2020 в 17:52.
Ответить с цитированием
  #2 (permalink)  
Старый 24.05.2020, 21:40
Аватар для Error
Интересующийся
Отправить личное сообщение для Error Посмотреть профиль Найти все сообщения от Error
 
Регистрация: 30.04.2020
Сообщений: 17

Я тут кое-что написал. Извините, если это недостаточно осмысленно или избыточно — надеюсь, меня поправят.
<!DOCTYPE html>
<html>
<head>
  <style>
     .block {
      transition-property:height;
      width: 100%;
      background-color: #aaff00;
      overflow-y: hidden;
      height: 0;
      position:fixed;
      bottom:0;
      transition-duration:0.5s
   }
   .visible {
     height: 100px;
   }
 </style>
</head>
<body>
 <button onclick='show()'>click me!</button>
 <div class='block'>Сообщение успешно отправлено.</div>
 <script>
  const block = document.querySelector(".block"); 
  let visibility = false;
  function show() {
    if (!visibility) {
      block.classList.add("visible");
      //visibility = true;
      const command = new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve();
        }, 2000);
      });
      command.then(function () {
        block.classList.remove("visible");
        visibility = false;
      });
    }
  }
</script>
</body>
</html>

Если раскомментировать 29 строчку, то блок временно перестанет реагировать на нажатия кнопки...

Последний раз редактировалось Error, 24.05.2020 в 22:51. Причина: Решил сделать код исполняемым. Спасибо, Рони.
Ответить с цитированием
  #3 (permalink)  
Старый 24.05.2020, 22:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Error,

[html run]
... здесь можно вставить полноценный пример
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать обработку динамически созданной формы через ajax? Wimko AJAX и COMET 4 08.10.2019 16:37
Как правильно сделать анимацию на css? darktowerk56c (X)HTML/CSS 2 03.10.2019 11:07
Ajax. Как сделать загрузку изображений, отображение, удаление как на Авито wowtschuk AJAX и COMET 1 07.03.2017 01:34
как лучше сделать покадровую анимацию javascript Серджио Общие вопросы Javascript 18 05.07.2013 21:03
Не понимаю JavaScript. Как сделать ожидание события загрузки данных? xintrea AJAX и COMET 7 01.06.2013 17:18