前言

最近在做一个转盘抽奖页面,使用了awardRotate.js发现字体和图片都有模糊,绘制的时候图片绘制不全,搜索一下之后发现针对awardRotate的解决方法比较少,针对canvas的比较多,所以这边总结一下。

代码如下:

<style>
.canvas{
width: 100%;
}
</style>
<article id="turntable">
<canvas id="wheelcanvas" width="422" height="422"></canvas>
<img class="pointer" src="./static/img/start.png" />
</article>

至于为什么会变模糊,这和浏览器处理 canvas 的方式有关,相关的文章可以参考这篇 High DPI,这里不作深入介绍。

解决这个问题的本质就是,先把canvas放大,然后在通过css限制会原始大小

解决方案就是把canvas的行间样式的宽度设为手机端的最大像素值,我这里设置为1688像素,也就是422的4倍, 按照这个像素画完之后, width:100%又会把canvas的宽度缩小至父元素的宽度那么大, 因此整个canvas的宽度被缩小了, 大尺寸的canvas内容被缩小了之后肯定不会产生锯齿现象,

<style>
.canvas{
width: 100%;
}
</style>
<article id="turntable">
<canvas id="wheelcanvas" width="1688" height="1688"></canvas>
<img class="pointer" src="./static/img/start.png" />
</article>

又因为我们把canva的内容缩小了四倍,接下来我们通过js把canva放大四倍即可,这样就可以解决我们字体和图片模糊的问题了,接下来就是处理所有图片加载的问题了

var canvas = document.getElementById("wheelcanvas");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
// 放大四倍
ctx.scale(4, 4);
}

众所周知,img都有onload事件,我们这里就可以借助Promise和img的onload事件来实现判断所有图片是否加载完成

代码如下:

let promiseAll = [],
img = [],
mulitImg = [
'./static/img/iphonexmax.png', './static/img/beats3.png',
'./static/img/again.png', './static/img/myhb.png',
'./static/img/iphonexr.png', './static/img/mi.png',
'./static/img/again.png', './static/img/myhb.png'
]
for (let i = 0; i < 8; i++) {
promiseAll[i] = new Promise((resolve, reject) => {
img[i] = new Image()
img[i].src = mulitImg[i]
img[i].onload = function () {
//第i张加载完成
resolve(img[i])
}
})
}
Promise.all(promiseAll).then((img) => {
// 你要处理的函数
// drawRouletteWheel(img)
})

awardRotate转盘插件文字模糊问题和图片加载问题的更多相关文章

  1. 启用lazyload插件,减少图片加载

    使用lazyload的js插件,减少图片加载,提高页面加载速度和节省流量.虽然这个头像是第三方服务器来的,不消费博客的流量,但是能节省部分访客的加载时间,也是不错的哦. 用lazyload插件,只是后 ...

  2. 基于jQuery的图片加载loading效果插件

    基于jQuery的图片加载loading效果插件 图片loading的效果是网页中比较常见的,尤其是对大图片,loading效果让用户能够明白图片加载的过程. 实现思路也是比较简单的: $.fn.Lo ...

  3. web前端图片加载优化,从图片模糊到清晰的实现过程

    在网页图片显示的时候,会发现许多网站采用了先模糊,然后在慢慢清晰的过程,这样的加载用户体验是比较好的,那么如何实现呐? 默认加载2张图片,一张缩略图,一张原图,当打开网页的时候默认只显示缩略图,然后我 ...

  4. AntiModerate – 渐进式图片加载的 JavaScript 库

    AntiModerate 是一个渐进式图片加载的 JavaScript 库.我们多数看到的图片显示模式,都是从上到下逐渐显示的,这是“标准式”图像:而有的图片是先出现一个很低分辨率的图像轮廓,类似加了 ...

  5. Android图片加载库的理解

    前言     这是“基础自测”系列的第三篇文章,以Android开发需要熟悉的20个技术点为切入点,本篇重点讲讲Android中的ImageLoader这个库的一些理解,在Android上最让人头疼是 ...

  6. Android中常见的图片加载框架

    图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行 ...

  7. Android之图片加载框架Fresco基本使用(二)

    PS:最近看到很多人都开始写年终总结了,时间过得飞快,又到年底了,又老了一岁. 学习内容: 1.进度条 2.缩放 3.ControllerBuilder,ControllerListener,Post ...

  8. fackbook的Fresco的多种图片加载方法以及解码过程

    上篇文章中我们提到了图片加载其实是用了三条线程,如果没看过的同学可以先了解下这里. fackbook的Fresco的Image Pipeline以及自身的缓存机制 那么今天我们就来探索一下如何在代码中 ...

  9. 关于图片加载非常爽的一个三方控件 fresco,一个三fresco

    Hi  EveryBody 今天来玩一个非常爽的控件 fresco 到底有多爽呢 接着看就知道了 首先 来看看fresco 是个神马东西 https://github.com/facebook/fre ...

随机推荐

  1. UDP编程中的connect

    标准的udp客户端开了套接口后,一般使用sendto和recvfrom函数来发数据,最近看到ntpclient的代码里面是使用send函数直接法的,就分析了一下,原来udp发送数据有两种方法供大家选用 ...

  2. mysql连表查空,查询第二张表中没有第一张表中的数据

    select consumer_id,user_name,mobile,invite_code from csr_consumer where invite_count<(select coun ...

  3. layui批量传值到后台操作时出现传值为空的问题

    如图,前台的样子,data的参数为 [ {"good_id":1,"good_name":"标样-总磷","good_num&qu ...

  4. React 中使用sass

    npm install node-sass-chokidar --save-dev package.json添加两行: "scripts": { 2 "build-css ...

  5. Django视图函数函数之视图装饰器

    FBV模式装饰器: 普通函数的装饰器(语法糖@) views.py from django.shortcuts import render def wrapper(f): def inner(*arg ...

  6. 团队作业-Beta冲刺 (第一天)

    这个作业属于哪个课程 <课程的链接> 这个作业要求在哪里 <作业要求的链接> 团队名称 RTD <团队博客链接> 这个作业的目标 剩余任务预估,分配任务(开发,测试 ...

  7. Java面试题小结(一)

    ---恢复内容开始--- 1.用Java解析xml有几种方式,实现场景.区别以及优缺点: 有四种 分别是JDOM.SEX.DOM.JDOM4J 实现场景: JDOM:实现功能简单的地方,例如:解析: ...

  8. 201771010128王玉兰《面象对象程序设计(Java)》第七周学习总结

    第一部分:基础知识总结: 1继承 A:用已有类来构建新类的一种机制,当定义了一个新类继承一个类时,这个新类就继承了这个类的方法和域以适应新的情况: B:特点:具有层次结构.子类继承父类的方法和域: C ...

  9. 设置键盘return键样式

    textField.returnKeyType = UIReturnKeySend; typedef NS_ENUM(NSInteger, UIReturnKeyType) { UIReturnKey ...

  10. 最小生成树 状压+prim hdu2489

    Minimal Ratio TreeTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...