【愚公系列】《微信小程序与云开发从入门到实践》035

【愚公系列】《微信小程序与云开发从入门到实践》035

标题

详情

作者简介

愚公搬代码

头衔

华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。

近期荣誉

2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。

博客内容

.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。

欢迎

👍点赞、✍评论、⭐收藏

🚀前言随着移动互联网的快速发展,小程序以其轻便、便捷的特性,受到了越来越多用户的青睐。而在用户体验日益重要的今天,动画作为增强交互效果和视觉吸引力的重要手段,正逐渐成为小程序开发中的关键元素。

动画不仅能够让小程序的界面更加生动有趣,还可以有效引导用户的注意力,提升整体使用体验。无论是页面切换时的流畅过渡,还是按钮点击时的细腻反馈,巧妙运用动画都能为用户留下一种愉悦的感觉。

🚀一、在小程序中使用动画🔎1.使用 WXSS 实现动画效果在微信小程序中,组件的样式可能会随着时间变化而动态调整,例如尺寸、形状、背景色或旋转角度等。当样式发生变化时,直接替换 WXSS 样式表,变化会立即生效,但这可能导致用户体验变得突兀。为了改善这种体验,可以使用渐变动画效果,使样式的变化过程更平滑。

🦋1.1 使用 transition 实现渐变动画通过使用 transition,可以让样式的变化过程变得平滑,产生渐变效果。下面是一个简单的例子。

☀️1.1.1 示例:使用 transition 实现渐变动画HTML 代码(animationDemo.wxml):

代码语言:html复制

WXSS 代码(animationDemo.wxss):

代码语言:css复制/* pages/animationDemo/animationDemo.wxss */

.box {

border-style: solid;

border-width: 1px;

display: block;

width: 100px;

height: 100px;

background-color: #0000FF;

transition: width 2s, height 2s, background-color 2s, transform 2s;

}

.box:hover {

background-color: #ffcccc;

width: 200px;

height: 200px;

transform: rotate(180deg);

}解释:

transition 属性用于定义渐变动画。此处设置了四个样式变化的渐变效果:width 2s:宽度变化用时2秒height 2s:高度变化用时2秒background-color 2s:背景色变化用时2秒transform 2s:旋转效果用时2秒:hover 伪类:当用户悬停在组件上时,会触发样式变化。此时,色块的宽高、背景色和旋转效果都会进行渐变。效果:

当用户悬停在色块上时,会看到色块逐渐变大、颜色渐变,并且旋转180度。🦋1.2 使用 @keyframes 定义关键帧动画使用 @keyframes 可以创建更复杂的动画效果,支持多个动画阶段,不同于 transition 只定义开始与结束的状态。

☀️1.2.1 示例:使用 @keyframes 实现关键帧动画WXSS 代码(animationDemo.wxss):

代码语言:css复制/* pages/animationDemo/animationDemo.wxss */

@keyframes move {

from {

margin-top: 0px;

margin-left: 0px;

width: 100px;

}

50% {

margin-top: 0px;

margin-left: 200px;

width: 50px;

}

75% {

margin-top: 200px;

margin-left: 200px;

width: 50px;

}

to {

margin-left: 0px;

width: 100px;

}

}

.box {

border-style: solid;

border-width: 1px;

display: block;

width: 100px;

height: 100px;

background-color: #0000FF;

animation-duration: 3s;

animation-name: move;

animation-iteration-count: infinite;

}解释:

@keyframes move 定义了一个名为 move 的关键帧动画:from:动画开始时的样式。50%:动画进行到一半时的样式。75%:动画进行到四分之三时的样式。to:动画结束时的样式。animation-duration: 3s:动画持续时间为3秒。animation-name: move:指定使用的关键帧动画名称。animation-iteration-count: infinite:动画将无限循环播放。效果:

页面上的色块将按照设置的关键帧路径进行循环动画。🦋1.3 动画控制属性在 WXSS 中,可以使用以下属性来控制动画的行为:

属性名

描述

animation-name

设置要使用的关键帧动画名称

animation-delay

设置动画延迟多久开始播放

animation-direction

设置动画播放方向,取值:normal(正向播放),alternate(正反循环),reverse(逆向播放),alternate-reverse(逆向首次播放,之后交替播放)

animation-iteration-count

设置动画播放次数,infinite 表示无限循环

animation-play-state

设置动画播放状态,取值:running(播放中),paused(暂停)

animation-timing-function

设置动画的时序函数(例如:ease-in、linear 等)

animation-fill-mode

设置动画结束后的状态,取值:forwards(保持结束状态),backwards(保持开始状态),both(两者都应用)

🦋1.4 事件监听动画过程你可以为动画添加事件监听器,以便在动画的不同阶段执行相应的操作。下面是一些常用的动画事件:

