css3 анимация firefox
Столкнулся с проблемой применения css3 анимация в firefox
function setPosition(showWindow) {
if(!self.isOpen)
return;
var coords = getModalCoords();
if(ie8) {
overlay.style.height = document.body.scrollHeight +'px';
win.style.left = coords.left + 'px';
win.style.top = document.body.scrollTop + coords.top + 'px';
return;
}
// выносим блок за пределы окна
win.style.top = -coords.win_height +'px';
win.style.left = coords.left + 'px';
// добавляем класс с css3 анимацией
addClass(win, 'animate');
setTimeout(function() {
win.style.top = coords.top + 'px'; //опускаем блок в центр окна
//не работает анимации изменения top в лисе
}, 0);
};
начал разбираться, вспомнил про урок css анимации в учебники, там с примером в конце такая же хрень в лисе.. не пойму что в лисе не так? |
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>
|
рони, хм, увелечение времени для timeout как вариант , я решил по другому вынес в другой метод установку позиции, вот так
this.Show = function() {
//...
win.style.top = -getModalCoords().win_height +'px'; // перенес из функции setPosition
setPosition();
};
function setPosition() {
if(!self.isOpen)
return;
var coords = getModalCoords();
if(ie8) {
overlay.style.height = document.body.scrollHeight +'px';
win.style.left = coords.left + 'px';
win.style.top = document.body.scrollTop + coords.top + 'px';
return;
}
addClass(win, 'animate');
setTimeout(function() {
win.style.left = coords.left + 'px';
win.style.top = coords.top + 'px';
}, 0);
};
|
| Часовой пояс GMT +3, время: 02:15. |