vue3.2+gsap+svg创建多个component组件实现日出日落湖面小船动画效果代码
代码语言:html
所属分类:动画
代码描述:vue3.2+gsap+svg创建多个component组件实现日出日落湖面小船动画效果代码,使用了vue3中的component组件创建方法来控制场景中的太阳,船只、云朵、背景色等组件实现了动画展现效果。
代码标签: vue gsap component svg 湖面 日出 日落 夜晚 景色 小船
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/vue-slider-component/theme/antd.css"> <style> body { font-family: sans-serif; margin: 0; background-color: #1f2937; color: rgb(229, 231, 235) } svg { max-height: 90vh; max-width: calc(90vh / 900 * 1600); } .boat-enter-active { transition: transform 2s ease-out; } .boat-leave-active { transition: transform 3s ease-in; } .boat-enter-from { transform: translateX(-350px); } .boat-leave-to { transform: translateX(1400px); } .cloud-enter-active { transition: all 3s ease-out; } .cloud-leave-active { transition: all 3s ease-in; } .cloud-enter-from { opacity: 0; transform: translateX(-200px); } .cloud-leave-to { opacity: 0; transform: translateX(200px); } .controls-enter-active, .controls-leave-active { transition: transform 0.7s; } .controls--0.controls-enter-from, .controls--0.controls-leave-to { transform: translateX(-100vw); } .controls--1.controls-enter-from, .controls--1.controls-leave-to { transform: translateX(100vw); } a { color: inherit; } .absolute { position: absolute; } .relative { position: relative; } .top-0 { top: 0px; } .inset-x-0 { left: 0px; right: 0px; } .w-full { width: 100%; } .h-24 { height: 6rem; } .mt-5 { margin-top: 1.25rem; } .space-x-4 > :not([hidden]) ~ :not([hidden]) { margin-left: 1rem; } .flex { display: flex; } .justify-center { justify-content: center; } .items-end { align-items: flex-end; } .text-center { text-align: center; } .bg-bgMain { background-color: rgb(31, 41, 55); } .opacity-50 { opacity: 0.5; } .button { border-radius: 0.375rem; border: 2px rgb(75, 85, 99) solid; padding-left: 1.25rem; padding-right: 1.25rem; padding-top: 0.75rem; padding-bottom: 0.75rem; font-size: 1.5rem; line-height: 2rem; font-weight: 700; text-decoration: none; color: inherit; background-color: transparent; background-image: none; -webkit-appearance: button; cursor: pointer; } .button:hover { background-color: rgb(75, 85, 99); } </style> </head> <body translate="no" > <div id="app"> <div class="text-center"> <svg viewBox="0 0 1600 900" class="w-full"> <mask id="waterMask"> <rect fill="white" x="0" y="550" width="1600" height="350" /> </mask> <Stars :time="time" /> <Moon :time="time" /> <Sun :time="time" /> <Mountains :time="time" /> <Clouds :cloud-count="cloudCount" :time="time" /> <rect :fill="waterColor.hex()" x="0" y="550" width="1600" height="350" /> <g opacity="0.3" mask="url(#waterMask)"> <g transform="translate(0 1100) scale(1 -1)"> <Sun :time="time" /> <Mountains :time="time" /> </g> </g> <transition name="boat"> <g v-if="boatVisible"> <Boat :fill="boatColor.hex()" /> <g transform="translate(0 1380) scale(1 -1)"> <Boat :fill="boatShadowColor.hex()" /> </g> </g> </transition> <fg-mountains :time="time" /> <g opacity="0.3" transform="translate(0 1573) scale(1 -1)"> <fg-mountains :time="time" :right-only="true" /> </g> </svg> <div class="relative h-24 mt-5"> <transition name="controls"> <div v-if="controlSection === 0" class="absolute inset-x-0 top-0 space-x-4 controls--0" > <button class="button bg-bgMain" @click="boatVisible = !boatVisible"> Toggle boat </button> <button class="button bg-bgMain" @click="cloudCount++"> Add cloud </button> <button class="button bg-bgMain" @click="cloudCount--"> Remove cloud </button> <button class="button bg-bgMain" @click="controlSection++"> → </button> </div> <div v-else-if="controlSection === 1" class="absolute inset-x-0 top-0 flex items-end justify-center space-x-4 controls--1" > <button class="button bg-bgMain" @click="controlSection--"> ← </button> <div class="w-72"> <input v-model="time" type="range" min="14" max="20" /> <!-- <vue-slider v-model="time" :min="14" :max="20" :interval="1 / 60" :duration="0" .........完整代码请登录后点击上方下载按钮下载查看
网友评论0