微信小程序开发之animation循环动画实现的让云朵飘效果

yizhihongxing

下面是关于“微信小程序开发之animation循环动画实现的让云朵飘效果”的完整攻略:

1. 了解animation动画

在微信小程序中,我们可以使用animation来创建动画效果。animation可以制作基本的动画类型,如平移、旋转、缩放、透明度等。通过设置animation实例的属性和调用animation的方法,来控制动画的实现。

2. 实现云朵飘动效果

在小程序中实现云朵飘动效果,可以使用animation制作循环动画。下面通过两条实例来说明:

实例一:单个云朵飘动

我们需要先定义一个云朵的图片:

<!--cloud.js-->
<image src="/images/cloud.png"></image>

接下来,在page的javascript文件中使用createAnimation方法创建一个animation实例,并设置云朵的初始位置、偏移量和透明度。

//index.js
const animation = wx.createAnimation({
  duration: 5000,
  timingFunction: 'linear',
  transformOrigin: '50% 50%',
});

// 设置云朵的初始位置、偏移量和透明度
animation.translateX(-200).translateY(100).opacity(1).step();

在云朵的image标签中添加animation属性,并将上面定义的animation.export()赋值给它。

<!--cloud.js-->
<image src="/images/cloud.png" animation="{{animation.export()}}"></image>

然后在page的onLoad函数中,通过setInterval方法不断调用animation.translateXanimation.translateY方法,实现云朵的飘动效果。

//index.js
onLoad: function () {
  setInterval(function () {
    animation.translateX(500).translateY(50).step();
    animation.translateX(-200).translateY(100).step({ duration: 5000 });
    this.setData({
      animation: animation.export(),
    });
  }.bind(this), 10000);
}

该方法通过在5000毫秒内将云朵平移过去,然后在5000毫秒内将云朵平移到原点的方式,实现了云朵循环飘动的效果。

实例二:多个云朵同时飘动

这一示例中,我们需要用到wx.createAnimation()方法和wx.createSelectorQuery()方法。

首先,我们需要在wxml中定义多个云朵的image标签。

<!--index.wxml-->
<image id="cloud1" src="/images/cloud.png" animation="{{cloudAnimation1.export()}}"></image>
<image id="cloud2" src="/images/cloud.png" animation="{{cloudAnimation2.export()}}"></image>

接着,在page的javascript文件中,我们需要使用wx.createSelectorQuery()方法获取到各个云朵的topleft属性,然后根据这些属性为每个云朵设置一个不同的起始位置。

//index.js
onLoad: function () {
  const query = wx.createSelectorQuery().in(this);
  const that = this;
  query.selectAll('image').boundingClientRect(function (res) {
    res.forEach(function (cloud, index) {
      const animation = wx.createAnimation({
        duration: 5000,
        timingFunction: 'linear',
        transformOrigin: '50% 50%',
      });
      const randTop = Math.floor(Math.random() * that.data.winHeight);
      const randLeft = Math.floor(Math.random() * that.data.winWidth);
      animation.translateX(randLeft - cloud.left - cloud.width / 2).translateY(randTop - cloud.top - cloud.height / 2).step();
      that.setData({
        ['cloudAnimation' + (index + 1)]: animation.export(),
      });
    });
  }).exec();
}

在代码中,我们使用了Math.random()函数来随机生成每个云朵的起始位置。

然后,在onLoad函数的setInterval中逐个调用各个云朵的animation.translateXanimation.translateY方法,实现云朵的飘动效果。

//index.js
setInterval(function () {
  const query = wx.createSelectorQuery().in(this);
  query.selectAll('image').boundingClientRect(function (res) {
    res.forEach(function (cloud, index) {
      const animation = wx.createAnimation({
        duration: 5000,
        timingFunction: 'linear',
        transformOrigin: '50% 50%',
      });
      const randTop = Math.floor(Math.random() * that.data.winHeight);
      const randLeft = Math.floor(Math.random() * that.data.winWidth);
      animation.translateX(randLeft - cloud.left - cloud.width / 2).translateY(randTop - cloud.top - cloud.height / 2).step({ duration: 5000 });
      that.setData({
        ['cloudAnimation' + (index + 1)]: animation.export(),
      });
    });
  }).exec();
}.bind(this), 10000);

