H5 转盘抽奖(awardRotate.js)碰到的问题

如题,在使用awardRotate.js做这个大转盘的时候碰到无数坑,下面来细数一下:
一、canvas 绘制远程图片上不去
问题的关键在于要等图片加载完成再绘制,这里我们需要用到Promise 和 img.onload
var promiseAll = [], img = [];
for (var i = 0; i < 8; i++) {
promiseAll[i] = new Promise((resolve, reject) => {
img[i] = new Image() ;
img[i].src = 'https://xxxxxxxxx.jpg' ;
img[i].onload = function () {
//第i张加载完成 resolve(img[i])
} })}
Promise.all(promiseAll).then((img) => {
// 开始绘制canvas
})
这样处理再安卓机上是没问题的,但是到了IOS上又不行了,在绘制图片的时候发现加载的图片宽度为0,说明图片还是未加载完成。一番折腾无果,没办法,只能把拿到的图片url放在img标签里面,加上id,隐藏起来,在canvas绘制图片的时候,根据id去拿图片,这样就万无一失啦,可算解决了!
二、图片模糊问题
<canvas id="wheelcanvas" width="422" height="422"></canvas>
canvas 先缩小4倍,改为:
<canvas id="wheelcanvas" width="1688" height="1688"></canvas>
绘制canvas的时候再放大4倍
var canvas = document.getElementById("wheelcanvas");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
// 放大四倍
ctx.scale(4, 4);
}
三、背景图片不兼容问题
转盘指针和转盘外边框,一开始使用背景图片来做的(background-size: 100% 100%),结果发现在不同的手机上面,不是这里缺了一点就是那里多了一点,万般无奈,直接用img吧,完美解决。
四、偶现点击转盘,出现横向滚动条问题
滚动条是转盘转动之后才出现的,经过研究发现,奖品数量大于2时,canvas转动之后,不在水平位置,左右两边超出容器了,给canvas的父级元素设置overflow: hidden;可完美解决。
五、转盘等后台接口返回之后才开始转,当后台接口较慢时,迟迟转不起来,体验很差,可以先转起来,待后台返回之后再重新转。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 如题,在使用awardRotate.js做这个大转盘的时候碰到无数坑,下面来细数一下: 一、canvas 绘制远程...
    HeyBuddy_25d8阅读 453评论 0 1
  • 第一章 HTML5 (2014年10月29日发布)新特性: 10个 (1)新的语义标签 (2)增强型表单 (3)视...
    fastwe阅读 1,033评论 0 1
  • 一、图形的组合方式 globalAlpha是一个介于0和1之间的值(包括0和1),用于指定所有绘制的透明度。默认值...
    空谷悠阅读 1,478评论 0 0
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,142评论 0 2
  • 倘若你不联系我,我都能接受,因为,印在我心里面的永远不会变,还有一个月,加油!我相信你以后的路会很好,而我…….....
    170218阅读 191评论 0 0

友情链接更多精彩内容