news 2026/8/21 17:05:38

svelte-motion 手势动画实战:whileHover、whileTap、whileFocus 打造高交互 UI

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
svelte-motion 手势动画实战:whileHover、whileTap、whileFocus 打造高交互 UI

svelte-motion 手势动画实战:whileHover、whileTap、whileFocus 打造高交互 UI

【免费下载链接】svelte-motionAn animation library for Svelte based on framer-motion.项目地址: https://gitcode.com/gh_mirrors/sv/svelte-motion

svelte-motion是一款基于 framer-motion 打造的 Svelte 动画库,让你用极少的代码实现丝滑的 UI 动效。本文聚焦手势动画三剑客——whileHoverwhileTapwhileFocus,通过可复制的实战代码,教你快速为按钮、卡片、表单打造高交互体验,无需手写复杂的事件监听与过渡逻辑。

一、快速上手:svelte-motion 安装与基础用法

一键安装步骤

在项目终端执行:

npm install --save-dev svelte-motion

最小可用示例

svelte-motion 的核心是<Motion>组件,配合use:motion指令即可让任意元素动起来:

<script> import { Motion } from "svelte-motion"; </script> <Motion let:motion> <div use:motion animate={{ scale: 1.5 }}> 我会放大! </div> </Motion>

也可以直接使用封装好的[MotionDiv](https://link.gitcode.com/i/8b6d4f76828a7cbefa2362caa1cbcb60),写法更接近 framer-motion:

<script> import { MotionDiv } from "svelte-motion"; </script> <MotionDiv animate={{ x: 100 }} transition={{ duration: 0.5 }}> 我会滑动! </MotionDiv>

二、whileHover:悬停即动,让卡片"活"起来

whileHover在鼠标进入元素时触发,常用于卡片浮起、按钮变色等反馈。

最简单的悬停放大效果

<MotionDiv whileHover={{ scale: 1.05 }} transition={{ type: "spring", stiffness: 300 }} > 鼠标悬停我试试 </MotionDiv>

搭配boxShadow即可做出流行的"卡片浮起"效果:

<MotionDiv whileHover={{ scale: 1.05, boxShadow: "0 10px 30px rgba(0,0,0,0.15)" }} transition={{ type: "spring" }} > 悬停浮起卡片 </MotionDiv>

提示:加上spring弹性过渡,悬停反馈会显得更高级、更自然。

三、whileTap:按下瞬间的按压反馈

whileTap在手指/鼠标按下时触发,最适合按钮和可点击卡片,让"按下去"的物理感立刻呈现。

按钮按压效果

<MotionDiv whileHover={{ scale: 1.05 }} whileTap={{ scale: 0.92 }} transition={{ type: "spring", stiffness: 400, damping: 15 }} > 点我按下 </MotionDiv>

三个技巧帮你把按压做得更细腻:

  • 缩小比例scale: 0.9 ~ 0.95是舒适区间,太小会显得生硬
  • 叠加位移:配合y: 2让按钮有"沉下去"的感觉
  • 加速过渡transition中的durationspring参数决定回弹手感

四、whileFocus:聚焦高亮,提升表单可用性

whileFocus在元素获得焦点(键盘 Tab 或点击)时触发,是表单输入框的"高亮神器",也是无障碍体验的重要一环。

<MotionDiv whileFocus={{ scale: 1.03, boxShadow: "0 0 0 3px #4f8cff" }} transition={{ duration: 0.15 }} > <input placeholder="点击或 Tab 聚焦我" style="border:none;outline:none;background:transparent;" /> </MotionDiv>

当输入框聚焦时,外层容器自动放大并出现蓝色光环,用户注意力被自然引导,表单可用性大幅提升。

五、手势动画组合实战:一个高交互卡片

把三种手势组合起来,只需几行代码,就能做出交互感十足的卡片组件:

<MotionDiv whileHover={{ scale: 1.05, y: -4 }} whileTap={{ scale: 0.95 }} whileFocus={{ boxShadow: "0 0 0 3px #ff6b6b" }} transition={{ type: "spring", stiffness: 350, damping: 20 }} tabindex="0" > 高交互卡片:悬停浮起、按下回弹、聚焦描边 </MotionDiv>

注意:whileFocus需要元素可聚焦,给MotionDiv加上tabindex="0"即可。

六、进阶:手势事件回调 onHoverStart / onTap

除了样式动画,你还可以通过事件回调响应手势,实现"悬停时提示"、"点击后跳转"等业务逻辑:

<MotionDiv onHoverStart={() => console.log("悬停开始")} onHoverEnd={() => console.log("悬停结束")} onTap={() => console.log("完成一次点击")} onTapStart={() => console.log("按下")} onTapCancel={() => console.log("取消点击")} > 打开控制台试试 </MotionDiv>

七、源码解读:手势动画如何工作

好奇底层原理?svelte-motion 的手势系统非常清晰,值得一读:

  • 悬停逻辑:UseHoverGesture.svelte —— 监听pointerenter/pointerleave,并调用animationState.setActive切换动画状态
  • 按压逻辑:UseTapGesture.svelte —— 监听pointerdown,并在window上监听pointerup/pointercancel判定点击是否完成
  • 聚焦逻辑:UseFocusGesture.svelte —— 监听focus/blur事件
  • 特性注册:definitions.js —— 定义了hovertapfocus等特性的启用条件

结语

svelte-motion 让手势动画从"繁琐的监听事件"变成了"一行声明式属性"。从今天起,给你的按钮加上whileTap、给卡片加上whileHover、给表单加上whileFocus,用最小的成本让 UI 交互质感跃升。快去你的 Svelte 项目中实践吧!

如果想亲自运行源码示例,可以克隆仓库体验:

git clone https://gitcode.com/gh_mirrors/sv/svelte-motion

【免费下载链接】svelte-motionAn animation library for Svelte based on framer-motion.项目地址: https://gitcode.com/gh_mirrors/sv/svelte-motion

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/21 17:04:47

PyBroker算法交易实战:3步跑通第一个机器学习回测策略

PyBroker算法交易实战&#xff1a;3步跑通第一个机器学习回测策略 【免费下载链接】pybroker Algorithmic Trading in Python with Machine Learning 项目地址: https://gitcode.com/gh_mirrors/py/pybroker 当你熬夜写出一套交易规则&#xff0c;想在历史行情上验证它到…

作者头像 李华
网站建设 2026/8/21 17:02:25

32倍变速与彻底净化:HsMod 炉石插件把炉石传说体验直接拉满

32倍变速与彻底净化&#xff1a;HsMod 炉石插件把炉石传说体验直接拉满 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod 炉石插件是一款基于 BepInEx 的免费开源炉石传说模组&#xf…

作者头像 李华
网站建设 2026/8/21 16:59:54

划词翻译、截图 OCR、多引擎并行:pot-desktop 完整上手指南

划词翻译、截图 OCR、多引擎并行&#xff1a;pot-desktop 完整上手指南 【免费下载链接】pot-desktop &#x1f308;一个跨平台的划词翻译和OCR软件 | A cross-platform software for text translation and recognition. 项目地址: https://gitcode.com/GitHub_Trending/po/p…

作者头像 李华
网站建设 2026/8/21 16:58:04

错误处理的艺术:deno-postgres 三类异常的捕获与恢复完整指南

错误处理的艺术&#xff1a;deno-postgres 三类异常的捕获与恢复完整指南 【免费下载链接】postgres PostgreSQL driver for Deno 项目地址: https://gitcode.com/gh_mirrors/postgr/postgres deno-postgres 是专为 Deno 运行时打造的高性能 PostgreSQL 驱动&#xff0c…

作者头像 李华