滾動條滾動到指定位置,元素執行動畫
阿新 • • 發佈:2020-09-17
建立一個元件,自己起一個名字
<template> <div ref="scroll"> <slot></slot> </div> </template> <script> export default { name: 'GanAnimate', props: { direction: { type: String, default: 'left' } }, data() { return {} }, mounted() { // 監聽window滾動條 window.addEventListener('scroll', this.handleScroll) }, methods: { handleScroll() { // this.$refs.scroll.getBoundingClientRect().y指的是當前元素的y軸的位置 // window.innerHeight是當前瀏覽器視窗的可視高度 if (this.$refs.scroll.getBoundingClientRect().y < window.innerHeight) { this.$refs.scroll.classList.add('animate-' + this.direction) } else { this.$refs.scroll.classList.remove('animate-' + this.direction) } } } } </script> <style lang="scss" scoped> .animate-left { animation: Aleft 1s ease 1; } @keyframes Aleft { 0% { transform: translateX(-200px); } 50% { transform: translateX(200px); } 100% { transform: translateX(0); } } .animate-right { animation: Aright 1s ease 1; } @keyframes Aright { 0% { transform: translateX(200px); } 50% { transform: translateX(-10px); } 100% { transform: translateX(0); } } .animate-top { animation: Atop 1s ease 1; } @keyframes Atop { 0% { transform: translateY(-300px); } 50% { transform: translateY(-10px); } 100% { transform: translateY(0); } } .animate-bottom { animation: Abottom 0.8s ease 1; } @keyframes Abottom { 0% { transform: translateY(-150%); } 40% { transform: translateY(0); } 50% { transform: translateY(-20%); } 60% { transform: translateY(0); } 70% { transform: translateY(-10%); } 100% { transform: translateY(0); } } </style>
在需要用到的地方匯入元件
import GanAnimate from '@/components/animate/index' components: { GanAnimate }, 使用方式:direction可已傳4個值(left預設,right,bottom,top) <div class="container"> <gan-animate direction="left"> <div class="circle"></div> </gan-animate> </div> <style lang="scss" scoped> .container { width:100%; height: 1500px; display: flex; align-items: flex-end; .circle { height: 100px; width: 100px; background-color: gray; border-radius: 50%; } } </style>
自己簡單的封裝了一個動畫元件,雖然十分的粗糙,但是還是可以湊合用。