JS -画布从图像文件-工作仅与浏览器缓存存在
JS - Canvas from image file - works only with browser cache present
我的JS代码在画布上绘制图像,使用图像文件。然而,这段代码只能在浏览器缓存存在的情况下工作——当页面第二次加载时。对于空缓存(ctrl +f5),画布是空的。有没有办法在执行代码之前预加载图像文件或其他方式使其第一次工作?
<canvas id="nr"></canvas>
<script>
var ctx = document.getElementById('nr').getContext('2d');
var img = new Image;
img.src = 'tlo.jpg';
var width = img.naturalWidth;
var height = img.naturalHeight;
document.getElementById('nr').width = width;
document.getElementById('nr').height = height;
console.log(width); //prints 0 with cache empty
ctx.drawImage(img, 0,0);
</script>
图像加载是一个异步操作,所以在复制到画布之前等待图像被加载。试试这样写:
var ctx = document.getElementById('nr').getContext('2d');
var img = new Image;
img.src = 'tlo.jpg';
img.onload = function() {
var width = img.naturalWidth;
var height = img.naturalHeight;
document.getElementById('nr').width = width;
document.getElementById('nr').height = height;
console.log(width); //prints 0 with cache empty
ctx.drawImage(img, 0,0);
}
如果您愿意,可以在img
元素上注册一个事件侦听器。
我还建议将整个代码块包装在一个函数中,以便在窗口加载事件触发后执行。此时,在您的浏览器中,在页面加载过程中修改DOM元素可能有效,但通常不能保证成功。
相关文章:
- image.onload事件和浏览器缓存
- 微软边缘浏览器缓存中的RESTful Angular应用程序
- 使用查询字符串方法清除浏览器缓存
- 浏览器缓存PHP生成的CSS和Javascript文件
- 阻止浏览器缓存上载的图像
- 停止浏览器缓存文本文件
- 从浏览器缓存渲染的页面
- 如何强制从浏览器缓存重新加载当前页面
- 在jquery中按Ctrl+F5清除浏览器缓存
- 如何在注销后从服务器重新加载angular应用程序,而不使用浏览器缓存
- 有没有任何方法可以使用js清除浏览器缓存,至少是我的域相关文件
- mvc项目中javascript和css文件的浏览器缓存
- 阻止浏览器缓存AJAX请求
- 如何使用jquery将ajax响应存储在浏览器缓存中
- 有没有办法防止浏览器缓存滚动位置和缩放级别等值
- 咖啡脚本和浏览器缓存
- 使用 AJAX 提交时使浏览器缓存表单数据
- 检查对象是否适合浏览器缓存
- 浏览器缓存是否知道javascript xmlhttp请求
- $('#textboxId').val() 返回旧值(浏览器缓存问题)