目录
Svelte 存储的快速入门
Value {$clicks}
弹簧速成课程
首页 web前端 css教程 苗条和春季动画

苗条和春季动画

Mar 28, 2025 pm 12:20 PM

Svelte and Spring Animations

Spring 动画是让 UI 交互栩栩如生的绝佳方式。Spring 动画并非以恒定速率在一段时间内更改属性,而是使用弹簧物理学来移动事物,从而给人以真实物体移动的印象,并能为用户提供更自然的体验。

我之前写过关于 Spring 动画的文章。那篇文章基于 React,使用 react-spring 进行动画处理。本文将探讨在 Svelte 中类似的思想。

CSS 开发人员!在控制动画效果时,通常会想到缓动。您可以将“弹簧”动画视为基于现实世界物理学的缓动子类别。

Svelte 实际上在框架中内置了弹簧,无需任何外部库。我们将回顾之前关于 react-spring 的文章前半部分的内容。但之后,我们将深入探讨 Svelte 中弹簧的所有使用方法,并将实际的实现留到以后的文章中。虽然这可能看起来令人失望,但 Svelte 有一些 React 中没有的独特功能,可以有效地与这些动画基元集成。我们将花一些时间讨论它们。

还有一点需要注意:本文中穿插的一些演示可能看起来很奇怪,因为我将弹簧配置为“弹性”更大,以产生更明显的效果。如果您使用了任何演示的代码,请务必找到适合您的弹簧配置。

这是 Rich Harris 制作的一个很棒的 REPL,用于展示各种弹簧配置及其行为。

Svelte 存储的快速入门

在开始之前,让我们快速浏览一下 Svelte 存储。虽然 Svelte 的组件完全能够存储和更新状态,但 Svelte 也具有存储的概念,允许您在组件外部存储状态。由于 Svelte 的 Spring API 使用存储,因此我们将在此快速介绍其重要部分。

要创建存储的实例,我们可以导入 writable 类型,并像这样创建它:

import { writable } from "svelte/store";
const clicks = writable(0);
登录后复制

clicks 变量是一个值为 0 的存储。有两种方法可以设置存储的新值:set 和 update 方法。前者接收要设置为存储的值,而后者接收一个回调函数,接受当前值并返回新值。

function increment() {
  clicks.update(val => val   1);
}
function setTo5() {
  clicks.set(5);
}
登录后复制

如果您无法实际使用状态,那么状态就没有用。为此,存储提供了 subscribe 方法,允许您收到新值的通知——但在组件内使用它时,您可以在存储名称前加上 $ 字符,这告诉 Svelte 不仅要显示存储的当前值,还要在它更改时更新。例如:

<h1 id="Value-clicks">Value {$clicks}</h1>
Increment
Set to 5
登录后复制

这是一个完整的、可工作的代码示例。存储提供了许多其他功能,例如派生存储(允许您将存储链接在一起)、可读存储,甚至能够在首次观察存储和不再有观察者时收到通知。但是对于本文的目的,上面显示的代码是我们需要关注的全部内容。请参阅 Svelte 文档或交互式教程以了解更多信息。

弹簧速成课程

让我们快速介绍一下弹簧及其作用。我们将查看一个简单的 UI,它更改某些元素的呈现方面(不透明度和转换),然后查看动画更改。

