Я пытаюсь создать div шириной 100% и высотой 100vh, который бы скользил от экрана сверху вниз к странице.При 70% анимации я бы хотел сделать его внизу, затем на 90% переместить его на 30px вверх и на 100% снова сделать его внизу, чтобы он выглядел так, как будто он скользит вверх, а затем отскакивает внизу.
Я хочу, чтобы это произошло после щелчка по некоторому элементу DOM внука, поэтому в основном я буду использовать eventBus, и мой «скользящий div» будет в корневом компоненте (app.vue
), а в дочернем элементе я выберу:
showObserved() {
eventBus.$emit('showObserved');
}
здесь я запускаю свое пользовательское событие, а затем наблюдаю за этим событием в корневом компоненте и изменяю логическую переменную:
eventBus.$on('showObserved', async() => {
this.showObserved = true;
});
eventBus.$on('hideObserved', async() => {
this.showObserved = false;
});
и основываясь на этом логическом значении яотображение моего скользящего элемента div с помощью директивы v-if
:
<transition name="slide-up" mode="out-in">
<observed-offer v-if="showObserved"></observed-offer>
</transition>
и вот, наконец, я использую встроенный компонент transition
vue, чтобы сделать его скользящим, и это мои стили, которые должны дать эффект, который я объяснилв первом параграфе:
/* slide from up to down */
.slide-up-leave-active {
animation: slide-out-up .4s linear;
}
.slide-up-enter-active {
animation: slide-in-up .4s linear forwards;
}
.slide-up-in-leave-active {
animation: slide-out-up .4s linear;
}
.slide-up-leave {
opacity: 1;
transform: translateY(-100%);
}
@keyframes slide-out-up {
0% {
transform: translateY(0);
}
70% {
transform: translateY(0);
}
90% {
transform: translateY(10%);
}
100% {
transform: translateY(0);
}
}
@keyframes slide-in-up {
0% {
transform: translateY(-100%);
}
70% {
transform: translateY(0);
}
90% {
transform: translateY(10%);
}
100% {
transform: translateY(0);
}
}
и это стиль моего скользящего div:
.observed {
width: 100%;
height: 100vh;
z-index: 999999999;
overflow: hidden;
background-color: white;
}
Но это не работает, потому что он мгновенно делает всю страницу белой и слайд-контентдив,Я совершенно уверен, что я просто сделал неправильные стили CSS, я пробовал разные другие стили, и это не сработало.Также, возможно, это как-то связано с height: 100vh
.
Я добавляю демо-репозиторий .В этой демонстрации скольжение почти работает, но скольжение не работает вообще.Установка этого проекта проста, просто клонируйте его, затем cd path/to/project
, затем npm install && npm run dev
или что-то похожее в зависимости от ОС.
В демоверсии он также не отображает всю страницу, но оставляет место для кнопки, как вы увидите, еслиВы клонируете его.
Ну, на самом деле, я теперь исправляю переходы в демо-репо, единственная проблема заключается в том, что он не скрывает / не закрывает всю страницу, но оставляет место для корневого содержимого.Снова потяните репо, чтобы увидеть это.