Dynamic Island 组件详解:iOS 灵动岛交互的 React 实现原理

发布时间:2026/8/18 13:57:06

Dynamic Island 组件详解:iOS 灵动岛交互的 React 实现原理
Dynamic Island 组件详解iOS 灵动岛交互的 React 实现原理【免费下载链接】smoothuiSmoothUI is a collection of beautifully designed components with smooth animations built with React, Tailwind CSS, Shadcn/ui and Motion项目地址: https://gitcode.com/gh_mirrors/sm/smoothuiDynamic Island 组件是 SmoothUI 组件库中最具代表性的动画组件之一它把 iOS 灵动岛Dynamic Island的交互体验完整复刻到了 React 网页应用中。SmoothUI 是一个基于 React、Tailwind CSS、Shadcn/ui 与 Motion 构建的开源动画组件库其中 Dynamic Island 组件能让页面顶部的胶囊状区域在来电、倒计时、通知、音乐播放等场景之间平滑伸缩、变形几乎与 iPhone 原生灵动岛如出一辙。本文将从源码层面拆解它的五种视图状态、Spring 弹性动画原理、受控用法以及无障碍设计帮助你快速掌握这个「灵动岛 React 组件」的完整实现思路。什么是 Dynamic Island 组件灵动岛是 iOS 上标志性的交互设计一块黑色胶囊区域会随着不同任务来电、Face ID、音乐、计时器自动扩大或缩小形成一种极具辨识度的「形态变化」体验。SmoothUI 的 Dynamic Island 组件把这个交互搬到了 Web 上无需任何原生能力仅靠 CSS 布局动画与弹性物理模拟即可实现。它默认内置了五种视图状态每种状态对应一种真实场景视图状态场景默认内容idle待机天气图标 悬停显示温度ring来电来电人姓名 绿色脉冲指示点timer计时器剩余秒数 进度条notification通知新消息提醒 未读角标music音乐播放歌曲信息 播放控制按钮灵动岛动画的底层原理Spring 弹性 布局动画想要实现「胶囊伸缩变形」的效果关键不在于手动计算宽度而在于让浏览器自己感知布局变化并补间过渡。Dynamic Island 组件正是利用 Motion 的layout属性做到的外层胶囊是一个motion.div当内部内容尺寸改变时Motion 会自动测量新旧布局并生成平滑的动画过渡。在 index.tsx 源码中核心结构如下外层容器motion.div开启layout属性负责整体尺寸的弹性伸缩内层内容motion.div以key{view}区分不同视图负责内容进出场时的模糊与缩放圆角保持不变通过style{{ borderRadius: 32 }}让胶囊在变宽时依然保持圆润。整个过渡使用type: springSpring 弹性动画这比普通的tween缓动更接近 iOS 原生手感——它模拟了物理弹簧的「回弹」效果看起来更有弹性、更「顺滑」。Spring 弹性参数BOUNCE_VARIANTS 的秘密要让弹簧动画在不同状态切换时表现各异SmoothUI 在源码中维护了一张「状态转移 → 回弹力度」映射表const BOUNCE_VARIANTS { idle: 0.5, idle-ring: 0.5, ring-idle: 0.5, timer-ring: 0.35, // ... } as const;bounce值越高动画回弹越明显。例如从「待机」切换到「来电」idle-ring时回弹较大模拟来电时胶囊被快速撑开的冲击感而计时器相关的切换timer-ring回弹更小显得更克制、更精致。这种「根据状态转移方向定制物理参数」的思路是让灵动岛动画拥有高级质感的关键细节值得你在自己的组件中借鉴。受控与非受控两种用法Dynamic Island 组件同时支持受控与非受控两种模式使用方式非常灵活非受控不传view组件内部通过useState自行管理当前视图受控传入view与onViewChange由父组件完全掌控状态。import DynamicIsland from repo/smoothui/components/dynamic-island; const App () ( DynamicIsland viewmusic onViewChange{(view) console.log(切换到:, view)} / );对应的 Props 定义位于DynamicIslandProps接口中包括className、idleContent、ringContent、timerContent、onViewChange与view。其中idleContent等插槽属性允许你传入自定义内容轻松替换默认的天气、来电、计时器界面实现真正的「任意场景」定制。无障碍设计尊重系统减少动态效果优秀的动画组件必须考虑无障碍体验。Dynamic Island 组件在 index.tsx 中通过 Motion 的useReducedMotion钩子读取用户的prefers-reduced-motion系统偏好当用户开启「减少动态效果」时弹簧布局动画与内容模糊/缩放进场动画会被禁用duration: 0底部切换按钮均带aria-label屏幕阅读器可以清晰读出「idle」「ring」「timer」等视图选项。这意味着组件在追求炫酷动画的同时也照顾到了对动画敏感的用户群体。如何在项目中安装使用Dynamic Island 组件位于 SmoothUI 的 monorepo 中你可以先克隆仓库再按需引入git clone https://gitcode.com/gh_mirrors/sm/smoothui引入方式也非常简单示例代码见 dynamic-island.tsx只需三行即可渲染出完整效果import DynamicIsland from repo/smoothui/components/dynamic-island; const Example () DynamicIsland /;组件默认依赖motion与lucide-react两个库完整的依赖清单与组件元数据分类、标签、动画类型、无障碍标记可在 package.json 中查看。官方文档位于 dynamic-island.mdx组件还会导出到组件总入口 index.ts 中统一管理。总结SmoothUI 的 Dynamic Island 组件用不到 300 行代码就完整复刻了 iOS 灵动岛的伸缩、变形与回弹体验。它的核心思路可以浓缩为三点用layout让布局变化自动补间、用 Spring 物理参数控制回弹质感、用useReducedMotion兼顾无障碍。无论你是想直接把它用到自己的 React 项目中还是想借鉴这套「形态变化动画」的实现思路这个组件都是绝佳的学习范本。打开源码试着修改BOUNCE_VARIANTS里的回弹系数你会立刻感受到弹簧动画的魅力。【免费下载链接】smoothuiSmoothUI is a collection of beautifully designed components with smooth animations built with React, Tailwind CSS, Shadcn/ui and Motion项目地址: https://gitcode.com/gh_mirrors/sm/smoothui创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

