Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >利用GSAP 简单实现页面横向背景平滑无缝切换

利用GSAP 简单实现页面横向背景平滑无缝切换

原创
作者头像
Boring Link
发布于 2025-02-07 10:56:05
发布于 2025-02-07 10:56:05
19600
代码可运行
举报
运行总次数:0
代码可运行

目录

前言

一、实现思路

二、页面层次

三、目录结构

 四、HTML 结构

五、JavaScript 脚本

要点

六、CSS 层叠样式表

七、实现效果


前言

         近期在制作自己的网站上时想尝试面包屑导航到不同页面时页面的无缝切换,考虑使用 GSAP(GreenSock 动画平台)实现。这个网站使用 vuetify 作为 CSS 框架。

一、实现思路

​编辑

二、页面层次

​编辑

三、目录结构

|———layout |                 |———default.vue |———pages |                 |———页面1 |                |              |———index.vue |                |———页面2 |                |              |———index.vue |                |———页面3 |                |              |———index.vue |                |———页面4 |                                |———index.vue

 四、HTML 结构

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <!-- 背景容器 -->
  <div class="background-container">
    <div
      v-for="(page, index) in pageOrder"
      :key="index"
      class="background-item"
    >
      <v-img :src="backgrounds[page].src" cover height="100%" width="100%" />
    </div>
  </div>

  <!-- 内容层 -->
  <v-main>
    <router-view v-slot="{ Component }">
      <div>
          <component :is="Component" />
      </div>
    </router-view>
  </v-main>
</template>

        使用一个容器作为背景,另一个容器分开存放页面内容,这里不考虑具体页面内容的实现。

五、JavaScript 脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script setup>
import gsap from "gsap";
import { useRoute, ref, watch, onMounted } from 'vue';

const route = useRoute();

// 背景媒体映射
const backgrounds = {
  "/页面 1 路径": {
    src: new URL("@/assets/image1.webp", import.meta.url).href
  },
  "/页面 2 路径": {
    src: new URL("@/assets/image2.webp", import.meta.url).href
  },
  "/页面 3 路径": {
    src: new URL("@/assets/image3.webp", import.meta.url).href
  },
  "/页面 4 路径": {
    src: new URL("@/assets/image4.webp", import.meta.url).href
  }
};

// 导航顺序映射
const pageOrder = ["/页面 1 路径", "/页面 2 路径", "/页面 3 路径", "/页面 4 路径"];

// 背景的移动方向
const direction = ref("left");

// 侦听页面路径变化
watch(
  () => route.path,
  (toPath, fromPath) => {
    // 根据页面相对关系决定背景的移动方向
    const toIndex = pageOrder.indexOf(toPath);
    const fromIndex = pageOrder.indexOf(fromPath);
    direction.value = fromIndex > toIndex ? "right" : "left";

    // 应该直接操作背景图片个体
    gsap.to(".background-item", {
      x: `-${toIndex * 100}%`,
      duration: 0.8,
      ease: "power1.inOut"
    });
  }
);

// 页面挂载时初始化为对应图片
onMounted(() => {
  gsap.set(".background-item", {
    x: `-${pageOrder.indexOf(route.path) * 100}%`
  });
});
</script>

要点

        首先,这里 GSAP 应该直接应用到图片个体,而不是其父容器 background-container,否则 GSAP 会以父容器的长度来计算。

        其次,页面挂载时应该初始化为对应的背景。如在页面 2 刷新,如果没有挂载时正确设置,则会显示页面 1 的背景。

六、CSS 层叠样式表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style scoped>
.background-container {
  position: fixed;
  top: 0;
  left: 0;
  width: 400%; /* 4个页面 */
  height: 100%;
  display: flex;
  /* z-index: -1; */
}

.background-item {
  flex: 0 0 25%; /* 100% ÷ 4 */
  height: 100%;
}
</style>

