真正可用的转盘需用cubic-bezier(0.34,1.56,0.64,1)模拟惯性,动态计算总角度并实时读取prizeOffset;SVG扇区须保留pointer-events默认值;监听animationend且过滤transform属性;移动端拖拽应改用requestAnimationFrame平滑过渡。

用 CSS animation 实现转盘惯性旋转,别碰 transform: rotate() 硬设值
直接写 transform: rotate(3600deg) 会卡顿、没减速、停不准。真正可用的转盘必须靠 animation-timing-function 模拟物理惯性——用 cubic-bezier(0.34, 1.56, 0.64, 1)(非标准缓动,手动调出“甩出去又慢回”的感觉),配合动态计算总旋转角度:baseAngle + random(360 * 3 ~ 360 * 5) + (360 - prizeOffset),其中 prizeOffset 是中奖区块起始角度,必须从 SVG 或 DOM 元素上实时读取,不能手算。
SVG 转盘扇区点击区域失效?pointer-events: none 别乱加
很多人给 用 生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力:
- 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面;
- 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”;
- 提及位于 `apps/console/src/featur 加 pointer-events: none 是为了透传点击到下层按钮,结果整个扇区点不动了。正确做法是:只对装饰性图形(如阴影、高光层)设 pointer-events: none;每个可中奖扇区的 必须保留默认行为,并绑定 click 事件或用 getPointAtLength() 做坐标判定。若用 z-index 和 cursor: pointer,否则移动端 touch 事件可能不触发。抽奖逻辑卡在「转完才通知」?用
animationend 而非 setTimeout
setTimeout 容易和动画时长不同步,尤其用户快速连点时会错乱。监听转盘容器的 animationend 事件才是可靠方案,但要注意:Chrome 会触发两次(一次 for transform,一次 for opacity),需用 event.propertyName === 'transform' 过滤;Safari 对 SVG 元素的 animationend 支持不稳定,建议统一监听外层 移动端转盘拖拽卡顿?放弃
touchmove + transform 手动更新touchmove 实时改 style.transform 会导致频繁重排,iOS 很容易掉帧。真要支持拖拽,应:① 用 CSS touch-action: none 禁用浏览器默认滑动;② 在 touchstart 记录初始角度,touchmove 只存 delta 值;③ touchend 后用 requestAnimationFrame 平滑过渡到目标角度,而非立刻跳转。更轻量的做法是干脆禁用拖拽,只保留点击触发——多数活动页实际不需要拖拽,强行加反而引入兼容性问题。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










