50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Split Landing Page(拆分展示页)

article/2025/8/27 13:03:49

📅 我们继续 50 个小项目挑战!—— SplitLandingPage 组件

  • 仓库地址:https://github.com/SunACong/50-vue-projects

  • 项目预览地址:https://50-vue-projects.vercel.app/

在这里插入图片描述


在这篇文章中,我们将实现一个交互式的左右面板对比组件,当用户将鼠标悬停在某一侧时,该侧会自动扩展以获得更多展示空间,提供强烈的视觉聚焦效果 ✨

适用于:商品对比、双选项引导页面、动态首页背景等场景


🎯 组件目标

  • 左右两个全屏高度的面板
  • 鼠标悬停在任一面板上时,该面板自动扩展至 75% 宽度,另一面板缩小至 25%
  • 鼠标移出后恢复 50% 对半布局
  • 背景支持图片和透明遮罩,内容居中展示标题与按钮

🛠️ 技术实现点

  • 使用 Vue 的 ref + reactive 实现响应式状态追踪
  • 使用 TailwindCSS 原子类管理布局、动画、背景和文本样式
  • 利用 @mousemove@mouseleave 事件监听鼠标位置
  • 根据鼠标区域动态绑定 class 控制宽度动画

🧱 SplitLandingPage.vue组件实现

<template><divclass="head-text flex h-screen items-center justify-center text-black"ref="container"@mousemove="handleMouseMove"@mouseleave="resetPanels"><!-- 左侧面板 --><divref="leftSide":class="[ 'relative h-full transition-all duration-700 ease-in-out', activePanel === 'left' ? 'w-3/4' : activePanel === 'none' ? 'w-1/2' : 'w-1/4' ]"><div class="absolute inset-0 bg-[url(@/assets/ps.jpg)] bg-cover"></div><div class="absolute inset-0 bg-pink-300/50"></div><div class="absolute inset-0 flex flex-col items-center justify-center gap-10 text-white"><p class="text-6xl font-bold">Playstation 5</p><button class="rounded-lg bg-pink-500 px-6 py-2 text-white transition-all hover:bg-pink-600">BUY NOW</button></div></div><!-- 右侧面板 --><divref="rightSide":class="[ 'relative h-full transition-all duration-700 ease-in-out', activePanel === 'right' ? 'w-3/4' : activePanel === 'none' ? 'w-1/2' : 'w-1/4' ]"><div class="absolute inset-0 bg-[url(@/assets/xbox.jpg)] bg-cover"></div><div class="absolute inset-0 bg-gray-200/50"></div><div class="absolute inset-0 flex flex-col items-center justify-center gap-10 text-white"><p class="text-6xl font-bold">Xbox Series X</p><button class="rounded-lg bg-gray-700 px-6 py-2 text-white transition-all hover:bg-gray-800">BUY NOW</button></div></div></div>
</template>

🧩 重点效果实现

const handleMouseMove = (e) => {if (!container.value) returnconst containerWidth = container.value.offsetWidthconst mouseX = e.clientXactivePanel.value = mouseX < containerWidth / 2 ? 'left' : 'right'
}const resetPanels = () => {activePanel.value = 'none'
}
  • handleMouseMove:根据鼠标位置设置当前激活面板
  • resetPanels:鼠标移出容器,恢复为中间对称状态

🎨 TailwindCSS 样式重点讲解

类名作用说明
w-3/4w-1/2w-1/4控制宽度动态响应
transition-all添加平滑过渡效果
duration-700设置动画时长 700ms
ease-in-out提升动画曲线体验
absolute inset-0实现背景图和遮罩的层叠与填充
bg-[url(...)] bg-cover加载背景图并保持填充
bg-pink-300/50半透明粉色遮罩层
text-6xl font-bold设置标题文字样式
hover:bg-pink-600按钮 hover 态变色

🧾 常量定义 + 组件路由建议

constants/index.js 添加组件预览常量:

export const projectList = [
{id: 7,title: 'Split Landing Page',image: 'https://50projects50days.com/img/projects-img/7-split-landing-page.png',link: 'SplitLandingPage',},
]

router/index.js 中添加路由选项:

