实现思路

  1. 为了实现数字的无限滚动效果,每个数字框的内部,其实包含了两组0~9的view,每个View的高度都一样
  2. 数字框内使用绝对定位,通过调整top位置,显示出指定的数字
  3. 使用transtion动画,top发生变化时就会滚动,然后通过指定动画的delay、duration,使数字之间延时动画

项目代码

js文件

Component({properties: {value: {type: String,value: ''},/** 一次滚动耗时 单位ms */duration: {type: Number,value: 1600},/** 每个数字之间的延迟滚动 */delay: {type: Number,value: 200}},data: {valArr: [],aniArr: [],  // 动画列表,和valArr对应numArr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],  // 所有数字itemHeight: 0  // 数字项的高度},observers: {value: function (newVal) {// 监听value变化,格式化为valArrlet valArr = []if (newVal) {valArr = newVal.split('').map(o => {return { val: o, isNaN: isNaN(o)}})}this.setData({valArr: valArr})this.getNumberHeight()}},methods: {/** 计算数字高度 */getNumberHeight() {if (this.data.itemHeight > 0) {this.startScrollAni()return}const query = this.createSelectorQuery()query.select('.number-item').boundingClientRect()query.exec((res) => {this.setData({itemHeight: res[0].height})this.startScrollAni()})},/** 开始滚动动画 */startScrollAni() {if (this.data.itemHeight <= 0) returnconst aniArr = []this.data.valArr.forEach((item, index) => {if(!item.isNaN) {aniArr.push(`transition-delay: ${this.data.delay * index}ms; top: ${-this.data.itemHeight * (this.data.numArr[parseInt(item.val)] + 10)}px;`)} else {aniArr.push(null)}})this.setData({aniArr: aniArr})}}
})

wxml文件

<view class="scroll-number container-class"><block wx:for="{{valArr}}" wx:key="index"><view wx:if="{{item.isNaN}}" class="scroll-number-item number-dot dot-class">{{item.val}}</view><view wx:else class="scroll-number-item number-item item-class"><view class="scroll-ani" style="transition-duration: {{duration}}ms; {{aniArr[index]}}"><view wx:for="{{numArr}}" wx:for-item="num" wx:for-index="idx" wx:key="idx" class="num{{num}}">{{num}}</view><view wx:for="{{numArr}}" wx:for-item="num" wx:for-index="idx" wx:key="idx" class="num{{num}}">{{num}}</view></view></view></block>
</view>

wxss文件

/* components/scroll-number/index.wxss */
.scroll-number {display: flex;align-items: flex-end;
}
.scroll-number-item {color: #0079FE;font-size: 48rpx;font-weight: bold;margin: 0 24rpx;font-family: Microsoft YaHei;
}
.number-item {background-color: rgba(0, 121, 254, 0.2);border-radius: 8rpx;width: 56rpx;height: 72rpx;line-height: 72rpx;overflow: hidden;text-align: center;position: relative;
}
.number-dot {margin: 0 12rpx;
}
.scroll-ani {position: absolute;top: 0;left: 0;width: 100%;height: 100%;transition: all 2s ease-in-out 0s;
}

在这里,我是做了一个封装的组件,调用方式如下

SumPrice是指最终跳动停止的数值

 <donation-transtion value="{{SumPrice}}"></donation-transtion>

微信小程序使用数字滚动动画相关推荐

  1. 微信小程序页面上下滚动、左右滑动(二)

    系列文章目录 微信小程序页面上下滚动.左右滑动(一) 文章目录 系列文章目录 前言 项目结构 解决问题1 1.pretest页面 2.test页面 解决问题2 总结 参考 前言 在上一篇文章,讲解了再 ...

  2. 微信小程序列表加载动画示例

    微信小程序列表加载动画 微信小程序列表加载动画示例 实现思路 什么是动画? 导航栏设置 列表动画加载 完整代码demo 微信小程序列表加载动画示例 初学微信小程序开发,记录一下.网上找了很久这种效果, ...

  3. 微信小程序实现文字滚动

    微信小程序实现文字滚动 1.wxml <view class="container"><view class='list' animation="{{a ...

  4. 微信小程序页面竖向滚动逻辑

    微信小程序页面竖向滚动逻辑 1.实现下面类似的数组 注:下面这个生成的数组最好是整数,滑动的时候会失去精度的,要不然你永远会差一点,让你崩溃的.而且你永远不知道差在哪里. this.leftScrol ...

  5. 解决微信小程序ios端滚动卡顿的问题

    解决微信小程序ios端滚动卡顿的问题 参考文章: (1)解决微信小程序ios端滚动卡顿的问题 (2)https://www.cnblogs.com/goloving/p/10563472.html 备 ...

  6. php小程序 100行左右,微信小程序 左右分类滚动列表

    今天需求个类似得到app分类的功能,效果如图: 左右分别滚动,互不干扰,先把简单的布局和样式搭好. 左侧分类 右侧顶部分类 右侧列表 .flex_row{display: flex;flex-dire ...

  7. 零基础也能学会的微信小程序制作横向滚动布局

    零基础也能学会的微信小程序制作横向滚动布局 准备工作: 微信开发者工具 APPID或测试号 创建一个JavaScript基本框架(如下图) 动手做起来吧~ index.wxml 最终效果: <! ...

  8. 小程序如何做成html的滚动字幕,微信小程序实现文字滚动

    本文实例为大家分享了微信小程序实现文字滚动的具体代码,供大家参考,具体内容如下 wxml: 显示完后再显示: {{text}} 出现白边后即显示: {{text}} {{text}} wxss: .e ...

  9. 微信小程序各种酷炫动画

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.  本文链接:https://blog.csdn.net/anda0109/article/de ...

最新文章

  1. Linux下修改mysql的root密码后数据库消失怎么处理
  2. 协作与协同有什么区别_OA软件, BPM系统, 移动办公系统, 协同办公系统到底有什么区别...
  3. Linux共享文件夹中毒,linux服务器中毒利用Find查找病毒例子
  4. 【NLP保姆级教程】手把手带你CNN文本分类(附代码)
  5. ubuntu16.04的WPS不识别jpeg图片格式
  6. ubuntu 22.04 修复 key is stored in legacy trusted.gpg keyring
  7. 模板文件, ruby erb 与 python format
  8. WebAR+教育丨帮助老师课堂教学,教育展览
  9. SpringBoot引入第三方SDK以及打包
  10. [转]JavaScript和html5 canvas生成圆形印章
  11. 千峰课程网安笔记(1)
  12. 专精特新企业认定条件 这些条件要满足
  13. 人群密度检测matlab算法,基于视频的人员密度检测.doc
  14. DPABI(用于脑成像的数据处理和分析的工具箱)的下载和安装步骤
  15. 深度学习中的温度参数(temperature parameter)--疑问待解决
  16. 无线显示但是无法上网络连接服务器,无线已连接上但还是不能上网该怎么处理...
  17. 去除em斜体的方法_鱼缸水体pH值对观赏鱼的影响,以及偏高或偏低的调节方法...
  18. grammer Analyzer
  19. H264_Lite高清视频编码器/解码器IP核(FPGA/ASIC通用)
  20. 自动化测试脚本-帐号注册到激活

热门文章

  1. Windows10设置挂起(休眠)
  2. 本地服务:无法访问此网站 localhost 拒绝了我们的连接请求。ERR_CONNECTION_REFUSED
  3. 基于STM32设计物联网在线智能称重系统(OneNet)_2022
  4. Excel学习日记:L33-二八法则的神奇图表-柏拉图(帕累托图)
  5. 【office】Visio 2016 画大括号(花括号) + 调整花括号尖角居中
  6. c语言如何使回车后回到上一行,c++输出换行后如何回到上一行继续输出
  7. Python---第8天---字符串
  8. 使用PC端谷歌Chrome浏览器浏览手机网页 修改PC端谷歌Chrome浏览器UA
  9. 【Java练习】2022个人所得税计算
  10. java基础知识整理