bindtransitionend:当 transition 动画结束时触发。bindanimationstart:当关键帧动画开始时触发。bindanimationiteration:当关键帧动画的某一循环结束时触发。bindanimationend:当关键帧动画结束时触发。☀️1.4.2 示例:绑定动画事件HTML 代码(animationDemo.wxml):

代码语言:html复制

bindanimationstart="animationstart"

bindanimationiteration="animationiteration"

bindanimationend="animationend">JavaScript 代码(animationDemo.js):

代码语言:javascript代码运行次数:0运行复制// pages/animationDemo/animationDemo.js

Page({

transitionend: function () {

console.log("transition 渐变动画执行结束");

},

animationstart: function () {

console.log("关键帧动画开始");

},

animationiteration: function () {

console.log("关键帧阶段完成");

},

animationend: function () {

console.log("关键帧动画结束");

}

});效果:

在动画的不同阶段,控制台会输出相应的日志,帮助你调试和控制动画过程。🔎2.使用小程序框架接口创建动画效果在微信小程序中,除了通过 WXSS 来定义样式和动画外,还可以利用小程序提供的动画 API 来创建动态效果。使用这些 API,可以更加灵活地控制动画,并且可以不依赖于 WXSS 文件来实现关键帧动画。

🦋2.1 使用 animate 方法创建动画通过小程序的 animate 方法,可以在页面元素上应用动画效果。这个方法接受四个参数:

元素选择器:选择需要执行动画的元素。动画关键帧列表:定义动画的关键帧,即动画过程中各个时间点的样式。动画时长:设置动画执行的时间(以毫秒为单位)。回调函数:动画结束后执行的回调函数,可以在其中处理动画结束后的清理工作。☀️2.1.1 示例:点击事件触发动画JavaScript 代码(animationDemo.js):

代码语言:javascript代码运行次数:0运行复制// pages/animationDemo/animationDemo.js

Page({

tapEvent: function() {

this.animate(".box", [

{ width: '100px', height: '100px', backgroundColor: '#0000FF' },

{ backgroundColor: '#ffcccc', width: '200px', height: '200px', transform: 'rotate(180deg)' }

], 500, () => {

this.clearAnimation(".box");

});

}

});解释:

.box:选择器,指定要应用动画的元素。动画关键帧:通过数组定义关键帧,其中每个对象包含了要应用的样式。第一个关键帧:定义初始状态,width: '100px', height: '100px', backgroundColor: '#0000FF'。第二个关键帧:定义动画结束时的样式,backgroundColor: '#ffcccc', width: '200px', height: '200px', transform: 'rotate(180deg)'。500:动画时长为500毫秒。回调函数:在动画完成后,调用 clearAnimation 方法来清除动画效果。运行效果:

点击页面中的色块时,色块将会执行一个渐变动画,宽高变化、背景色变化,并旋转180度。

🦋2.2 animate 方法的关键帧属性animate 方法中的关键帧数组对象支持许多不同的属性,类似于 CSS 样式,下面是一些常用的动画属性:

属性名

类型

描述

offset

数字(0~1)

设置关键帧的位置,范围从 0 到 1

backgroundColor

字符串

设置背景颜色

width

字符串

设置宽度

height

字符串

设置高度

top

字符串

设置顶部位置

left

字符串

设置左边位置

opacity

字符串

设置不透明度

transform

字符串

设置变换样式,如 rotate, scale 等

translate3d

字符串

设置 3D 平移

rotate

字符串

设置旋转角度

scale

字符串

设置缩放比例

skewX/skewY

字符串

设置倾斜角度

matrix

字符串

设置变换矩阵

这些属性可以组合使用,创建复杂的动画效果。

🦋2.3 clearAnimation 方法clearAnimation 方法用于清除已应用的动画效果,可以在动画执行完毕后调用。它接受三个参数:

选择器:指定要清除动画的元素。清除选项(可选):一个对象,用于指定要清除的特定动画属性。如果不传递该参数,则会清除所有动画属性。回调函数(可选):清除动画后的回调函数。☀️2.3.1 示例:清除动画效果代码语言:javascript代码运行次数:0运行复制this.clearAnimation(".box", {}, () => {

console.log("动画已清除");

});此时,clearAnimation 会清除 .box 元素上的所有动画效果,且在清除完毕后执行回调函数。

🔎3.交互式动画大多数动画效果是独立于用户交互的,即动画的执行不会受到用户操作的直接影响。然而,在一些场景中,基于用户交互的动画非常重要。例如,可以根据用户对页面的滚动行为来控制动画的执行。

在小程序开发框架中,animate 方法提供了一个功能,可以在用户滚动时驱动动画的执行。通过将 animate 方法的第四个参数配置为一个对象,你可以实现这种基于滚动交互的动画效果。

