现在我的整个项目太大了,无法复制和粘贴,但这里是我现在正在做的事情的基本分类:
$(document).ready(function(){
var canvas = $('#Canvas');
var data = {source: "images\pattern.png", repeat: "repeat"} ;
var pattern = canvas.createPattern(data); //Returns 'Null' at random
});
到目前为止我看过的东西:
- 加载时间(有点相关,当页面加载速度更快时,它似乎更频繁地中断)
- 加载顺序(似乎不相关)
- 通过预先将其强制为页面图像来预加载图像(不修复它)
- 使用 Image() 预加载它并将图像路径传递给 Image().src (也不修复它)
- 将 Image() 作为 data.source 而不是字符串路径传递(可能有一点帮助)
- 事先初始化 JCanvas(似乎不存在此功能)
- 尽早或尽可能晚地创建模式(似乎改变了频率,但不是很多)
它似乎有自己的想法,我无法弄清楚我做错了什么。任何人都知道我做错了什么?
-编辑1-
现在通过 Jcanvas 源进行调试,我认为它与上下文有关。有什么方法可以让我预加载画布上下文吗?
-编辑2-
忘记我所说的关于上下文的一切,我想我明白了。
//JCanvas source
[...]
else {
// Use URL if given to get the image
img = new Image();
img.crossOrigin = params.crossOrigin;
img.src = source; //<-- source is the url of my image ("images\pattern.png")
}
// Create pattern if already loaded
if (img.complete || imgCtx) {
onload(); //<-- When this runs, the image pops up perfectly fine
} else {
img.onload = onload(); //<-- This is what causes the problem,
//onload never seems to actually run
// Fix onload() bug in IE9
img.src = img.src;
}
img.onload 事件应该在图像加载后直接发生,但它似乎永远不会发生。