微信小程序实现数字滚动动画

实现数字滚动动画需要用到小程序中的 animationsetData 方法,具体步骤如下:

1. 页面结构

在 wxml 文件中,需要准备一个数字占位符,以及一个用于显示数字的文本框。

<view class="number-placeholder">{{ number }}</view>
<view class="number-display">{{ displayNumber }}</view>

其中,.number-placeholder 类用于占位置,.number-display 类用于显示数字。为了让文本框看起来更美观,可以给它添加一些样式:

.number-display {
  font-size: 32px;
  color: #ff6886;
  font-weight: bold;
}

2. 动画实现

在 js 文件中,定义一个 animation 对象,并设置初始状态。同时,定义一个用于显示的数字和一个计时器,初始值都为 0。

Page({
  data: {
    number: 1234567890,
    displayNumber: 0,
    timer: null,
    animationData: null,
  },

  onLoad: function () {
    // 初始化 animation 对象
    let animation = wx.createAnimation({
      duration: 1000,
      timingFunction: "linear",
    });
    this.setData({
      animationData: animation.export(),
    });
  },
});

接下来,在 onShow 方法中启动计时器,每隔一段时间更新显示数字。

onShow: function () {
  this.startTimer();
},

startTimer: function () {
  let that = this;
  let step = 7890;
  let count = 0;

  that.setData({ displayNumber: 0 });

  let timer = setInterval(function () {
    count++;
    if (count > step) {
      clearInterval(that.data.timer);
      return;
    }
    let newNumber = Math.ceil(that.data.number * (count / step));
    that.setData({ displayNumber: newNumber });
  }, 10);

  that.setData({ timer: timer });
},

在计时器中,我们首先将显示数字 displayNumber 设为 0,然后每隔 10 毫秒更新一次数字,更新的值为原始数字乘以 0 到 1 之间的比例。这样,则会让显示数字从 0 逐渐增加到原始数字。

接下来,我们将动画与数字绑定,实现数字的滚动效果。在计时器中,添加如下代码:

  let animation = wx.createAnimation({
    duration: 1000,
    timingFunction: "linear",
  });
  animation
    .top("-60rpx")
    .step()
    .top("0")
    .step({ duration: 0 });
  that.setData({
    animationData: animation.export(),
  });

此段代码首先创建一个 animation 对象,并设置动画效果为线性。然后,我们在 1 秒钟内将文本框向上移动 60 像素,并将动画段的状态保存到 animationData 中。动画结束后,将文本框移回原位置,duration: 0 表示这是一个瞬间完成的动画。

3. 示例说明

示例一:带有参数的动画函数

在实际开发中,可以封装一个带有参数的动画函数,方便复用。下面是一个示例:

    function animateNumber(number, duration) {
      let that = this;
      let step = duration / 10;
      let count = 0;
      let animation = wx.createAnimation({
        duration: duration,
        timingFunction: "linear",
      });

      that.setData({ displayNumber: 0 });

      let timer = setInterval(function () {
        count++;
        if (count > step) {
          clearInterval(that.data.timer);
          return;
        }
        let newNumber = Math.ceil(number * (count / step));
        that.setData({ displayNumber: newNumber });
      }, 10);

      animation
        .top("-60rpx")
        .step()
        .top("0")
        .step({ duration: 0 });
      that.setData({
        animationData: animation.export(),
      });

      that.setData({ timer: timer });
    }

    // 调用 animateNumber 函数
    animateNumber.call(this, 9876543210, 2000);

可以看到,这个函数接收两个参数,分别是目标数字和动画时长。在函数体中,我们重复了之前计时器的逻辑部分,但是将初始数字和计时器清理都从数据里面移到了函数外部。在计时器结束后,执行和之前一样的动画效果,实现数字滚动效果。

示例二:使用插件实现滚动数字

如果你不想手写动画,也可以使用现成的数字滚动插件,并修改样式适应自己的需求。下面是一个示例:

<view class="number-display">
  <text class="number-text">{{ number }}</text>
  <number-scrolling duration="{{ duration }}" class="number-scrolling" wx:if="{{ useScrolling }}"></number-scrolling>
  <number-text duration="{{ duration }}" class="number-scrolling" wx:else></number-text>
</view>

在 wxml 文件中,我们引入了一个名叫 number-scrolling 的插件,然后根据需要选择是否使用。如果使用,则插件会产生滚动数字的效果;如果不使用,则直接显示目标数字。同时,我们将样式分离到 .number-text.number-scrolling 两个类中,以便样式调整。

.number-text {
  font-size: 32px;
  color: #ff6886;
  font-weight: bold;
  text-align: center;
}