🦋3.1 实现滚动驱动的动画为了实现滚动驱动的动画,需要使用 scroll-view 组件并为其设置一个固定的高度。在用户滚动 scroll-view 时,页面元素的动画效果会根据滚动的进度变化。

☀️3.1.1 示例:实现滚动驱动的动画animationDemo.wxml 文件:

代码语言:xml复制

占位数据

占位数据

占位数据

占位数据

占位数据

占位数据

占位数据

占位数据

解释:

scroll-view 组件用于创建一个可以滚动的区域,必须为其设置固定的高度(例如 300px)。页面中添加了一些占位数据,模拟内容的滚动。animationDemo.wxss 文件:

代码语言:css复制/* pages/animationDemo/animationDemo.wxss */

.box {

border-style: solid;

border-width: 1px;

display: block;

width: 100px;

height: 100px;

background-color: #0000FF;

}

.scroll {

height: 300px;

}解释:

.box 是动画的目标元素,初始状态为宽高 100px,背景色为蓝色。.scroll 为 scroll-view 组件,设置了一个固定的高度 300px。🦋3.2 在 onReady 生命周期方法中添加动画在页面的 onReady 生命周期方法中,通过 animate 方法为 .box 元素设置基于滚动驱动的动画。

animationDemo.js 文件:

代码语言:javascript代码运行次数:0运行复制// pages/animationDemo/animationDemo.js

Page({

onReady: function() {

this.animate(".box", [

{ width: '100px', height: '100px', backgroundColor: '#0000FF' },

{ backgroundColor: '#FFCCCC', width: '200px', height: '200px', transform: 'rotate(180deg)' }

], 500, {

scrollSource: '.scroll', // 绑定交互动画的 scroll-view 组件

timeRange: 1000, // 起始和结束滚动范围映射的时间长度

startScrollOffset: 0, // 滚动偏移量的起点

endScrollOffset: 400, // 滚动偏移量的终点

orientation: 'vertical' // 设置滚动方向,'vertical' 为竖直方向

});

}

});解释:

scrollSource: '.scroll':指定滚动视图 (scroll-view) 作为动画触发的源。orientation: 'vertical':设置滚动方向为垂直(竖直方向)。如果要使用水平滚动,可以设置为 'horizontal'。startScrollOffset: 0:滚动的起始偏移量,单位为像素,这里设置为 0。endScrollOffset: 400:滚动的结束偏移量,单位为像素,这里设置为 400。timeRange: 1000:设置滚动偏移量的映射时间长度,单位为毫秒,即动画执行的时间。🦋3.3 滚动驱动的动画效果当用户滚动 scroll-view 时,.box 元素的宽度、背景色、旋转角度等会根据滚动进度逐渐发生变化。例如,在滚动开始时,.box 的宽度为 100px,背景色为蓝色,随着滚动的进行,.box 的宽度会变为 200px,背景色变为粉红色,且旋转 180 度。

在设置滚动驱动的动画时,可以配置以下属性:

属性名

类型

描述

scrollSource

字符串

选择器,指定要绑定交互动画的 scroll-view 组件

orientation

字符串

设置滚动的方向,可选值为:horizontal(水平方向)、vertical(竖直方向)

startScrollOffset

数值

设置滚动偏移量的起点,单位为像素

endScrollOffset

数值

设置滚动偏移量的终点,单位为像素

timeRange

数值

起始和结束滚动范围映射的时间长度,单位为毫秒

相关推荐

WWE选手在一场现场秀中到底可以挣多少?
365bet官方网投

WWE选手在一场现场秀中到底可以挣多少?

📅 07-17 👁️ 5142
猛犸(猛獁)的意思
365bet官方网投

猛犸(猛獁)的意思

📅 08-04 👁️ 7132
CAXA PLM和SolidWorks PDM哪个好用
best365网页版登录官方网

CAXA PLM和SolidWorks PDM哪个好用

📅 07-28 👁️ 9512
[篮球]篮球世界杯传奇——保罗-加索尔
best365网页版登录官方网

[篮球]篮球世界杯传奇——保罗-加索尔

📅 07-03 👁️ 4127
这份白皮书是中国对全球反恐的重大贡献
365体育官网登录入口

这份白皮书是中国对全球反恐的重大贡献

📅 08-13 👁️ 6748
《王者荣耀》体验服韩信下架原因介绍
365体育官网登录入口

《王者荣耀》体验服韩信下架原因介绍

📅 08-11 👁️ 8548
1998年國際足協世界盃
365bet官方网投

1998年國際足協世界盃

📅 07-31 👁️ 6813
怪物猎人:世界全球解禁时间曝光 主线18小时
best365网页版登录官方网

怪物猎人:世界全球解禁时间曝光 主线18小时

📅 06-30 👁️ 7933