部门改名之后,历史数据不能跟着改口供

部门改名之后,历史数据不能跟着改口供

2026/8/18 13:57:06

摘要:部门改名看似只是组织名称调整,却会影响历史报表、责任追溯和成本解释。肯耐珂萨提醒企业,组织变更要保留历史口径。,让责任、口径和后续行动更容易被追溯。部门改名之后,管理层翻去年报表,发现所有历…

调休越攒越多,说明加班没有及时关账

调休越攒越多,说明加班没有及时关账

2026/8/18 13:57:06

摘要:调休余额长期累积,背后往往是加班确认、排班调整和用工成本没有及时收口。肯耐珂萨提醒 HR,要把调休当成工时账来管。,让责任、口径和后续行动更容易被追溯。员工问:“我还有这么多调休,到底什么时候能…

flatend核心概念详解:一文搞懂Node、Service、Provider与Stream

flatend核心概念详解:一文搞懂Node、Service、Provider与Stream

2026/8/18 13:47:06

flatend核心概念详解:一文搞懂Node、Service、Provider与Stream 【免费下载链接】flatend Quickly build microservices using p2p networking in NodeJS/Go. 项目地址: https://gitcode.com/gh_mirrors/fl/flatend flatend 是一个基于 p2p 网络(…

聚合音源实战手册:一个配置打通五大平台无损曲库,告别来回切换

聚合音源实战手册:一个配置打通五大平台无损曲库,告别来回切换

2026/8/18 16:07:11

聚合音源实战手册:一个配置打通五大平台无损曲库,告别来回切换 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 晚上十点,你想听一首十年前的老歌。网易云有版权…

Andy.scss 进阶指南:如何基于现有代码扩展属于自己的 SASS Mixins

Andy.scss 进阶指南:如何基于现有代码扩展属于自己的 SASS Mixins

