canvas - drawImage()方法绘制图片不显示的问题
问题:
<canvas id="canvas1"></canvas>
var cav1 = document.getElementById('canvas1'),
wWidth = 800,
wHeight = 600;
cav1.width = wWidth;
cav1.height = wHeight;
var ctx1 = cav1.getContext('2d');
var bgImg = new Image();
bgImg.src = 'images/background.jpg';
ctx1.drawImage(bgImg,0,0,wWidth,wHeight);


<img src="./images/background.jpg" id="imgs" style="display:none"></img>
var bgImg = document.getElementById('imgs')
再次执行绘图竟然可以了。

<img src="">
window.onload = function(){
drawImage
}
如果不是在html结构中插入的图片,就被我的粗心绕过了这个限制:
解决:
1. 标签+window.onload
<img src="">
window.onload = function(){
context.drawImage()
}
1-2. 后期插入标签?是否可行
var myImg = document.createElement('img');
myImg.src = '///';
document.body.appendChild(myImg);
ctx1.drawImage(myImg,0,0,wWidth,wHeight);
var bgImg = new Image();
bgImg.src = 'images/background.jpg';
2. 定时器异步实现
setTimeout(function(){
ctx1.drawImage(bgImg,0,0,wWidth,wHeight);
},10)
这里为什么延迟写了10,没写大家熟悉的1000或者0呢?
因为在我的特定wifi环境特定台式机电脑的测试下,10能在图片加载完后刚好图片出来,而不像0那样不出来,也不想1000那样等半天出来。
可是试想一下,换一个更大的图,这个10还适用吗?wifi换成2g这个10还适用吗?
3. img.onload
bgImg.onload = function(){
console.log('图片加载成功');
console.log(this);
ctx1.drawImage(bgImg,0,0,wWidth,wHeight);
}
bgImg.onload = function(){
ctx1.drawImage(bgImg,0,0,wWidth,wHeight);
}
/* 绘制红线如下: */
ctx1.beginPath();
ctx1.moveTo(10,wHeight);
ctx1.lineTo(10,wHeight-100);
ctx1.lineWidth = 20;
ctx1.strokeStyle = 'red';
ctx1.stroke();
ctx1.closePath();
但我F5按下依旧没有变化,还是看不到红线。
找了半天直到我把背景图关掉才看到:

啊,原来他被背景图盖住啦!
可是,为什么呢?
我在想有两种可能
1、层级问题
2、先后问题
关于1,就像css的z-index那种感觉,是背景图在上盖住了红线。难道说背景图的层级比红线高?
这个设想我没法测试,于是放弃进行第二种可能的揭秘。
可是为什么背景图会在上呢?是因为背景图后画?
这个可以最简便的通过console.log()打印观察执行顺序


原来“罪魁祸首”竟然是onload这个回调。他跟定时器一样,都是一个异步任务。自然排在了同步任务(下边的绘制线条)的后边
所以前边看似是一个很好的解决方法——onload,在这里也暴露了他的弊端。
很好、看来,promise学习大计宜趁早提上日程啊!哈哈哈
canvas - drawImage()方法绘制图片不显示的问题的更多相关文章
- <canvas>drawImage()方法无法显示图片
在书上看到用<canvas>绘制图像就动手试试,刚开始,我的代码是这样的: <!DOCTYPE html> <html> <head> <meta ...
- Canvas中 drawImage绘制图片不显示
在学习 html5中的 Canvas.drawImage时写了如下代码: <!doctype html> <html> <head><title>研究& ...
- Android Canvas使用drawBitmap绘制图片
1.基本的绘制图片方法 //Bitmap:图片对象,left:偏移左边的位置,top: 偏移顶部的位置 drawBitmap(Bitmap bitmap, float left, float top, ...
- android中Canvas使用drawBitmap绘制图片
1.主要的绘制图片方法 //Bitmap:图片对象,left:偏移左边的位置,top: 偏移顶部的位置 drawBitmap(Bitmap bitmap, float left, float ...
- 使用canvas 的api 实现 图片的显示 及 压缩
在移动端压缩图片并且上传主要用到filereader.canvas 以及 formdata 这三个h5的api.逻辑并不难.整个过程就是: (1)用户使用input file上传图片的时候,用file ...
- canvas drawImage方法不显示图片的解决方案
先复习一下用法: context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height); 各个参数说明: 参数 描述 img 规定要使用的图像.画布 ...
- 关于Chrome和Opera中draw Image()方法无法在canvas画布中绘制图片的问题
var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); var img=d ...
- HTML5 Canvas 绘制图片不显示的问题
问题: 慕名赶来,却一脚踩空,低头一看,地上一个大坑. 事情是这样的,在我看完w3c的介绍和很有说服力和教学力的demo后,本着实践出真知的思想决定上手一试,这一试不要紧~ 我按照流水线工程铺设以下几 ...
- canvas.drawImage()方法详解
首先看html5.js /**@param {Element} img_elem@param {Number} dx_or_sx@param {Number} dy_or_sy@param {Numb ...
随机推荐
- HttpURLConnection 发送 文件和字符串信息
以文件的形式传参/** * 通过拼接的方式构造请求内容,实现参数传输以及文件传输 * * @param actionUrl 访问的服务器URL * @param pa ...
- poj 1700 Crossing River C++/Java
http://poj.org/problem?id=1700 题目大意: 有n个人要过坐船过河,每一个人划船有个时间a[i],每次最多两个人坐一条船过河.且过河时间为两个人中速度慢的,求n个人过河的最 ...
- server2008,本机可以登录ftp,其他机器登录不了解决办法。肯定是防火墙的问题
转自http://kkworms.blog.51cto.com/540865/558477 今天在windows server 2008 R2上安装了FTP,安装过程如下,然后添加内置防火墙设置,设置 ...
- C# 文件过滤器filter
OpenFileDialog对话框的Filter属性说明: 首先说明一个示例,分析一下Filter属性的构成:“ Excel文件|*.xls ”,前面的“Excel文件”成为标签,是一个可读的字符串, ...
- The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead [duplicate]
From: http://stackoverflow.com/questions/13944956/the-mysql-extension-is-deprecated-and-will-be-remo ...
- MATLAB:读取txt文件中物体的三维坐标,显示三维模型
在MATLAB中建立一个脚本show3Dtxt.m文件,编写代码: clear; %%read 3D data fileID= fopen('E:\博士\深度学习与三维重建\代码实现\voxel_gr ...
- Mac或者linux下登陆到linux上的SFTP
登陆 sftp -i 密钥路径 用户@ip ➜ ~ sftp -i Desktop/aliyun.pem root@39.106.30.1 Connected to 39.106.30.1 上 ...
- 源码分析七(java.lang包之IllegalArgumentException类)
一:IllegalArgumentException非法参数类,这个类继承父类RuntimeException public class IllegalArgumentException extend ...
- springboot+elasticsearch配置实现
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- Layui:设置select下拉框自动选中某项
1.问题:layUI,在做编辑功能有下拉框数据时,需要初始化选中某个值,layUI官网没有相关api,可能我比较笨没找到 2.解决思路:出发点击事件 3.分析dom树结构,出发dl点击事件 方法: v ...