Анимированная вставкаBefore в javascript

Итак, у меня есть это приложение, которое проверяет наличие обновлений на сервере, получая ответ JSON, каждое новое обновление помещается в начало моего списка в новом div, который добавляется через insertBefore с использованием javascript.

Все работает нормально, но я хотел бы добавить эффект анимации при добавлении div, т.е. «медленно» переместить существующие div вниз и добавить новый вверху. Любые указания о том, как это сделать?

Приложение фактически работает в facebook, не используя iframe, я пытался использовать jquery, но, похоже, он не работает на facebook, и, глядя на модификации кода, которые делает FB, я предполагаю, что другие фреймворки будут иметь аналогичную проблему.

Вы используете какие-то конкретные библиотеки javascript? анимацию довольно утомительно делать вручную

Eran Galperin 26.11.2008 20:35
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
2 528
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это зависит от используемой вами инфраструктуры JavaScript; но посмотрите на MooTools, Священный, jQuery и YUI Анимация. Если вы просто создаете JavaScript самостоятельно, вы обнаружите, что работа с интервальными таймерами, которые изменяют стиль некоторого элемента с течением времени, а затем запускают событие завершения анимации, чтобы остановить таймер и, наконец, обновить страницу, является довольно сложной задачей. подверженный ошибкам процесс.

Вы, вероятно, ищете что-то обычно называемое горкавниз (попробуйте демо).

В jQuery вы можете делать следующее:

$(myListItem).hide().slideDown(2000);

В противном случае разверните пользовательскую анимацию, используя setTimeout и некоторые модификации CSS. Вот неприятный вопрос, который я придумал за несколько минут:

function anim8Step(height)
{
    var item = document.getElementById('anim8');

    item.style.height = height + 'px';
}

function anim8()
{
    var item = document.getElementById('anim8');
    var steps = 20;
    var duration = 2000;
    var targetHeight = item.clientHeight;
    var origOverflow = item.style.overflow;

    item.style.overflow = 'hidden';

    anim8Step(0);

    for(var i = 1; i < steps; ++i)
        setTimeout('anim8Step(' + (targetHeight * i / steps) + ');', i / steps * duration);

    setTimeout('var item = document.getElementById(\'anim8\'); item.style.height = \'auto\'; item.style.overflow = \'' + origOverflow + '\';', duration);
}

(Я не так хорошо разбираюсь в Javascript, поэтому извиняюсь, что это беспорядок.)

По сути, вы устанавливаете переполнение li (# anim8) как скрытое, чтобы содержимое не перекрывало содержимое других элементов. Затем вы устанавливаете высоту на 0 и со временем увеличиваете ее до clientHeight. Затем вы устанавливаете переполнение обратно, как оно было (этот шаг, вероятно, действительно не нужен) и удаляете атрибут высоты (на всякий случай).

Ответ принят как подходящий

Поскольку вы хотите сделать это самостоятельно, вам нужно будет использовать setTimeout для многократного изменения высоты вашего div. Базовый, быстрый и грязный код выглядит примерно так:

var newDiv; 

function insertNewDiv() {
// This is called when you realize something was updated    
// ...      
    newDiv = document.createElement('div');
    newDiv.style.height = "0px";
    document.body.appendChild(newDiv); 
    setTimeout(slideInDiv, 0);
}

function slideInDiv(){  
    newDiv.style.height = newDiv.clientHeight + 10 + "px";  // Slowly make it bigger

    if (newDiv.clientHeight < 100){
        setTimeout(slideInDiv, 40);  // 40ms is approx 25 fps
    } else {
        addContent();
    }
}


function addContent(){  
  newDiv.innerHTML = "Done!";
}

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

Другие вопросы по теме