正如dyantree onActivate事件处理程序所期望的那样,图像未在画布上绘制

时间:2013-08-06 15:05:32

标签: javascript html5-canvas dyantree

我想要在激活非文件夹节点时显示图像。

  1. 展开文件夹节点。
  2. 单击非文件夹节点,该节点的图像将不会按预期显示。
  3. 单击与上一步骤中的节点不同的节点,然后单击上一步中的节点,该节点的图像将按预期显示。
  4. 由于某种原因,在为该节点触发onActivate事件至少至少两次之前(即通过访问另一个节点,然后返回到相关节点),将不会显示节点的图像。

    我尝试了几种解决方法。对我有用的唯一方法是使用onRender事件处理程序而不是onActivate,但这大大降低了生产中树的速度(在任何给定时间可能显示5000多个节点)。

    我也相信我已按照他对类似问题@pimvdbhere的回答中提供的所有建议here,但无济于事。我已经尝试在声明src函数之前和之后设置图像onload,但这似乎无关紧要。

    任何指针都会受到赞赏。

    jsFiddle

    Dyantree

    P.S。在您看到此问题后,您可能必须清除缓存以再次查看它。

1 个答案:

答案 0 :(得分:0)

显然,图像正在加载正常,问题是如何/当我为图像调整画布大小时。 Here是修复的jsFiddle。我改变了这个......

function loadImage(node) {
    var imageObj = new Image();
    imageObj.onload = function() {
        ctx.drawImage(imageObj, 0, 0);
    };
    imageObj.src = node.data.imageUrl;

    canvasObj.attr("height", imageObj.height + "px");
    canvasObj.attr("width", imageObj.width + "px");
}

到此......

function loadImage(node) {
    var imageObj = new Image();
    imageObj.onload = function() {
        canvasObj.attr("height", imageObj.height + "px");
        canvasObj.attr("width", imageObj.width + "px");
        ctx.drawImage(imageObj, 0, 0);
    };
    imageObj.src = node.data.imageUrl;
}