Lottie
Lottie 是一个流行的开源库,用于在移动设备、Web 和其他平台上渲染高质量的动画。这些动画由 Adobe After Effects 制作并导出为 JSON 格式,然后利用 Lottie 轻松地嵌入到任何应用或网站中。Lottie 是由 Airbnb 设计团队开发的,它使设计师和开发者能够在不牺牲性能和质量的情况下,使用简单的动画文件在多个平台上实现复杂的动画效果。
查看更多相关内容
如何用Lottie动画替换SwipeFreshLayout加载动画
在使用Lottie动画替换SwipeRefreshLayout的加载动画过程中,主要步骤可以分为以下几个部分:
### 1. 添加依赖
首先,确保在项目的`build.gradle`文件中添加了Lottie的依赖:
```gradle
dependencies {
implementation 'com.airbnb.android:lottie:3.4.0'
}
```
### 2. 移除原有的SwipeRefreshLayout
在布局文件中,删除或隐藏现有的SwipeRefreshLayout,因为我们将使用LottieAnimationView来创建自定义的下拉刷新动画。
### 3. 添加LottieAnimationView
在相同的布局文件中,添加一个LottieAnimationView,用于显示动画:
```xml
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottieAnimationView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:lottie_rawRes="@raw/loading_animation" // 这里替换成你的动画文件
app:lottie_autoPlay="false"
app:lottie_loop="true"
android:visibility="gone" />
```
### 4. 控制动画显示
接下来,在你的Activity或Fragment中,你需要控制这个LottieAnimationView的显示,以及动画的播放和停止:
```java
LottieAnimationView lottieAnimationView = findViewById(R.id.lottieAnimationView);
// 显示和隐藏动画
public void showLoadingAnimation() {
lottieAnimationView.setVisibility(View.VISIBLE);
lottieAnimationView.playAnimation();
}
public void hideLoadingAnimation() {
lottieAnimationView.cancelAnimation();
lottieAnimationView.setVisibility(View.GONE);
}
```
### 5. 监听滑动事件
你需要自己实现滑动监听,当用户下拉时触发动画。这可以通过在父布局中添加如OnTouchListener来实现。
```java
yourParentLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 记录初次按下的位置
break;
case MotionEvent.ACTION_MOVE:
// 计算滑动距离,根据距离显示动画
if (isPullDown(event)) {
lottieAnimationView.setProgress(calculateProgress(event));
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
// 手指放开后处理事件,如开始网络请求
if (shouldRefresh(event)) {
showLoadingAnimation();
fetchData(); // fetchData() 是你的数据加载方法
} else {
resetAnimation();
}
break;
}
return true;
}
});
```
### 6. 进行网络请求并在完成后停止动画
网络请求完成后,调用`hideLoadingAnimation()`停止并隐藏动画。
```java
public void fetchData() {
// 执行网络请求...
// 请求完成后
hideLoadingAnimation();
}
```
### 总结
通过上面的步骤,你可以用Lottie动画库替换传统的SwipeRefreshLayout加载动画,实现更丰富和流畅的用户体验。这种方法不仅可以使加载动画更加美观,还可以提供更多自定义的可能性,使得应用界面与众不同。
阅读 3 · 8月23日 23:20
如何将动画从Figma导出为Lottie格式?
在Figma中设计动画并导出为Lottie格式是一个非常实用的技能,尤其在需要在移动设备和网页上实现平滑动画时。要实现这一过程,需要几个步骤和一些特定的工具。下面我将详细解释整个过程:
### 步骤1:设计动画
首先,在Figma中完成动画设计。这包括创建所有必要的图层和动画帧。确保每个动画元素都位于独立的图层上,这对后续的动画处理非常关键。
### 步骤2:使用插件
Figma本身并不直接支持导出为Lottie格式。因此,我们需要利用插件来实现这一功能。市场上有几个不错的插件可以做到这一点,例如**Figmotion**和**Motion**。为了本次演示,我们以Figmotion为例:
1. 在Figma中,点击右上角的 'Plugins' 菜单。
2. 选择 'Manage plugins',然后在弹出的插件市场中搜索并安装 'Figmotion'。
3. 安装完成后,选择你想要动画化的元素或帧,然后再次点击 'Plugins' 菜单,并选择 'Figmotion'。
### 步骤3:创建和调整动画
使用Figmotion,你可以为选定的图层创建关键帧动画。插件界面允许你添加和调整关键帧,改变属性如位置、缩放、透明度等:
1. 在Figmotion插件界面中,设置动画的开始和结束状态。
2. 添加所需的动画效果和时间线。
3. 你可以预览动画,确保一切按预期进行。
### 步骤4:导出为Lottie
完成动画设置后:
1. 在Figmotion插件中,找到导出选项。
2. 选择导出为Lottie格式。
3. 存储导出的JSON文件。
### 步骤5:在应用中使用Lottie
现在你就可以在Web或移动应用中使用这个Lottie动画了。如果是Web项目,你可以使用Lottie Web库来加载和播放动画。如果是移动应用,可以使用Lottie库对应的iOS或Android版本。
### 经验分享
在我之前的项目中,我们设计了一系列复杂的加载动画和状态转换动画。通过Figmotion,我们能够快速地将这些设计转换为Lottie格式,并在我们的React应用中无缝集成。这不仅提升了应用的用户体验,还优化了性能,因为Lottie动画比传统GIF或视频文件更轻量。
这就是从Figma导出为Lottie动画的整个流程。希望这能帮助你在未来的项目中实现更流畅和引人注目的用户界面动画。
阅读 3 · 8月23日 23:19
如何在android中设置Lottie动画的开始和结束帧?
在Android中使用Lottie动画库进行动画处理时,可以通过代码控制动画的开始和结束帧,以实现更精细的动画控制。以下是如何操作的步骤和例子:
### 步骤 1: 添加Lottie依赖
首先,确保你的Android项目中已经添加了Lottie的依赖。在你的`build.gradle`文件中添加如下依赖:
```groovy
dependencies {
implementation 'com.airbnb.android:lottie:3.4.0'
}
```
### 步骤 2: 在布局文件中添加LottieAnimationView
在你的布局XML文件中加入`LottieAnimationView`控件:
```xml
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottieAnimationView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:lottie_fileName="animation.json" />
```
### 步骤 3: 设置动画的开始和结束帧
在你的Activity或Fragment中,你可以通过编程方式设置动画的开始和结束帧。以下是如何设置的示例代码:
```java
import com.airbnb.lottie.LottieAnimationView;
public class MyActivity extends AppCompatActivity {
private LottieAnimationView lottieAnimationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
lottieAnimationView = findViewById(R.id.lottieAnimationView);
// 设置动画的开始帧和结束帧
lottieAnimationView.setMinAndMaxFrame(50, 150);
// 开始播放动画
lottieAnimationView.playAnimation();
}
}
```
在这个例子中,`setMinAndMaxFrame(50, 150)`方法设置了动画从第50帧开始播放至第150帧结束。这允许你精确地控制动画的哪一部分被展示。
### 结论
通过上述步骤,你可以在Android项目中灵活地控制Lottie动画的播放区间。这在需要播放动画的特定部分时特别有用,例如在用户完成某个操作时展示特定的动画效果。
阅读 5 · 8月23日 23:18
React Native如何制作一个根据Lottie动画进度更新的滑块
在React Native中,创建一个根据Lottie动画进度更新的滑块,主要涉及到两个组件:`LottieView` 和 `Slider`。我们将使用 `react-native-lottie`来处理Lottie动画,使用 `react-native`自带的 `Slider`组件来创建滑块。
#### 步骤1:安装必要的包
首先,确保已经安装了 `lottie-react-native`和相关依赖:
```bash
npm install lottie-react-native
# 或者
yarn add lottie-react-native
```
#### 步骤2:导入所需组件
在你的React Native组件文件中,导入所需的组件:
```javascript
import React, { useState } from 'react';
import { View, Slider } from 'react-native';
import LottieView from 'lottie-react-native';
```
#### 步骤3:设置Lottie动画和滑块组件
接下来,设置Lottie动画和滑块组件,并绑定它们的状态:
```javascript
const LottieSlider = () => {
const [progress, setProgress] = useState(0);
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<LottieView
source={require('../path/to/animation.json')} // 动画文件路径
progress={progress} // Lottie动画的进度与滑块绑定
style={{ width: 200, height: 200 }}
loop={false}
/>
<Slider
style={{ width: 200, height: 40 }}
minimumValue={0}
maximumValue={1}
value={progress}
onValueChange={setProgress} // 当滑块改变时,更新Lottie动画的进度
/>
</View>
);
};
```
#### 步骤4:在App中使用组件
最后,在你的App中使用 `LottieSlider`组件:
```javascript
export default function App() {
return (
<View style={{ flex: 1 }}>
<LottieSlider />
</View>
);
}
```
#### 示例说明:
在这个例子中,我们创建了一个名为 `LottieSlider`的组件。这个组件包含一个 `LottieView`用于显示Lottie动画,和一个 `Slider`组件用于控制动画的进度。当用户移动滑块时,滑块的 `onValueChange`事件会触发,更新动画的 `progress`属性,从而实现动画的进度随滑块移动而改变。
这种实现方式不仅可使用户通过滑块直观地控制动画,也能在UI中提供更多的交互性,增强用户体验。
阅读 4 · 8月23日 23:17
如何将“Smart Animate”从Figma导出到React/LottieFiles?
### 使用Figma Smart Animate
首先,为了利用Figma的Smart Animate,我们需要在Figma里创建或者编辑动画。Smart Animate 是 Figma 的一个功能,它可以智能地在不同的帧之间过渡,创建平滑的动画效果。我们首先确保在设计中应用了此功能,并有效地创建了希望在Web应用中展示的动画。
### 导出到SVG
接下来的步骤是将设计导出为SVG。虽然Figma本身不支持直接导出到Lottie JSON文件,但我们可以首先将设计导出为SVG,这是一种向量图形格式,可以保持设计的质量和可缩放性。
### 转换SVG到Lottie JSON
接下来,需要将SVG文件转换为Lottie可以使用的JSON格式。这里有几种方法可以实现:
1. **使用在线转换工具**:有一些在线工具可以将SVG转换成Lottie JSON,如 `svg-to-lottie` 等。
2. **手动编码**:如果转换工具不能满足需求,或者需要更精细的控制动画,我们也可以手动创建JSON文件,根据Lottie的规格来定义动画的参数。
### 集成到React
将SVG转换成Lottie JSON之后,下一步是将这个JSON文件集成到React项目中。这可以通过以下步骤完成:
1. **安装Lottie库**:首先,我们需要在React项目中安装Lottie的React库,通常是通过npm或yarn来安装 `react-lottie`。
```bash
npm install --save lottie-web react-lottie
```
2. **添加Lottie组件**:在React组件中,我们引入Lottie组件,并将之前转换好的JSON文件作为动画数据传给这个组件。
```javascript
import React from 'react';
import Lottie from 'react-lottie';
import animationData from './path/to/your-animation.json';
const MyComponent = () => {
const defaultOptions = {
loop: true,
autoplay: true,
animationData: animationData,
rendererSettings: {
preserveAspectRatio: 'xMidYMid slice'
}
};
return <div>
<Lottie options={defaultOptions}/>
</div>
};
export default MyComponent;
```
### 测试与调整
一旦将动画添加到React应用中,最后一步是进行广泛的测试,确保动画在不同设备和浏览器上都表现良好,并进行必要的调整。
### 总结
通过上述步骤,我们可以将Figma中使用Smart Animate创建的动画转换为React中的动画,通过Lottie来增强用户体验。这个过程涉及设计导出、格式转换以及在目标平台上的集成。
阅读 3 · 8月23日 23:16
如何让Lottie动画在真实设备上运行?
Lottie 是一个流行的库,用于解析 Adobe After Effects 动画,并在移动设备和网页上以小巧的文件格式呈现它们。开发者通过这种方式可以轻松集成复杂的动画,而不会影响应用的性能。
### 在iOS、Android和Web上实现 Lottie 动画
#### 1. iOS (使用 Swift)
**步骤**:
1. **安装**: 通过CocoaPods添加 Lottie 库到你的项目中。
```swift
pod 'lottie-ios'
```
2. **引入**: 在需要使用 Lottie 动画的文件中导入 Lottie 框架。
```swift
import Lottie
```
3. **使用**: 创建一个 `AnimationView` 实例,并加载动画文件。
```swift
let animationView = AnimationView(name: "animation_name")
animationView.frame = CGRect(x: 0, y: 0, width: 400, height: 400)
animationView.contentMode = .scaleAspectFill
view.addSubview(animationView)
animationView.play()
```
**示例**: 在一个登录页面上使用 Lottie 动画来增强用户体验,展示一个动态的登录图标。
#### 2. Android (使用 Kotlin)
**步骤**:
1. **添加依赖**: 在 app 的 `build.gradle` 文件中添加 Lottie 库。
```gradle
implementation 'com.airbnb.android:lottie:3.4.0'
```
2. **使用**: 在 XML 中添加一个 `LottieAnimationView`。
```xml
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/animation_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
app:lottie_fileName="animation.json"
app:lottie_loop="true"
app:lottie_autoPlay="true" />
```
3. **控制动画**: 如果需要在代码中控制动画,可以这样做:
```kotlin
val animationView: LottieAnimationView = findViewById(R.id.animation_view)
animationView.playAnimation()
```
**示例**: 在 App 加载时,展示一个优雅的加载动画,提升用户等待体验。
#### 3. Web (使用 JavaScript)
**步骤**:
1. **引入 Lottie**: 在 HTML 中通过 CDN 引入 Lottie。
```html
<script src="https://cdnjs.cloudflare.com/ajax/libs/lottie-web/5.7.4/lottie.min.js"></script>
```
2. **加载动画**: 使用 Lottie 的 API 加载动画。
```javascript
var animation = lottie.loadAnimation({
container: document.getElementById('lottie'), // 动画容器
renderer: 'svg',
loop: true,
autoplay: true,
path: 'path/to/animation.json' // 动画文件的路径
});
```
**示例**: 在网站的主页上使用一个动态的欢迎动画,吸引用户的注意。
### 总结
通过上面的步骤,你可以在多个平台上实现 Lottie 动画,增强应用的用户界面和用户体验。每个平台都有其特定的集成方式,但整体来看,Lottie 提供了一个简单而强大的解决方案,用于在真实设备上运行流畅的动画。
阅读 4 · 8月23日 23:16
在lottie json中动态更改颜色
在Lottie中动态更改颜色主要有两种方式:使用Lottie提供的API来更改特定层的颜色属性,或者在Lottie动画加载前直接修改JSON文件中的颜色值。
#### 方法一:使用API更改颜色
Lottie的库(不论是Android、iOS还是Web版本)通常提供API来更改动画中的属性,比如颜色。以Android为例,我们可以使用 `LottieDrawable`和 `KeyPath`来指定我们想要更改的层,然后通过 `LottieValueCallback`来设定新的颜色值。
**示例代码:**
```java
LottieAnimationView animationView = findViewById(R.id.animation_view);
animationView.setAnimation("animation.json");
animationView.playAnimation();
// 创建一个KeyPath来指向我们想要更改颜色的层
KeyPath keyPath = new KeyPath("LayerName", "ShapeLayer", "Fill");
// 设置一个新的颜色值
LottieValueCallback<ColorFilter> colorFilterCallback = new LottieValueCallback<>(new SimpleColorFilter(Color.RED));
// 应用这个颜色更改
animationView.addValueCallback(keyPath, LottieProperty.COLOR_FILTER, colorFilterCallback);
```
在这个例子中,我们首先定位到动画中名为 `LayerName` 的层和其子层 `ShapeLayer` 的填充部分。然后,我们使用 `LottieValueCallback` 来将这一层的颜色更改为红色。
#### 方法二:修改JSON文件
在某些情况下,我们可能需要在加载动画之前就修改颜色。这种情况下,我们可以直接编辑Lottie的JSON文件。
Lottie动画的色彩定义通常存在于JSON中的 `layers`字段里,每个图层或者形状都可能包含有关填充(`"fill"`)和描边(`"st"`)的信息。在这些部分,颜色通常以RGBA的形式定义。
**示例:**
在JSON文件中,找到以下部分:
```json
{
"ty": "fl",
"c": {"a": 0, "k": [1, 0, 0, 1]}, // RGBA Red
"o": {"a": 0, "k": 100} // 100% opacity
}
```
你可以将 `"k"`的值从 `[1, 0, 0, 1]`(红色)改为 `[0, 0, 1, 1]`(蓝色)。
### 总结
这两种方法各有利弊。使用API更改颜色提供了更大的灵活性和动态性,适合在应用运行时根据用户操作来调整颜色。而直接修改JSON文件则适合于在运行前确定颜色的场景,可以减少运行时的计算。选择哪种方法取决于具体的应用场景和需求。
阅读 6 · 8月23日 23:16
加载Lottie动画时如何淡入淡出?
在开发过程中,实现Lottie动画的淡入淡出效果可以通过多种方式来达到。以下是一种常见且实用的方法,使用Android平台为例,介绍如何在加载Lottie动画时添加淡入和淡出效果:
### 1. 引入Lottie库
首先,确保你的项目中已经引入了Lottie的依赖。在`build.gradle`文件中加入:
```gradle
dependencies {
implementation 'com.airbnb.android:lottie:3.x.x'
}
```
### 2. 在布局文件中添加Lottie动画控件
在你的XML布局文件中加入`LottieAnimationView`控件:
```xml
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/animation_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:lottie_autoPlay="false"
app:lottie_loop="true"
app:lottie_fileName="animation.json" />
```
### 3. 使用渐变动画
在你的Activity或Fragment中,你可以使用Android的`AlphaAnimation`来实现淡入淡出效果。以下是一个示例:
```java
public void fadeInLottieAnimation() {
LottieAnimationView animationView = findViewById(R.id.animation_view);
AlphaAnimation fadeIn = new AlphaAnimation(0.0f, 1.0f);
fadeIn.setDuration(1000); // 设置动画持续时间为1000毫秒(1秒)
fadeIn.setFillAfter(true); // 动画结束后保持状态
fadeIn.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
animationView.setVisibility(View.VISIBLE);
animationView.playAnimation();
}
@Override
public void onAnimationEnd(Animation animation) {
// 动画结束时可执行的操作
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
animationView.startAnimation(fadeIn);
}
public void fadeOutLottieAnimation() {
LottieAnimationView animationView = findViewById(R.id.animation_view);
AlphaAnimation fadeOut = new AlphaAnimation(1.0f, 0.0f);
fadeOut.setDuration(1000);
fadeOut.setFillAfter(true);
fadeOut.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
animationView.setVisibility(View.GONE);
animationView.cancelAnimation();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
animationView.startAnimation(fadeOut);
}
```
在这个例子中,我们创建了两个方法:`fadeInLottieAnimation`用于动画的淡入效果,而`fadeOutLottieAnimation`用于动画的淡出效果。我们使用了`AlphaAnimation`,它是Android SDK中的一个简单易用的类,用于创建透明度变化的动画。
### 4. 调用方法
你可以根据实际的业务逻辑在合适的时机调用这些方法,比如在Activity的`onCreate`方法中调用`fadeInLottieAnimation`来在视图创建时开始动画的淡入效果。
通过这种方式,你可以轻松地为Lottie动画添加聚焦和引人注意的视觉效果,提升用户体验。
阅读 5 · 8月23日 23:15
如何实时修改Lottie对象而不会导致Safari上的图像弹出?
在处理Lottie动画时,确保动画在不同浏览器中的兼容性和性能优化是非常关键的。特别是在Safari浏览器上,我们经常会遇到图像弹出或闪烁的问题。为了实时修改Lottie对象而不在Safari上引起图像弹出,我们可以采取以下几个步骤:
1. **优化Lottie文件**:确保你的Lottie动画文件尽可能优化。过大的文件或过于复杂的动画可能导致性能问题,特别是在资源限制较大的设备或浏览器上。使用Lottie的编辑工具,如Lottie Editor,删除不必要的层和资产,减少动画的复杂性。
2. **使用CSS图层技术**:如果动画在Safari上出现图像弹出,可以尝试将Lottie动画放在一个单独的CSS图层上。这可以通过将动画的容器设置为`will-change: transform`来实现。这个属性会告诉浏览器该元素可能会有变化,浏览器因此可以优化元素的渲染性能。
```css
.lottie-container {
will-change: transform;
}
```
3. **逐步加载和修改动画**:在动画数据较大或复杂时,逐步加载动画数据而不是一次性加载全部数据。这可以通过动态加载JSON数据或分段加载动画的各个部分来实现。当需要修改Lottie对象时,同样可以分批次进行修改,避免一次性大量更新导致的性能问题。
4. **使用最新版本的Lottie库**:确保使用的是Lottie的最新版本,因为新版本通常会包含性能改进和bug修复。更新到最新版本可以帮助提升兼容性和性能。
5. **预测试和调试**:在将动画部署到生产环境前,充分在Safari上测试动画的表现。使用开发者工具来监控动画的性能,并寻找可能的优化点。如果遇到问题,可以通过调整动画的时间线、速度或复杂性来尝试解决。
通过以上步骤,我们可以有效地减少在Safari上修改Lottie动画时出现的图像弹出问题。在我的一个项目中,通过优化Lottie动画文件和使用CSS图层技术,成功解决了在Safari浏览器上动画闪烁的问题,从而提升了用户体验和动画的流畅性。希望这些方法也能帮助到你的项目。
阅读 4 · 8月23日 23:15
Lottie Events和Lottie EventListener有什么区别以及如何使用?
### Lottie Events vs. Lottie EventListener
**Lottie Events** 指的是在Lottie动画中发生的特定事件点,比如动画开始、动画结束、特定帧达到等。开发者可以在这些事件发生时触发一些操作或函数。
**Lottie EventListener** 是一个接口或工具,用于监听这些Lottie Events。当这些事件被触发时,EventListener 会捕捉到这些事件,并执行绑定的回调函数。
### 使用示例
假设我们有一个Lottie动画,我们想在动画开始和结束时打印消息,同时在动画达到50%的时候执行特定的逻辑。
**1. 引入Lottie库**
首先,确保你的项目中已经引入了Lottie的库。
```html
<script src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/5.7.3/lottie.min.js"></script>
```
**2. 加载动画**
在你的HTML中添加一个容器来承载动画。
```html
<div id="lottie-animation"></div>
```
使用JavaScript加载动画。
```javascript
var animation = lottie.loadAnimation({
container: document.getElementById('lottie-animation'), // 动画容器
renderer: 'svg',
loop: false,
autoplay: true,
path: 'path/to/your/animation.json' // 动画文件路径
});
```
**3. 添加EventListener**
使用`addEventListener`监听动画的特定事件。
```javascript
// 动画开始事件
animation.addEventListener('DOMLoaded', function() {
console.log('动画开始!');
});
// 动画结束事件
animation.addEventListener('complete', function() {
console.log('动画结束!');
});
// 监听动画达到第50帧
animation.addEventListener('enterFrame', function(e) {
if (e.currentTime >= (animation.totalFrames / 2)) {
console.log('动画已到达50%!');
// 为了只执行一次,可以在这里移除监听器
animation.removeEventListener('enterFrame');
}
});
```
### 结论
通过使用Lottie Events和Lottie EventListener,开发者可以控制动画的交互式行为,例如在动画的关键时刻进行特定操作,提高用户体验。这种方法在网页和应用程序中具有广泛的应用,如页面加载动画、进度条、动态提示等。
阅读 3 · 8月23日 23:15