2026/8/18 16:07:11

Andy.scss 进阶指南:如何基于现有代码扩展属于自己的 SASS Mixins 【免费下载链接】andy Open-Source Collection of Useful SASS Mixins Library 项目地址: https://gitcode.com/gh_mirrors/an/andy Andy.scss 是一个开源、轻量、零依赖的 SASS Mixins 库&a…

GANFit的开源生态指南:3D人脸重建与TBGAN纹理形状模型许可证申请与探索

GANFit的开源生态指南:3D人脸重建与TBGAN纹理形状模型许可证申请与探索

2026/8/18 16:07:11

GANFit的开源生态指南:3D人脸重建与TBGAN纹理形状模型许可证申请与探索 【免费下载链接】GANFit Project Page of GANFIT: Generative Adversarial Network Fitting for High Fidelity 3D Face Reconstruction [CVPR2019] 项目地址: https://gitcode.com/gh_mirro…

reinstall一键重装脚本终极指南:把重装命令交给别名,手残星人也能三秒上车

reinstall一键重装脚本终极指南:把重装命令交给别名,手残星人也能三秒上车

2026/8/18 16:07:11

reinstall一键重装脚本终极指南:把重装命令交给别名,手残星人也能三秒上车 【免费下载链接】reinstall 一键DD/重装脚本 (One-click reinstall OS on VPS) 项目地址: https://gitcode.com/GitHub_Trending/re/reinstall 凌晨两点,监控…

3分钟免费获取苹方字体:Windows安装与网页字体美化完整指南

3分钟免费获取苹方字体:Windows安装与网页字体美化完整指南

2026/8/18 16:07:11

3分钟免费获取苹方字体:Windows安装与网页字体美化完整指南 【免费下载链接】PingFangSC PingFangSC字体包文件、苹果平方字体文件,包含ttf和woff2格式 项目地址: https://gitcode.com/gh_mirrors/pi/PingFangSC 如果你正为 Windows 系统里的字体…

用 MemorySharp 打造自动化测试工具:模拟键盘鼠标实现 UI 回归测试

用 MemorySharp 打造自动化测试工具:模拟键盘鼠标实现 UI 回归测试

2026/8/18 15:57:11

用 MemorySharp 打造自动化测试工具:模拟键盘鼠标实现 UI 回归测试 【免费下载链接】MemorySharp A C# based memory editing library targeting Windows applications, offering various functions to extract and inject data and codes into remote processes to…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/17 1:28:42

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/18 1:03:22

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/17 8:40:51

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

多智能体大模型辩论中的立场收敛:从伪共识到理性说服的评估方法

多智能体大模型辩论中的立场收敛:从伪共识到理性说服的评估方法

2026/8/18 0:06:29

1. 从一场“假辩论”说起:为什么大模型辩论会走向“伪共识”?最近在折腾多智能体大语言模型(Multi-Agent LLM)的辩论实验,发现一个挺有意思的现象。我让几个基于GPT-4的智能体就一个争议性话题(比如“远程办…

Frida动态代码插桩框架:从原理到实战的移动安全与逆向工程指南

Frida动态代码插桩框架:从原理到实战的移动安全与逆向工程指南

2026/8/18 0:06:29

1. 从“黑盒”到“白盒”:为什么我们需要Frida在移动安全、逆向工程甚至是一些自动化测试的场景里,我们经常会遇到一个让人头疼的问题:面对一个编译好的、没有源代码的应用程序,我们如何知道它在运行时内部发生了什么?…

ECharts饼图中心文字配置指南:从label与title区别到动态交互实现

ECharts饼图中心文字配置指南:从label与title区别到动态交互实现

2026/8/18 0:06:29

1. 从“空心”到“有魂”:为什么要在饼图中间加文字?如果你用过ECharts画饼图,大概率会注意到一个现象:默认生成的饼图中间是空心的。这个设计本身没问题,它清晰地展示了各个扇区的占比关系。但在很多实际的业务场景里…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/17 12:00:53

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/15 10:10:27

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/18 12:20:24

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…