2015-02-16 6 views
0

Я пытаюсь оживить высоту divs и в то же время установить нижнее свойство. Анимация работает, но она не остается в нижней части «родительского» div.Пытается анимировать высоту divs с помощью JavaScript

Вот код для анимации:

function mini(elem) { 
     var val = 200; 
     var elm = document.getElementById(elem.id); 

     function frame() { 
      val--; 

      elm.setAttribute("style", "height:" + val + "px;bottom:0px;"); 

      if (val == 80) { 
       clearInterval(id); 
      } 
     } 

     var id = setInterval(frame, 1);    
    } 

Вы можете увидеть весь HTML здесь: http://test.lundbeckconsulting.no/ContentBox/default.html

+0

Является ли jQuery '.animate()' не в теме? – Lopsided

+0

нет! Я читаю об этом сейчас. и мне интересно, будет ли анимация быстрее? даже когда я установил его на 1 мс, слишком медленно в javascript – SteinTheRuler

ответ

0

Вы устанавливаете bottom:0px на элементе с position:relative. Это ничего не делает.


Возможно, вы должны изучить использование jQuery .animate(). Вы можете сделать то же функцию, не заботясь о надоедливых интервалах таймера и т.д. весь Ваш код наверху может быть упрощен следующим образом:

$('#container').animate({'height':0},200,'linear');

+0

спасибо! теперь он выглядит лучше, анимация более плавная. – SteinTheRuler

0

Я считаю, что вы вызываете mini() на неверном элементе. Его следует называть container_sub, а не container.

0

Данный полный пример внутри не дает ясного понимания, которое является родителем и является дочерним.

Есть 2 простых способов сделать эффект вы хотите:

  1. Добавить Верхнее поле ребенка, так он движется вниз так же, как высота уменьшается
  2. Родительский элемент должен быть position: relative в то время как ребенок должен быть position: absolute для работы внизу

Sidenote # 1: Сделать код более читаемым, изменив стиль элемента dom с его свойством стиля. И при этом вам не нужно устанавливать нижний стиль для каждого кадра анимации.

//From 
elm.setAttribute("style", "height:" + val + "px;bottom:0px;"); 
// To 
elm.style.height = val + 'px'; 
elm.style.bottom = '0px'; 

Sidenote # 2: прочитайте об использовании Window.requestAnimationFrame() для анимации в Javascipt. Sidenote # 3: попробуйте сделать анимацию внутри css, используя комбинацию преобразования и перехода, и послушайте конец анимации с javascript.

+0

Подробнее об остановке анимации с jQuery. http://api.jquery.com/stop/ –

+0

теперь я использую jquery, и он почти работает. но когда я перемещаю мышь вокруг, иногда анимация идет вверх и вниз. http://test.lundbeckconsulting.no/ContentBox/default.html – SteinTheRuler

+0

Это связано с тем, что анимация jQuery помещается в очередь, вам нужно очистить очередь перед запуском нового экземпляра анимации. –

Смежные вопросы