前言

最近在做一个转盘抽奖页面,使用了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. Millar Robin模板

    \(Millar Robin\)模板 hdu2138 \(Code\) #include <cstdio> #include <iostream> #include <a ...

  2. spark机器学习从0到1决策树(六)

      一.概念 决策树及其集合是分类和回归的机器学习任务的流行方法. 决策树被广泛使用,因为它们易于解释,处理分类特征,扩展到多类分类设置,不需要特征缩放,并且能够捕获非线性和特征交互. 诸如随机森林和 ...

  3. 第四篇:NLP(Natural Language Processing)自然语言处理

    NLP自然语言处理: 百度AI的 NLP自然语言处理python语言--pythonSDK文档: https://ai.baidu.com/docs#/NLP-Python-SDK/top 第三方模块 ...

  4. 2.Scrapy基本命令介绍

    1.安装scrapy框架 a.安装wheel pip install wheel -i https://pypi.douban.com/simple/ b.安装twisted pip install ...

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

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

  6. Maven——pom.xml文件报错:Missing artifact:jar包

    原因:该错误原因为maven库中jar包无法更新 解决方法:找到maven库中对应的jar包路径,删除文件夹中的红框中的三个文件

  7. URL特殊字符转义

    在URL中,某些特殊字符会被转义成其它项,为了使这些特殊字符能正确表达,需用%加该字符的ASCII码在URL中显示.

  8. 干货!JNPF快速开发平台功能一览

      JNPF,采用主流的两大技术Java/.Net开发,是一套低代码开发平台,可视化开发环境,有拖拽式的代码生成器,灵活的权限配置.SaaS服务,强大的接口对接,随心可变的工作流引擎,一站式开发多端使 ...

  9. 【NLP】常用优化方法

    目录 梯度下降法 动量法 AdaGrad算法 RMSProP算法 AdaDelta算法 Adam算法 1.梯度下降法 梯度下降法可以分为三种,批量梯度下降法(BGD).小批量梯度下降(MBGD).随机 ...

  10. 实验三:Linux系统用户管理及VIM配置

    项目 内容 这个作业属于哪个课程 班级课程的主页链接 这个作业的要求在哪里 作业要求链接地址 学号-姓名 17043133-木腾飞 学习目标 1.学习Linux系统用户管理2.学习vim使用及配置 实 ...