{path: '/SplitLandingPage',name: 'SplitLandingPage',component: () => import('@/projects/SplitLandingPage.vue'),},

🧠 小结

通过 Vue 的响应式状态 + Tailwind 的原子类动画能力,我们成功实现了一个交互性十足的左右悬停扩展对比组件。它不仅视觉吸引力强,而且极其易于维护和扩展。如果你在构建商城首页、交互引导页或产品对比模块,这个模式可以完美复用!🚀


👉 下一篇,我们将完成一个简单灵动的 FromWave组件,适合任何表单搜集页面!🚀


http://www.hkcw.cn/article/cKKcSatQSF.shtml

相关文章

Dif-Fusion:第一个基于扩散模型实现的红外光与可见光图像融合的论文

1. 论文介绍 论文主要创新点&#xff1a;提出了第一个基于扩散模型 (Diffusion) 实现的红外光与可见光图像融合模型&#xff0c;但模型不止简单的依赖于 Diffusion&#xff0c;而是一个新颖的 two-stage 的图像融合模型。 Dif-Fusion 利用扩散模型的生成能力&#xff0c;直接在…

Java开发经验——阿里巴巴编码规范实践解析5

摘要 这篇文章主要介绍了阿里巴巴Java开发规范中关于安全和性能优化的实践解析。内容涵盖了配置文件密码加密、用户输入内容风控、SQL注入防护、参数有效性验证、XSS攻击防护、CSRF安全验证、文件上传安全检查、防重放机制等多个方面&#xff0c;通过正反示例和推荐做法&#…

如何在python3.8环境中安装pytorch

我的conda配置了两个独立环境&#xff1a; base环境 - 安装有Python 3.12及各类依赖包&#xff1b;pytorch环境 - 基于Python 3.8创建&#xff0c;包含特定功能包。 在Anaconda Prompt中激活您的PyTorch环境&#xff1a; 访问PyTorch官网历史版本页面&#xff08;https://pyt…

源的企业级网络安全检测工具Prism X(棱镜X)

Prism X&#xff08;棱镜X&#xff09;是由yqcs团队自主研发的开源网络安全检测解决方案&#xff0c;专注于企业级风险自动化识别与漏洞智能探测。该工具采用轻量化架构与跨平台设计&#xff0c;全面兼容Windows、Linux及macOS操作系统&#xff0c;集成资产发现、指纹鉴别、弱口…

ADB识别手机系统弹授权框包含某段文字-并自动点击确定按钮

ADB识别手机系统弹授权框包含某段文字-并自动点击确定按钮 --蓝牙电话App自动部署 上一篇&#xff1a;手机打电话时将对方DTMF数字转为RFC2833发给局域网SIP坐席 下一篇&#xff1a;编写中。 一、前言 蓝牙电话方案中&#xff0c;我们提供了将手机通话的语音拦截后转发到局域…

kafka 常用知识点

文章目录 前言kafka 常用知识点1. kafka 概念2. 消息共享和广播3. 分区和副本数量奇偶数 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0…

什么是接口测试,我们如何实现接口测试?

1. 什么是接口测试 顾名思义&#xff0c;接口测试是对系统或组件之间的接口进行测试&#xff0c;主要是校验数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型&#xff0c;测试类型又主要…

我这三年……测试开发工作的一点感悟

从职场小白到测试开发&#xff0c;已经三年有余。回首这段职业旅程&#xff0c;踩过坑&#xff0c;吃过饼&#xff0c;背过锅&#xff0c;也拿过奖。和产品互掐&#xff0c;和开发干仗……也许这就是成长的代价和难忘的经历吧。今天忍不住跟宝子们分享分享我的这段心路历程 初…

[HIT计算机系统大作业] 程序人生-Hello‘s P2P

2025年5月 摘 要 本文以Hello程序为研究载体&#xff0c;系统探究其从源代码到可执行文件再到进程生命周期的完整流程&#xff0c;深度解析计算机系统多层面协同机制。首先阐述预处理、编译、汇编及动态链接的核心步骤&#xff1a;通过gcc工具链生成hello.i&#xff08;预处…

HIT-ICS 2025春计算机系统大作业 程序人生-Hello’s P2P

