uni-app如何实现简单的抽奖转盘 uni-app旋转动画逻辑

千晨小哥_5345

千晨小哥_5345

2026-05-08

792人浏览

原创

uni-app转盘动画不灵因浏览器跳过重绘,需强制重排:先设rotate(0deg)并requestanimationframe后再设目标角度,配合transition和权重算法计算中奖扇区,注意ios兼容性及文字反向旋转层级。

uni-app如何实现简单的抽奖转盘 uni-app旋转动画逻辑

uni-app里用transform: rotate()做转盘动画不灵?关键在CSS动画重置

直接用animation或transition改rotate()值,第二次点击经常不动——因为浏览器认为起始角度没变,跳过了重绘。必须强制触发重排,常见做法是清空transform再设新值,或用keyframes配合动态类名。

实操建议:

  • 给转盘容器加transition: transform 4s cubic-bezier(0.25, 0.46, 0.45, 0.94)(用缓动函数模拟惯性停顿)
  • 每次抽奖前先设transform: rotate(0deg)并setTimeout一帧(requestAnimationFrame更稳妥),再设目标角度
  • 避免用%单位写animation关键帧——uni-app的web-view和小程序平台对@keyframes支持不一致,优先走JS控制style.transform

怎么算中奖角度?别硬编码,用Math.random() + 扇区数组

手动写if (deg > 30 && deg 容易错位,尤其扇区数量变化时。正确做法是预定义奖品数组,按权重生成角度区间。

示例逻辑:

const prizes = [
  { name: '谢谢参与', weight: 3 },
  { name: '10元券', weight: 2 },
  { name: 'iPhone', weight: 1 }
]
const totalWeight = prizes.reduce((sum, p) => sum + p.weight, 0)
const rand = Math.floor(Math.random() * totalWeight)
let acc = 0
let winner = prizes[0]
for (let i = 0; i <h3>uni-app真机上转盘卡顿?禁用<code>will-change</code>,改用<code>translateZ(0)</code>
</h3><p>很多教程让加<code>will-change: transform</code>提升性能,但在微信小程序或Android低端机上反而引发渲染撕裂。uni-app编译后实际运行环境是WebView或自研渲染层,对CSS新特性兼容有限。</p><div class="aritcle_card flexRow artxards">
											<div class="artcardd flexRow">
												<a class="aritcle_card_img" rel="nofollow" href="/xiazai/gongju/2488" title="uni-app"><img
														src="https://img.php.cn/upload/manual/001/431/639/6a6029e0c4cd4231.png" alt="uni-app" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
												<div class="aritcle_card_info flexColumn">
													<a rel="nofollow" href="/xiazai/gongju/2488" title="uni-app" class="overflowclass">uni-app</a>
													<p class="overflowclass">uni-app 是基于 Vue 的跨端开发框架,适合开发 H5、App、小程序、鸿蒙和多端业务应用。</p>
												</div>
												<a rel="nofollow" href="/xiazai/gongju/2488" title="uni-app" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
												</a>
											</div>
										</div><p>更稳妥的加速方式:</p>
  • 给转盘元素加style="transform: translateZ(0);"触发GPU加速(比will-change更兼容)
  • 确保转盘图片用webp格式且尺寸不大于800px,否则iOS WKWebView会降帧
  • 抽奖过程中禁用用户点击:用v-if切换按钮状态,而非仅disabled——小程序里disabled不阻止tap事件冒泡

小程序平台无法监听transitionend?改用setTimeout + 固定时长判断

微信/支付宝小程序里transitionend事件不可靠,尤其是安卓端常不触发。不能依赖它回调“抽奖结束”,得用时间兜底。

安全做法:

  • 把动画时长(如4000ms)存在data里,启动动画时setTimeout(() => { this.onRotateEnd() }, 4000 + 100)(+100ms容错)
  • 如果需要中途取消动画(比如用户连点),记得clearTimeout并重置transform为初始值
  • 不要用getComputedStyle(el).transform读取实时角度——小程序里返回空字符串,H5也因优化可能不准

最易被忽略的是扇区文字朝向:用transform: rotate(-Xdeg)反向旋转文字时,必须和转盘同一DOM层级,否则旋转中心偏移;另外iOS Safari对transform-origin的百分比解析有bug,统一用50% 50%而非center。

相关文章

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

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

下载

相关标签:

uni-app

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

相关专题

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

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

2023.08.11

2483

5

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

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

2023.10.09

5363

6

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

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

2024.03.19

6390

13

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

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

2024.03.22

5998

10

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

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

2024.05.22

843

5

ajax教程
ajax教程

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

2023.06.14

2820

4

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

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

2023.08.31

360

5

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

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

2023.11.15

2653

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人学习