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

实现数字滚动动画需要用到小程序中的 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数组对象实现增加一个返回随机元素的方法

    实现一个返回随机元素的方法,我们可以通过 JavaScript 的数组对象原型添加一个静态方法实现。 下面是实现步骤: 1.首先,在数组对象原型上添加一个随机获取数组元素的方法。 Array.prototype.getRandomItem = function() { return this[Math.floor(Math.random() * this.l…

    JavaScript 2023年6月10日
    00
  • 解决 JScript 中使用日期类型数据时出现类型错误的问题

    当在 JScript 中使用日期类型数据时,有时会遇到类型错误的问题,这是因为 JScript 中的日期类型是 COM/OLE Automation 中的 Variant 类型转换成的。Variant 类型有不同的子类型,而 Date 是其中的一种。下面介绍一些解决这个问题的方法: 方法一:使用 new Date() 使用 new Date() 可以将字符串…

    JavaScript 2023年6月10日
    00
  • JS 正则表达式用法介绍

    JS 正则表达式用法介绍 什么是正则表达式 正则表达式是一种用来匹配文本和字符串的模式。JavaScript中的正则表达式被包含在RegExp对象中,可以用来进行字符串匹配、替换、查找等操作。 正则表达式语法 在JavaScript中,正则表达式的语法被写在两个斜杠之间,例如:/pattern/flags。其中,“pattern”是表示模式字符串的正则表达式…

    JavaScript 2023年6月10日
    00
  • Javascript Date getTime() 方法

    以下是关于JavaScript Date对象的getTime()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的getTime()方法 JavaScript Date对象的getTime()方法返回自1970年1月1日00:00:00 UTC以来的毫秒数。这个毫秒数可以用于比较日期和时间,或者用于计算时间间隔。 下面是使用Date对象…

    JavaScript 2023年5月11日
    00
  • JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题

    要实现定时任务可以使用JavaScript中的setInterval函数来每隔一定的时间执行特定的代码。在这个过程中需要注意一些细节,如何在setInterval中执行ajax请求等问题,以下是具体的攻略: 使用setInterval实现定时任务 在JavaScript中可以使用setInterval函数来实现定时任务,setInterval函数接收两个参数…

    JavaScript 2023年6月11日
    00
  • javascript表单验证使用示例(javascript验证邮箱)

    下面就为您详细讲解“javascript表单验证使用示例(javascript验证邮箱)”的完整攻略。 一、表单验证的基本原理 表单验证是指对用户提交的表单数据进行校验,以保证数据的合法性和完整性。在前端开发中,常用的表单验证方式包括: HTML表单验证:利用HTML表单的标准属性和属性值,来对表单数据进行校验和限制; javascript表单验证:利用ja…

    JavaScript 2023年6月10日
    00
  • js调试工具 Javascript Debug Toolkit 2.0.0版本发布

    JavaScript Debug Toolkit是一款网页开发调试工具,使用它可以帮助开发者快速定位及解决网页中的错误。下面是使用JavaScript Debug Toolkit的完整攻略。 安装 为了使用JavaScript Debug Toolkit,你需要将它下载到本地。你可以从GitHub上下载JavaScript Debug Toolkit的最新版…

    JavaScript 2023年6月11日
    00
  • JS+jQuery实现注册信息的验证功能

    实现注册信息的验证功能是一个常见的前端开发需求,使用JS+jQuery可以简单且高效地实现。下面是一个完整攻略,包含了实现过程、代码示例以及注意事项。 实现过程 在页面中添加表单元素,如input和button,并为其添加id和name属性。 在一个JS文件中创建一个函数,用于获取表单元素的值并进行验证。可以使用jQuery的选择器来获取表单元素。 在验证函…

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