uni-app实现九宫格抽奖转盘 uni-app旋转动画代码实现

星宇大大_5399

星宇大大_5399

2026-05-22

716人浏览

原创

uni-app转盘动画卡顿需分平台处理:小程序必须用uni.createAnimation API,H5可fallback CSS;需校准角度映射、避免animationData复用、解耦高亮与旋转。

uni-app实现九宫格抽奖转盘 uni-app旋转动画代码实现

uni-app里用transform: rotate()做转盘动画会卡顿

直接在style里写transform: rotate(360deg)加transition,在部分安卓微信 WebView(尤其是旧版)上会掉帧、跳变,甚至转半圈就停。根本原因是 uni-app 的 view 组件在非 H5 平台(如小程序、App)中不支持 CSS transform 动画的硬件加速,且transition对动态绑定的rotate值响应不稳定。

实操建议:

  • 改用animation + @keyframes预定义旋转动画,避免 runtime 计算;
  • 给转盘容器加will-change: transform(H5 有效)或transform: translateZ(0)(强制开启 GPU 加速);
  • 动画时长统一设为4s以上,避免过快导致视觉误判;
  • 小程序平台必须用uni.createAnimation API 控制,不能依赖 CSS;

uni-app小程序端必须用uni.createAnimation控制转盘

微信/支付宝/抖音小程序不认v-bind:style里动态变化的transform,CSS 动画会被静默忽略。只有通过小程序原生动画 API 才能可靠触发。

关键代码逻辑:

// 在 methods 中
startRotate(angle) {
  const animation = uni.createAnimation({
    duration: 4000,
    timingFunction: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)' // 模拟惯性减速
  })
  this.animation = animation
  animation.rotate(angle).step()
  this.$nextTick(() => {
    this.animationData = animation.export()
  })
}

注意点:

  • angle 是累计总角度(比如转 3 圈+停在第 2 格 → 3 * 360 + 45),不是单次增量;
  • 必须等$nextTick后再export(),否则动画不触发;
  • H5 端可 fallback 到 CSS 方案,但小程序端必须走此路径;

九宫格抽奖结果与旋转角度的映射要手动对齐

“九宫格”是视觉布局,但转盘本质是圆形,每格实际对应的是扇形角度区间。常见错误是直接按 360/9=40° 均分,却忽略指针位置、格子中心偏移、起始角度偏差。

uni-app
uni-app

uni-app 是基于 Vue 的跨端开发框架,适合开发 H5、App、小程序、鸿蒙和多端业务应用。

下载

正确做法:

  • 把转盘图片的“0°起点”对准第一个奖品格的**中心线**(不是左边界);
  • 每个格子占360 / 9 = 40°,但中奖角度应落在[start + 20°, start + 60°)这类中心±20°区间;
  • 最终目标角度 = baseAngle + (targetIndex * 40) + 20(+20 是把落点校准到格子正中);
  • 务必在真机上测一遍——iOS 微信和安卓微信的 canvas 渲染精度不同,可能差 1~2°;

抽完奖不能立刻重置animationData,否则下一次转失效

很多开发者在animation.export()后马上清空animationData,导致第二次调用startRotate时animationData为空,转盘不动。

解决方案:

  • 动画结束回调里再重置:animation.rotate(...).step({ duration: 4000, timingFunction: '...' }) 后接.step({ delay: 4000 })不行,得用setTimeout或监听transitionend(H5);
  • 小程序推荐用setTimeout:动画开始后setTimeout(() => { this.animationData = {} }, 4100);
  • 更稳妥的做法是每次生成新animation实例,不复用;

最易被忽略的是:九宫格转盘的“格子高亮态”和旋转动画必须解耦——高亮靠v-if或 class 切换,别绑在旋转过程里,否则动画一卡,高亮就错位。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

uni-app

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2883

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

6283

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

7190

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

7018

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

1003

5

ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

3320

4

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

360

5

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.15

3153

5

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.09.24

1161

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习