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

cyber,
проверьте на ошибки в firefox код ниже
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <script src="animate.js"></script>
  <style>img { display: block; cursor: pointer; }</style>
  <style>
    .growing {
      /* все свойства анимируются 3 секунды */
      -webkit-transition: all 3s;
      -moz-transition: all 3s;
      -o-transition: all 3s;
      -ms-transition: all 3s;
    }
  </style>
</head>
<body>

Кликните картинку для анимации. Расположение элементов при анимации не должно меняться!
<table>
<tr>
<td>Догнать</td>
<td><img onclick="growIn(this)" src="http://ru.lookatcode.com/show/12009072174082658/flyjet.jpg" width="400" height="240" >
</td>
<td>..и перегнать!</td>
</tr>
</table>

<b>В процессе анимации повторные клики на изображение игнорировать.</b>

<script>
function growIn(img) {
  var process = arguments.callee;
  if (process.busy) return;
  process.busy = true;

  // переместить изображение в placeholder постоянного размера
  var placeholder = document.createElement('div');
  placeholder.style.width = img.offsetWidth + 'px';
  placeholder.style.height = img.offsetHeight + 'px';
  img.parentNode.replaceChild(placeholder, img);
  placeholder.appendChild(img);

  var height = img.offsetHeight, width = img.offsetWidth;

  img.className = '';
  img.style.position = 'relative';
  img.style.height = "0px";
  img.style.width = "0px";
  img.style.left = width/2+'px';
  img.style.top = height/2+'px';

  // откладываем на 0мс, чтобы началась анимация
  // иначе изменение свойств IMG не будет замечено
  setTimeout(function() {
    img.className = 'growing';
    img.style.height = height+'px';
    img.style.width = width+'px';
    img.style.left = img.style.top = "0px";
  }, 100);

  img.addEventListener('webkitTransitionEnd', done, false);
  img.addEventListener('oTransitionEnd', done, false);
  img.addEventListener('msTransitionEnd', done, false);
  img.addEventListener('transitionend', done, false);

  function done(e) {
    // будет срабатывать по 1 разу на каждое свойство e.propertyName
    if (process.busy) {
      alert('ok!');
    if(placeholder.parentNode)  placeholder.parentNode.replaceChild(img, placeholder);
      img.style.position = '';
      process.busy = false;
    }
  }

}
</script>

</body>
</html>
Ответить с цитированием