WTF???? Проблема с анимацией
Возможно я упоротный, но какое то хрень творится.
Есть функция, которая отвечает за добаление класса и вызов другой функции которая установит координаты ( переменные top и left не используются ), все хорошо анимация работает. пруф
function showAnimateWin( ) {
var top = ( window.innerHeight - win.offsetHeight ) / 2,
left = ( window.innerWidth - win.offsetWidth ) / 2;
win.classList.add("modal-window-animate");
setTimeout( function (){
end();
}, 0);
};
Но, если сделать так (Просто убрать не используемые переменные), то не анимация не работает, точнее работает, но только 1 раз... пруф
function showAnimateWin( ) {
//var top = ( window.innerHeight - win.offsetHeight ) / 2,
// left = ( window.innerWidth - win.offsetWidth ) / 2;
win.classList.add("modal-window-animate");
setTimeout( function (){
end();
}, 0);
};
Какого фига? |
Да ну бред какой то, так тоже работает анимация
Достаточно просто получить win.offsetHeight
function showAnimateWin( ) {
win.offsetHeight ;
win.classList.add("modal-window-animate");
setTimeout( function (){
end();
}, 0);
};
Что за наркомания.. |
cyber, потому что при получении offsetHeight перерисовывается страничка, поэтому работает. Это такой хак. И setTimeout тут не нужен.
Я сам так делаю:
var elem = document.createElement('div');
elem.className = 'transition';
document.body.appendChild(elem);
elem.clientHeight; //HACK - без него анимации не будет
elem.classList.add('show');
|
Ruslan_xDD, ну так оно должно и без него работать..
Мне больше интересно почему без него не работает |
Ппц короче, так работает
function showAnimateWin( ) {
end();
win.classList.add("modal-window-animate");
};
http://jsfiddle.net/p2wozc8a/9/ Подсказали на stackoverflow , на вопрос почему получил ответ Цитата:
|
|
рони, хм, по сути если я перемещаю окно, а потом добавляю transition то окно должно переместится без анимации, но на практике она работает...
|
рони, что можно почитать на эту тему, про то как работает css анимация?
|
cyber,
по теме ничего не могу добавить |
|
Malleys, эм это все примитивная фигня, меня интересуют более технические детали
|
Цитата:
Пример http://codepen.io/Malleys/pen/yyVroo |
Malleys, в таких случаях - да. Но если элемент только добавлен в DOM, то анимация не сработает, пока не дёрнешь какой-нибудь геттер для перерисовки. Ну или в setTimeout можно обернуть, так как он сработает минимум через 4мс - за это время браузер уже сам успевает перерисовать всё. :)
|
От нечего делать набросал свой вариант с окошком. :)
http://learn.javascript.ru/play/X0G0c
<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
.window {
background: #FFF;
border: 1px solid #DDD;
border-radius: 10px;
box-shadow: 0 0 15px #CCC;
left: 0;
height: 200px;
margin: 0 auto;
opacity: 0;
position: fixed;
right: 0;
top: -200px;
-webkit-transition: all 0.5s;
-moz-transition: all 0.5s;
-o-transition: all 0.5s;
-ms-transition: all 0.5s;
transition: all 0.5s;
-webkit-transform: scale(0);
-moz-transform: scale(0)
-o-transform: scale(0);
-ms-transform: scale(0);
transform: scale(0);
visiblity: hidden;
width: 300px;
}
.window button {
background: #EEE;
border: none;
border-radius: 0 0 10px 10px;
bottom: 0;
color: #AAA;
cursor: pointer;
height: 25px;
margin: 0;
outline: none;
position: absolute;
width: 100%;
}
.window-show {
opacity: 1;
top: 20%;
-webkit-transform: scale(1);
-moz-transform: scale(1)
-o-transform: scale(1);
-ms-transform: scale(1);
transform: scale(1);
visibility: visible;
}
</style>
</head>
<body>
<input onclick="showWindow(true)" type="button" value="Show Window">
<div class="window">
<button onclick="showWindow(false)">Close window</button>
</div>
<script type="text/javascript">
var windowSelf = document.querySelector('.window');
function showWindow(to) {
windowSelf.classList.toggle('window-show', to);
};
</script>
</body>
</html>
|
Цитата:
http://javascript.ru/forum/css-html-...eflow-bug.html |
Ruslan_xDD,
http://jsfiddle.net/dyL78o6k/3/ с моим скриптом) |
cyber, а чего по "Close" анимацию не сделал? :) Можно по "Close" сделать просто плавное исчезновение fade, эффектно получится. :)
|
Ruslan_xDD, потом допилю, основные фичи поправил, пока основная фича лёгкое управление анимацией вроде получилась + минимальные размеры https://github.com/cyberua/modalJS
|
Цитата:
|
Octane, збс, обожаю этот зоопарк.
спасибо, поправил. |
| Часовой пояс GMT +3, время: 03:16. |