javascript – 图片未加载且未在HTML画布上显示
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 图片未加载且未在HTML画布上显示,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5185字,纯文字阅读大概需要8分钟。
内容图文
![javascript – 图片未加载且未在HTML画布上显示](/upload/InfoBanner/zyjiaocheng/819/fdc2454f89eb47f382c5fe90629c9a73.jpg)
我正在开发一个网站,加载后,它会显示HTML画布元素的编译图像.我的问题是,我无法分辨何时加载图像以将其绘制到画布或如何在我继续下一步之前强制加载图像.我一直在浏览以前关于这个主题的帖子,并尝试了很多不同的解决方案,但没有什么对我有用.
我正在使用web2py所以我确实使用了一些在服务器端运行的Python助手.
我用这个时:
canvas = document.getElementById('canvas');
context = canvas.getContext('2d');
image1 = new Image();
image1.src = '{{=URL('static', 'images/image-wrap-border-land.png')}}'; //resolves to: '/SNotes/static/images/image-wrap-border-land.png'
image1.onload = function() {
context.drawImage(image1, 0, 0, canvas.width, canvas.height);
};
由于未加载图像,因此onload函数不会执行任何操作并跳过它.我在尝试设置源之前尝试放置onload函数,但仍未绘制图像.
我试过了:
//code from above
if(image1.completed) {
context.drawImage(image1, 0, 0, canvas.width, canvas.height);
}
但是面临同样的问题.
我还研究了图像在加载时产生错误的可能性.为了抓住这个,我写道:
//code from above
image1.onerror = function() {
console.log('error');
}
但是图像源很好,图像不会产生错误,只需要很长时间才能加载.
有没有办法等待图像在绘制到画布之前加载?
编辑以添加特异性:
我的HTML看起来像这样:
<div id="profile-container" class="container-fluid">
<h1>My Notes</h1>
<div id="empty-orders" class="column-wrapper disable" style="padding-top: 5px; margin: 0 38%;">
<h3>Create a Note and it will appear here</h3>
<button class="btn btn-lg btn-outline">{{=A('GET STARTED', _href=URL('default', 'canvas_board_print'))}}</button>
</div>
<div id="loading" class="column-wrapper">
<i class="fa fa-cog fa-spin fa-3x fa-fw"></i>
</div>
<div id="row1" class="row">
</div>
</div>
我的javascript看起来像这样:
function showOrders(note_orders) {
var orders = note_orders;
//console.log(orders);
var row_num = 1;
var node_num = 1;
if(orders.length > 0) {
for (var i = 0; i != orders.length; i++) {
orders[i].border = JSON.parse(orders[i].border);
orders[i].image_retouching = JSON.parse(orders[i].image_retouching);
orders[i].shipping_info = JSON.parse(orders[i].shipping_info);
var new_node = $("<div>", {id: "node" + node_num, "class": "col-xs-3 node-wrapper"});
var new_canvas = $('<canvas>', {id: "canvas" + node_num, style: 'display: none'});
var new_image = $('<img>', {id: "note_prev" + node_num, 'class': 'img-responsive'});
$('#row' + row_num).append(new_node);
$('#node'+ node_num).append(new_canvas).append(new_image).append(processOrders(orders[i], node_num));
node_num++;
if (i != 0 && (i + 1) % 4 == 0) {
row_num++;
var new_row = $("<div>", {id: "row" + row_num, "class": "row"});
$(' #profile-container ').append(new_row);
}
}
$(' #loading ').addClass('disable');
} else {
$(' #loading ').addClass('disable');
$(' #empty-orders ').removeClass('disable');
}
}
function processOrders(curr_order, node_num) {
var canvas = document.getElementById('canvas' + node_num);
var context = canvas.getContext('2d');
var image1 = new Image();
image1.src = curr_order.image_url;
canvas.width = image1.naturalWidth;
canvas.height = image1.naturalHeight;
if(image1.complete) {
context.drawImage(image1, 0, 0, canvas.width, canvas.height);
if(curr_order.border.style == 'color_wrap') {
document.getElementById('note_prev' + node_num).style.border = "10px solid " + curr_order.border.color;
} else if(curr_order.border.style == 'image_wrap') {
var image_wrap = new Image();
if(canvas.width > canvas.height) {
image_wrap.src = '{{=URL('static', 'images/image-wrap-border-land.png')}}';
} else {
image_wrap.src = '{{=URL('static', 'images/image-wrap-border-port.png')}}';
}
console.log(image_wrap);
image_wrap.onload = function() {
context.drawImage(image_wrap, 0, 0, canvas.width, canvas.height);
};
image_wrap.onerror = function() {
console.log('errors');
}
}
}
document.getElementById('note_prev' + node_num).src = canvas.toDataURL('image/png');
var node_div = document.createElement('div');
//Other non-image informantion is appended to node_div
return node_div;
}
我的问题是从上面的例子中绘制image_wrap而不是image1.我的代码中的Image1绘制得很好,但是当它被绘制到画布时不会出现image_wrap.
我修好了它!!!
我通过创建image1变量来移动image_Wrap变量的创建.
function processOrders(curr_order, node_num) {
var canvas = document.getElementById('canvas' + node_num);
var context = canvas.getContext('2d');
var image1 = new Image();
var image_wrap = new Image();
image1.src = curr_order.image_url;
canvas.width = image1.naturalWidth;
canvas.height = image1.naturalHeight;
if(image1.complete) {
context.drawImage(image
我认为这不是一个好主意,因为我不想创建额外的变量,即使它们不会被使用,但我想它已修复它.
解决方法:
我能够使用您的代码加载图像.
你可以确认加载图像时没有收到错误吗?
(寻求澄清:发布作为演示运行代码片段的答案)
更新:添加了一种hackish方式,在加载图像之后等待一秒钟,然后再将其绘制到画布上
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var image1 = new Image();
image1.src = 'http://lorempixel.com/400/200/sports/1/';
image1.onload = function() {
// you could draw the image right away
// ctx.drawImage(image1, 0, 0, canvas.width, canvas.height);
// OR
// You could wait for an extra second before drawing the image (hackish, I know)
setTimeout(function() {
ctx.drawImage(image1, 0, 0, canvas.width, canvas.height);
}, 1 * 1000); // 1 second (in milliseconds)
};
<h2>canvas</h2>
<canvas id='canvas'>
</canvas>
<hr/>
内容总结
以上是互联网集市为您收集整理的javascript – 图片未加载且未在HTML画布上显示全部内容,希望文章能够帮你解决javascript – 图片未加载且未在HTML画布上显示所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。