.number-scrolling {
  height: 40px;
  overflow: hidden;
  position: relative;
}

.number-scrolling .number-scrolling-item {
  position: absolute;
  top: 0px;
}

js 文件中,我们需要导入插件,并设置插件参数:

const numberScrollingBehaviors = require('../../behaviors/number-scrolling');

Page({
  behaviors: [numberScrollingBehaviors],

  data: {
    number: 1234567890,
    duration: 2000,
    useScrolling: true,
  },
});

注意,在 js 文件中,我们需要导入 number-scrolling 插件的行为,以便使用插件提供的方法和属性。

完整代码及效果请参考示例

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序实现数字滚动动画 - Python技术站

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

相关文章

  • JavaScript中的this原理及6种常见使用场景详解

    让我来详细讲解一下“JavaScript中的this原理及6种常见使用场景详解”。 JavaScript中的this原理及6种常见使用场景详解 1. this是什么? 在JavaScript中,this是一个关键字,它指向当前函数的执行上下文。也就是说,this指向当前函数被调用时所在的对象。 2. this的指向 this的指向可以根据执行上下文的不同而不…

    JavaScript 2023年6月11日
    00
  • 地址栏传递中文参数乱码在js里用escape转码

    地址栏传递中文参数乱码是因为浏览器默认采用的编码方式是ASCII码(即英文字符的编码),而中文字符不在ASCII码的编码范围内,所以需要进行编码转换。其中一种解决方案是使用escape()函数对中文字符进行转码。 具体步骤如下: 在前端页面中,在传递中文参数的链接中使用escape()函数对参数进行转码。例如: <a href="exampl…

    JavaScript 2023年5月20日
    00
  • 基于javascript原生判断DOM是否加载完毕

    使用原生JS实现判断DOM是否加载完毕 在网页中,DOM(Document Object Model)是指HTML文档中各个元素的组成结构。当我们需要操作DOM时,必须确保DOM已经加载完毕。下面是一种使用原生JS实现判断DOM是否加载完毕的方法: document.addEventListener(‘DOMContentLoaded’, function(…

    JavaScript 2023年6月10日
    00
  • 实现javascript的延期执行或者重复执行的两个函数

    实现 JavaScript 的延期执行或重复执行,常用两个函数:setTimeout 和 setInterval。以下是详细攻略: setTimeout setTimeout 函数可以延迟指定时间后执行一次函数。 该函数的第一个参数是要执行的函数或要执行的代码,第二个参数是需要延迟的时间,单位是毫秒。 setTimeout 函数返回一个 ID,我们可以通过该…

    JavaScript 2023年6月10日
    00
  • Javascript实现表单检验

    下面是Javascript实现表单检验的完整攻略。 什么是表单检验 表单检验是指在前端页面中对用户输入的数据进行验证的一种技术手段。它可以用来保证提交给后端的数据的正确性和完整性,从而提高数据的质量和可靠性。 Javascript实现表单检验的步骤 下面是Javascript实现表单检验的一般步骤: 获取表单元素及其值 根据指定的规则进行数据验证 根据验证结…

    JavaScript 2023年6月10日
    00
  • 使用微信小程序开发前端【快速入门】

    使用微信小程序开发前端-快速入门 简介 本文介绍如何使用微信小程序开发前端应用程序。在本文中,您将学会如何搭建环境,创建新应用程序并构建其界面、开发前端逻辑和与后端交互。 环境搭建 在开始开发前,我们要确保已经安装了以下工具: 微信开发者工具 – 一个支持小程序开发、预览和调试的开发工具,您可以 从这里 下载它 创建新应用程序 打开微信开发者工具,点击左下角…

    JavaScript 2023年5月28日
    00
  • Javascript Date setUTCHours() 方法

    以下是关于JavaScript Date对象的setUTCHours()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的setUTCHours()方法 JavaScript的setUTCHours()方法设置的UTC小时部分。该方法接受一个整数,表示要的UTC小时。如果该参数超出了JavaScript所能表示的范围,则自动调整为相应的…

    JavaScript 2023年5月11日
    00
  • 你了解JavaScript的js运行三部曲吗

    当浏览器加载一个包含JavaScript代码的网页时,JavaScript代码的执行流程一般会遵循以下三个步骤: 1. 解析代码 浏览器首先会将包含JavaScript代码的网页进行解析,在这个过程中,会对JavaScript代码进行词法分析和语法分析。 词法分析:JavaScript代码中包含了各种不同类型的词汇单元,例如关键字、标识符、操作符等等,词法分…

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