七、实现效果

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
我用 Vue3+Ts+Vite2 写了一个美女小黄站
首先使用以下命令创建项目 yarn create @vitejs/app vue3-ts-vite2 --template vue-ts vite.config.js import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import path from 'path' // https://vitejs.dev/config/ export default defineConfig({ plugins: [
公众号---人生代码
2021/04/22
4.4K0
玩转GSAP与barba.js,实现炫酷页面切换效果
今天我们将通过一个实战案例,来展示如何使用GSAP和barba.js制作一个炫酷的页面切换效果。该案例展示了一个在线购物网站的首页和产品页之间的切换动画。通过这个案例,大家可以学会如何结合GSAP和barba.js实现流畅的页面过渡效果,动画效果如视频所示:
前端达人
2024/06/28
6000
玩转GSAP与barba.js,实现炫酷页面切换效果
Vue3+Element-plus前端学习笔记-巨长版
「写好的代码」:Lvan826199/mwj-vue3-project: vue3-vite构建的一个前端模版 (github.com)
梦无矶小仔
2024/03/25
8590
Vue3+Element-plus前端学习笔记-巨长版
Vue3入门笔记四 ---- 实现公共头部样式
这个系列的笔记重点会放在怎么样利用Vue3把项目架设起来并跟后端API互动,不会介绍Vue的基础特性,关于Vue的基础特性可以参考这个视频四个小时带你快速入门Vue,我是看这个入门的,觉得还不错。
panzhixiang
2024/10/30
1720
如何优雅解决若依二级菜单名字过长问题:若依(RuoYi)菜单字体大小,菜单长度修改攻略
在使用若依框架过程中,经常遇到菜单名称太长导致显示不全的问题。本文详细介绍两种有效的解决策略,包括如何增加菜单列宽和使用文本框动态显示标签名称。本文适合对前端布局优化感兴趣的开发者,无论是初学者还是经验丰富的大佬。掌握这些技巧后,你将能够优化菜单展示,提升用户体验。关键词:若依框架、菜单展示优化、前端开发、界面布局、CSS。
猫头虎
2024/04/08
2K0
如何优雅解决若依二级菜单名字过长问题:若依(RuoYi)菜单字体大小,菜单长度修改攻略
vue 项目中自定义布局与左侧菜单及路由跳转功能的实现(简易版)
在 Vue项目中,实现自定义布局与左侧菜单及路由跳转功能,对于笔者这种不是精通前端开发的同学一向是比较困难的。以前都是在开源项目的基础上扩展自己的功能,比较著名的开源项目 vue-element-admin 就是开源项目的作者通过定义实现的左侧菜单和路由跳转的。不过 vue-element-admin 项目使用的 vue 版本还停留在 vue2,现在市场上新项目普遍都用 vue3 技术了, 但是 vue-element-admin 项目也相应地出了 Vue3 版本,对应的 gitee 仓库地址为:https://gitee.com/youlaiorg/vue3-element-admin.git
用户3587585
2024/05/10
2.1K0
vue 项目中自定义布局与左侧菜单及路由跳转功能的实现(简易版)
【从零到一手撕脚手架 | 第一节】配置基础项目结构 Vite + TypeScrpit + Vue3 初始化项目
Vite官方文档对环境变量的介绍:环境变量和模式 | Vite 官方中文文档 (vitejs.dev)
LonelySnowman
2023/03/07
1.6K0
【从零到一手撕脚手架 | 第一节】配置基础项目结构  Vite + TypeScrpit + Vue3 初始化项目
Nuxt.js详解(一)
pages/ --| book/ //同名文件夹 -----| _id.vue -----| index.vue --| book.vue //父组件
陶然同学
2023/02/24
5.5K0
Nuxt.js详解(一)
测试平台开发(二) 高逼格登录页面
怎么样?哎哟,不错哦。本文就带大家一起用 Vue + Element-UI 把这个不错的登录页面开发出来。
dongfanger
2020/11/04
1.2K0
测试平台开发(二) 高逼格登录页面
基于vue封装的pc端swiper组件
基于vue封装的pc端swiper组件 话不多说,直接上代码 App.vue <template> <div> <div class="container"> <h2>Pc端轮播图</h2> <div v-if="imgList.length>0"> <Swiper :delay="delay" :duration="duration" :mode="mode"> <swiper-item v-for="(item,index) in
hss
2022/02/25
9480
前端基于DOM或者Canvas实现页面水印
我们会看到很多页面带有水印,但是怎么实现呢?当然可以有多种实现方式,本文主要讲解在vue项目中基于DOM或者Cavans实现水印效果,当然还有其他的实现方式,比如在原图片的基础上加上水印生成新的图片,但是这需要后端处理。因为要在vue项目中使用,所以我使用自定义指令可以直接对挂载的dom实现水印效果。
不叫猫先生
2023/11/14
6390
前端基于DOM或者Canvas实现页面水印
【vite+vue3+Ts+element-plus】肩并肩带你写后台管理之主页面开发(侧边栏菜单生成、标签栏开发)
页面比较简单,主要分为左侧的菜单栏,顶部的导航栏(折叠左侧菜单,切换暗黑模式,员工账号名,退出登录),再下面的标签栏,之后就是主页面显示区域。
十里青山
2023/04/28
4.7K0
【vite+vue3+Ts+element-plus】肩并肩带你写后台管理之主页面开发(侧边栏菜单生成、标签栏开发)
Vue3使用递归组件封装El-Menu多级菜单
明知山
2023/09/06
1.1K0
Vue3使用递归组件封装El-Menu多级菜单
【腾讯云 Cloud Studio 实战训练营】使用 Cloud Studio 快速构建 Vue + Vite 完成律师 H5 页面
Cloud Studio 是基于浏览器的集成式开发环境(IDE),为开发者提供了一个稳定的云端工作站。
用户10701426
2023/08/26
3230
【腾讯云 Cloud Studio 实战训练营】使用 Cloud Studio 快速构建 Vue + Vite 完成律师 H5 页面
从头创建基于NodeJS的WEB框架Koa的项目
之前我们说过Koa框架的用法,现在我们就用它从头创建一个前后端在一块的项目,其实下面的方式还是前后端分离的,只是后端为前端提供了WEB服务器。
码客说
2021/04/19
7550
从头创建基于NodeJS的WEB框架Koa的项目
【Vue工程】004-配置环境变量、端口、代理、打包等
**官方文档: **环境变量和模式 https://cn.vitejs.dev/guide/env-and-mode.html
訾博ZiBo
2025/01/06
1220
vue搭建项目及配置
  ② 检查是否安装成功:cmd输入命令 node -v 或者 npm -v, 如果输出版本号,说明我们安装node环境成功。
生南星
2019/08/26
3.2K0
vue搭建项目及配置
AI编程:开启高效编程新时代——GSAP打字机效果
在当今科技飞速发展的时代,AI编程正逐渐成为程序员们不可或缺的得力助手。今天,就让我们跟随程序员小李我的脚步,一同领略AI编程的魅力。
Jimaks
2025/05/27
1100
AI编程:开启高效编程新时代——GSAP打字机效果
ElementUI 实现头部组件和左侧组件效果
https://www.cnblogs.com/xiao987334176/p/14434383.html
py3study
2021/03/19
2K0
js无缝轮播图
轮播图,基本是前端程序员在学习js的时候,都会拿来练手的组件,因此我特意花时间用原生js实现了一下无缝轮播图,此外还有用vue封装的pc端无缝轮播图和移动端无缝轮播图!
hss
2022/02/25
9K0
推荐阅读
相关推荐
我用 Vue3+Ts+Vite2 写了一个美女小黄站
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验