这里,我们设置了一定的延迟,以便让每个云朵的动画效果相互独立。

以上就是关于实现云朵循环飘动效果的攻略。希望对你有帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序开发之animation循环动画实现的让云朵飘效果 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • js学习总结之DOM2兼容处理重复问题的解决方法

    js学习总结之DOM2兼容处理重复问题的解决方法 1. 什么是DOM2兼容问题 在早期浏览器中,对于DOM(文档对象模型)的实现存在很大差异。其中一个最明显的差异是很多浏览器不支持DOM2规范。在这种情况下,我们使用JavaScript操作DOM时会遇到一些兼容性问题,比如不能使用document.getElementById()方法获取DOM元素。 2. …

    JavaScript 2023年6月10日
    00
  • js仿360开机效果

    以下是详细的“js仿360开机效果”攻略。 简介 360开机效果是指当我们打开360安全卫士等产品时,会出现一个渐进式加载的进度条动画效果。这个效果也可以用JavaScript来实现,本攻略将介绍如何使用JavaScript实现。 实现思路 实现这个效果的核心思路是: 使用CSS实现加载进度条; 在进度条加载期间,每个等待的时间间隔内,增加对进度条的长度的微…

    JavaScript 2023年6月11日
    00
  • HTML5实现的震撼3D焦点图动画的示例代码

    下面是关于“HTML5实现的震撼3D焦点图动画”的完整攻略,主要分为以下三个部分: 一、准备工作 1.1 导入必要的CSS和JS文件 HTML5实现的震撼3D焦点图动画需要使用一些CSS和JS文件,这些文件需要事先导入到HTML页面中。 其中必要的CSS文件有: <link rel="stylesheet" href="c…

    JavaScript 2023年6月11日
    00
  • 前端JavaScript大管家 package.json

    下面是前端JavaScript大管家 package.json 的完整攻略,分为以下几个部分: 1. 什么是 package.json package.json 是一个存放在项目根目录下的文件,是用于描述项目的元信息、配置和依赖关系的文本文件。在前端开发中,特别是使用 Node.js 时,package.json 扮演着非常重要的角色。 2. 如何创建 pa…

    JavaScript 2023年5月27日
    00
  • javascript的基础知识(随缘更新)

    1.声明与变量 let声明的变量可以多次赋值 let 变量名 = 值; const修饰叫常量,只能赋值一次,但是引用的值可以改变 var声明的变量可以多次赋值 结论:能用let不用var ,因为作用域的问题 2.基本类型和对象类型 undefined 和 null undefined 指 未定义的对象或者属性时 ,或声明了变量没有赋初始值时 null 指不引…

    JavaScript 2023年4月18日
    00
  • JavaScript 数据类型详解

    JavaScript 数据类型详解 简介 JavaScript 是一种弱类型、动态类型的编程语言,数据类型非常多样化。本文将从基本数据类型、对象类型和特殊数据类型三个方面详细介绍 JavaScript 中的数据类型。 基本数据类型 数值型(Number) 数值型是 JavaScript 中最基本的数据类型。它可以表示整数和浮点数。JavaScript 使用 …

    JavaScript 2023年5月17日
    00
  • 如何在 Vue 中使用 JSX

    当我们使用Vue框架开发的时候,我们通常会使用Vue模板语法来构建用户界面。但是在某些情况下,我们可能需要使用JSX来构建用户界面。JSX提供了更好的可读性和可维护性,并且可以直接使用原生JavaScript语法。下面是如何在Vue中使用JSX的完整攻略: 1. 安装依赖 首先,我们需要安装vue和babel-plugin-jsx两个依赖: npm inst…

    JavaScript 2023年6月10日
    00
  • JS两种类型的表单提交方法实例分析

    下面是关于“JS两种类型的表单提交方法实例分析”的完整攻略: JS两种类型的表单提交方法实例分析 提交表单的两种方式 在JS中,可以使用两种不同的方式来提交表单:普通表单提交和Ajax表单提交。 普通表单提交 普通表单是指通过浏览器的提交按钮或通过JS代码完成表单的提交。当我们使用表单提交时,表单会重新加载页面并传递表单数据到服务器。普通表单提交方法很简单,…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部