Анимации в Maquette.js
Я изучал использование maquette.js в качестве виртуальной библиотеки DOM.
Глядя на веб-сайт, библиотека имеет функциональность для поддержки анимации при добавлении, удалении и обновлении DOM-узлов.
Но я не могу найти какие-либо документы или API о том, что нужно сделать для достижения этой цели.
Чтобы сделать его более конкретным, я сделал небольшой образец ниже и здесь.
var isPopupShown = false;
var togglePopup = function(){
isPopupShown = !isPopupShown;
}
var renderMaquette = function () {
return h("div#container", [
h("button", {
onclick: togglePopup
}, ["Click me"]),
isPopupShown ? h("div#popup") : null
]);
}
В примере, нажав кнопку, откроется всплывающее окно.
Я хотел бы, чтобы всплывающее окно анимировало постепенное появление, когда узел добавляется в DOM, и постепенное исчезновение, когда узел удаляется из DOM.
1 ответ
Документация о том, как работают анимации, все еще находится в процессе разработки.
В настоящее время есть два способа сделать анимацию.
Velocity.js
Самый простой способ - использовать такую библиотеку, как speed.js. Чтобы это работало, вам необходимо:
- Добавьте скрипт speed.js на страницу
- + Изменить
h("div#popup")
вh("div#popup", {enterAnimation: fadeIn})
- Добавьте следующую функцию javascript
Код:
var fadeIn = function(element) {
element.style.opacity = 0;
Velocity.animate(element, {opacity: 1}, 1500, "ease-out");
};
Вы можете посмотреть результат здесь.
CSS переходы
Вы также можете использовать CSS-переходы. Они работают так же, как angularJS, и реагируют. Вам нужно сделать следующее:
- Включить
css-transitions.min.js
скрипт на вашей странице. Этот скрипт также предоставляется макетом. - + Изменить
h("div#popup")
вh("div#popup", {enterAnimation: "fadeIn"})
- Измените вызов createProjector на
maquette.createProjector(document.body, renderMaquette, {transitions: cssTransitions});
- Добавьте следующие объявления стилей в таблицу стилей:
Стили:
.fadeIn {
-webkit-transition: 0.5s ease-out opacity;
transition: 0.5s ease-out opacity;
opacity: 0;
}
.fadeIn.fadeIn-active {
opacity: 1;
}
Вы можете посмотреть результат здесь