这是一个最小的 Svelte 组件,它切换一个 <div> 的不透明度,并切换另一个 <code><div> 的 x 轴转换(没有任何动画)。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">&lt;div style=&quot;opacity: {shown ? 1 : 0}&quot;&gt;Content to toggle&lt;/div&gt; &lt;br&gt;Toggle &lt;hr&gt;&lt;div style=&quot;transform: translateX({moved}px)&quot;&gt;I'm a box.&lt;/div&gt; &lt;br&gt;Move it!</pre><div class="contentsignin">登录后复制</div></div> <p>这些更改会立即应用,因此让我们看看如何对其进行动画处理。这就是弹簧的用武之地。在 Svelte 中,弹簧是一个存储,我们可以在其上设置所需的值,但它不会立即更改,而是存储内部使用弹簧物理学逐渐更改值。然后,我们可以将我们的 UI 绑定到这个变化的值,以获得不错的动画效果。让我们看看它的实际效果。</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">import { spring } from &quot;svelte/motion&quot;; const fadeSpring = spring(1, { stiffness: 0.1, damping: 0.5 }); const transformSpring = spring(0, { stiffness: 0.2, damping: 0.1 }); const toggleFade = () =&gt; fadeSpring.update(val =&gt; (val ? 0 : 1)); const toggleTransform = () =&gt; transformSpring.update(val =&gt; (val ? 0 : 500)); const snapTransform = () =&gt; transformSpring.update(val =&gt; val, { hard: true }); &lt;div style=&quot;opacity: {$fadeSpring}&quot;&gt;Content to fade&lt;/div&gt; &lt;br&gt;Fade Toggle &lt;hr&gt;&lt;div style=&quot;transform: translateX({$transformSpring}px)&quot;&gt;I'm a box.&lt;/div&gt; &lt;br&gt;Move it! Snap into place</pre><div class="contentsignin">登录后复制</div></div> <p>我们从 Svelte 获取 spring 函数,并为不透明度和转换动画设置不同的 spring 实例。转换弹簧配置被故意设置为<em>非常有弹性</em>,以帮助稍后展示如何临时关闭弹簧动画并立即应用所需更改(这将在以后派上用场)。脚本块的末尾是用于设置所需属性的点击处理程序。然后,在 HTML 中,我们将变化的值直接绑定到我们的元素……就是这样!这就是 Svelte 中基本弹簧动画的全部内容。</p> <p>唯一剩下的项目是 snapTransform 函数,我们将其转换弹簧设置为其当前值,但还将一个对象作为第二个参数传递,其中 hard: true。这具有立即应用所需值而无需任何动画的效果。</p> <p>此演示以及我们将在本文中看到的其余基本示例都位于此处:[此处应插入演示链接]</p> <p>...(文章其余部分的伪原创,保持原文意思不变,并保持图片位置和格式)</p> </div>

以上是苗条和春季动画的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

VUE 3 VUE 3 Apr 02, 2025 pm 06:32 PM

它的出局!恭喜Vue团队完成了完成,我知道这是一项巨大的努力,而且很长时间。所有新文档也是如此。

您可以从浏览器获得有效的CSS属性值吗? 您可以从浏览器获得有效的CSS属性值吗? Apr 02, 2025 pm 06:17 PM

我有人写了这个非常合法的问题。 Lea只是在博客上介绍了如何从浏览器中获得有效的CSS属性。那样的是这样。

带有粘性定位的堆叠卡和一点点的杂物 带有粘性定位的堆叠卡和一点点的杂物 Apr 03, 2025 am 10:30 AM

前几天,我发现了科里·金尼文(Corey Ginnivan)网站上的这一点,当您滚动时,彼此之间的卡片堆放集。

在CI/CD上有点 在CI/CD上有点 Apr 02, 2025 pm 06:21 PM

我说的“网站”比“移动应用程序”更合适,但我喜欢Max Lynch的框架:

在WordPress块编辑器中使用Markdown和本地化 在WordPress块编辑器中使用Markdown和本地化 Apr 02, 2025 am 04:27 AM

如果我们需要直接在WordPress编辑器中向用户显示文档,那么最佳方法是什么?

比较浏览器的响应式设计 比较浏览器的响应式设计 Apr 02, 2025 pm 06:25 PM

这些桌面应用程序中有许多目标是同时在不同的维度上显示您的网站。因此,例如,您可以写作

为什么Flex布局中的紫色斜线区域会被误认为是'溢出空间”? 为什么Flex布局中的紫色斜线区域会被误认为是'溢出空间”? Apr 05, 2025 pm 05:51 PM

关于Flex布局中紫色斜线区域的疑问在使用Flex布局时,你可能会遇到一些令人困惑的现象,比如在开发者工具(d...

如何通过CSS选择第一个类名为item的子元素? 如何通过CSS选择第一个类名为item的子元素? Apr 05, 2025 pm 11:24 PM

在元素个数不固定的情况下如何通过CSS选择第一个指定类名的子元素在处理HTML结构时,常常会遇到元素个数不�...

See all articles