Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Плавное появления элемента (https://javascript.ru/forum/dom-window/80363-plavnoe-poyavleniya-ehlementa.html)

dima85 27.05.2020 18:27

Плавное появления элемента
 
function test(text){
document.body.innerHTML+='<div id="alert" class="alert">'+text+'</div>';
 setInterval(function(){
   elem("alert").classList.add("alert-open");
 },100)
}

.alert {
  position: fixed;
  left: 0;
  right: 0;
  bottom: -30%;
  transition-property: bottom;
  transition-duration: 0.5s;
}
.alert-open {
    bottom: 0%;
}


Когда вызываем функцию у нас появляется блок который плавно выезжает.
Подскажите пожалуйста как избавится от setInterval?
Спасибо.

dima85 27.05.2020 18:58

Не то.

laimas 27.05.2020 19:01

Не обратил внимание на классы.
Странно, у вас что вся страница будет из одного DIV? Создавайте, затем добавляйте его в документ, и добавленному указывайте и имя класса, и таймер не потребуется.
Анимации CSS можно задать и задержку, если требуется.

рони 27.05.2020 19:26

Цитата:

Сообщение от dima85
Подскажите пожалуйста как избавится от setInterval?

измерить ширину окна перед classList.add

dima85 27.05.2020 19:43

Цитата:

Сообщение от рони (Сообщение 525033)
измерить ширину окна перед classList.add

Не совсем понял о чем вы. Окно браузера самостоятельно сделать другого размера? Это не заставить делать посетителей сайта. :)

рони 27.05.2020 19:49

Цитата:

Сообщение от dima85
Не совсем понял о чем вы

document.documentElement.clientHeight;
<!doctype html>
<html lang="ru">
<head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style type="text/css">
.alert {
    position: fixed;
    left: 0;
    right: 0;
    bottom: -30%;
    transition-property: bottom;
    transition-duration: 0.5s;
}
.alert-open {
        bottom: 0%;
         font-size: 48px;
         text-align: center;
}
        </style>
</head>
<body>
 <script>
function test(text){
let elem = document.createElement('div');
elem.className = 'alert';
elem.innerHTML = text;
document.body.appendChild(elem);
document.body.scrollHeight;
elem.classList.add("alert-open");
}
test('text')
</script>

</body>
</html>

dima85 27.05.2020 19:49

Цитата:

Сообщение от laimas (Сообщение 525028)
Не обратил внимание на классы.
Странно, у вас что вся страница будет из одного DIV? Создавайте, затем добавляйте его в документ, и добавленному указывайте и имя класса, и таймер не потребуется.
Анимации CSS можно задать и задержку, если требуется.

Скорее вы совсем не поняли работу кода. Обратите еще внимание на 2 строку, там +=
Блок добавляется и позиционируется поверх всего сайта.

рони 27.05.2020 19:57

Цитата:

Сообщение от dima85
там +=

не делайте так, если не хотите проблем, сотрутся все обработчики после перезаписи.

dima85 27.05.2020 20:47

Цитата:

Сообщение от laimas (Сообщение 525028)
Не обратил внимание на классы.
Странно, у вас что вся страница будет из одного DIV? Создавайте, затем добавляйте его в документ, и добавленному указывайте и имя класса, и таймер не потребуется.
Анимации CSS можно задать и задержку, если требуется.

Цитата:

Сообщение от рони (Сообщение 525038)
не делайте так, если не хотите проблем, сотрутся все обработчики после перезаписи.

Понял, спасибо. Ваше решение работает хорошо на компьютере. Но на телефоне Chrome, Firefox - нет плавного появления, появляется сразу.
Есть идеи почему? (Мой код плавно работал и на телефоне)

рони 27.05.2020 21:02

Цитата:

Сообщение от dima85
Есть идеи почему?

возможно там нет documentElement, измерьте что-то другое например
document.body.scrollHeight;

смотрите исправленный пример выше


Часовой пояс GMT +3, время: 20:21.