摘 要 本报告通过分析hello程序从hello.c源代码到进程终止的完整生命周期,系统阐述了计算机系统的多层次协作机制。首先,通过预处理、编译、汇编与链接阶段,将C语言源代码转换为可执行文件;其次,结合进程管理、存储管理及输入输出管理,深入探讨了进程创建、地址空间转换…

Hello的程序人生

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 未来技术模块 学   号 2023111680 班   级 23WLR14 学 生 姜虹伯 指 导 教 师 吴锐   计算机…

程序人生hello.c

计算机科学与技术学院 2024年5月 摘 要 本文系统分析了HELLO程序从源代码到执行的完整生命周期&#xff0c;揭示了编译系统与操作系统协同工作的底层机制。研究以Ubuntu环境和GCC工具链为基础&#xff0c;覆盖预处理、编译、汇编、链接四大阶段&#xff1a;预处理阶段展开宏…

哈尔滨工业大学HIT-ICS2024大作业-程序人生-Hello‘s P2P

第1章 概述 1.1 Hello简介 ①P2P&#xff1a;这一过程是指 Hello如何从C源文件经过预处理转变为可执行文件&#xff0c;这一过程共需经历四个阶段&#xff1a; 1&#xff09;预处理器处理&#xff0c;生成文本文件hello.i 2&#xff09;编译器处理&#xff0c;生成汇编程序…

开源项目的认识理解

目录 开源项目有哪些机遇与挑战&#xff1f; 1.开源项目的发展趋势 2.开源的经验分享&#xff08;向大佬请教与上网查询&#xff09; 3.开源项目的挑战 开源项目有哪些机遇与挑战&#xff1f; 1.开源项目的发展趋势 1. 持续增长与普及 - 开源项目将继续增长&#xff0c…

HIT-CSAPP大作业-程序人生

摘 要 本文概述了hello.c源文件从预处理、编译、汇编、链接到最终执行的关键步骤&#xff0c;阐述了程序在操作系统中的加载与运行过程。同时&#xff0c;通过对hello程序在进程管理、存储结构和输入输出控制方面的介绍&#xff0c;帮助读者对程序的整个生命周期有了基础认识…

普通人的四年程序人生

还记得当初自己为什么选择计算机&#xff1f; 当初你问我为什么选择计算机&#xff0c;我笑着回答&#xff1a;“因为我梦想成为神奇的码农&#xff01;我想像编织魔法一样编写程序&#xff0c;创造出炫酷的虚拟世界&#xff01;”谁知道&#xff0c;我刚入门的那天&#xff0…

【老张的程序人生】一天时间,我成软考高级系统分析师

今年下半年&#xff0c;我心血来潮报考了软考高级系统分析师。彼时的我&#xff0c;工作繁忙至极&#xff0c;一周十四节课&#xff0c;班主任的职责压身&#xff0c;还兼任教学管理事务&#xff0c;每日忙得晕头转向&#xff0c;那点可怜的闲暇时光&#xff0c;也都奉献给了游…

HIT-2024CSAPP 程序人生-Hello‘s P2P大作业

摘要 本文借助hello.c程序&#xff0c;结合本学期计算机系统课程所学习的大部分内容&#xff0c;分析了hello.c这个程序的一生&#xff0c;探讨了从源程序到可执行程序转变的全过程&#xff0c;包含预处理&#xff0c;编译&#xff0c;链接&#xff0c;生成等步骤&#xff0c;在…

第七届下一代数据驱动网络国际学术会议(NGDN 2025)

在线投稿: 学术会议-学术交流征稿-学术会议在线-艾思科蓝 张彦,挪威奥斯陆大学信息工程学院教授,IEEE Fellow,IET Fellow。入选欧洲科学院院士,挪威皇家科学院院士,挪威工程院院士,2018-2022连续五年全球“高被引科学家”近期主要研究方向为新一代无线通信网络和智…

Selenium 测试框架 - Kotlin

🚀Selenium Kotlin 实践指南:以百度搜索为例的完整测试示例 随着测试自动化的普及,Selenium 已成为 Web 自动化测试的事实标准,而 Kotlin 凭借其简洁语法和高安全性,越来越受到开发者欢迎。本指南将通过一个完整的实战案例——在百度中执行搜索操作,来展示如何使用 Sele…