当光标悬停在HTML5画布上的图像上时,更新段落中显示的文本

时间:2013-02-26 12:42:04

标签: javascript html5-canvas mouseover kineticjs

我在HTML5画布上有一些图像,我想调用一个函数,只要光标悬停在其中一个图像上,它就会更新HTML <p></p>标记中显示的文本。 使用以下函数将图像绘制到画布:

function drawBox(imageObj, img_x, img_y, img_width, img_height) {
    console.log("function drawBox is drawing the description boxes");
    var canvasImage = new Kinetic.Image({
      image: imageObj,
      width: img_width,
      height: img_height,
      // puts the image in the middle of the canvas
      x: img_x,
      y: img_y
    });

    // add cursor styling

    imagesLayer.add(canvasImage);
}

我尝试通过添加一些代码来为每个图像添加一个on mouseover函数来调用我所拥有的函数来更新段落的内容到这个函数,所以我的drawBox函数现在看起来像这样:

function drawBox(imageObj, img_x, img_y, img_width, img_height) {
    console.log("function drawBox is drawing the description boxes");
    var canvasImage = new Kinetic.Image({
      image: imageObj,
      width: img_width,
      height: img_height,
      // puts the image in the middle of the canvas
      x: img_x,
      y: img_y
    });

    // add cursor styling


    canvasImage.on("mouseover", function(){
        //displayAssetDescriptionTip();
        console.log("displayAssetDescriptionTip() is being called on mouseover event");

        });

    imagesLayer.add(canvasImage);
}

当我使用此功能查看我的页面时,将光标悬停在已添加该功能的其中一个图像上,我添加到mouseover功能的日志正在显示在控制台中 - 所以我知道鼠标悬停工作正常。

但是,我遇到的问题是我想在mouseover事件中调用的函数。您将在上面看到,我已在displayAssetDescriptionTip()事件中注释了对函数mouseover的调用。这是我希望在光标悬停在这些图像上时调用的函数,但是,它似乎总是将段落中的文本更改为属于第一个描述框的文本...即,如果光标将鼠标悬停在我已添加mouseover事件的任何图像上,然后将文本更改为属于第一张图像的文本,而不是光标悬停在其上的图像。

功能是:

function displayAssetDescriptionTip(){
    if(canvasImage.id = "assetBox")
        document.getElementById('tipsParagraph').innerHTML = tips[34];
    else if(canvasImage.id = "liabilitiesBox")
        document.getElementById('tipsParagraph').innerHTML = tips[35];
    else if(canvasImage.id = "incomeBox")
        document.getElementById('tipsParagraph').innerHTML = tips[36];
    else if(canvasImage.id = "expenditureBox")
        document.getElementById('tipsParagraph').innerHTML = tips[37];
    else return;

    console.log("displayAssetDescriptionTip being called");
}

任何人都知道为什么它总是将文本更改为第一张图像的文本,而不是与任何其他图像对应的文本?我已经将它设置为根据光标悬停在哪个图像上将文本更改为数组的不同元素,因此它应该为每个图像显示与该数组不同的元素...

1 个答案:

答案 0 :(得分:0)

在你的函数displayAssetDescriptionTip中使用=赋值运算符而不是==比较运算符,因此你的第一个if条件总是匹配。

纠正了这个问题:

function displayAssetDescriptionTip(canvasImage){
    if(canvasImage.id == "assetBox")
        document.getElementById('tipsParagraph').innerHTML = tips[34];
    else if(canvasImage.id == "liabilitiesBox")
        document.getElementById('tipsParagraph').innerHTML = tips[35];
    else if(canvasImage.id == "incomeBox")
        document.getElementById('tipsParagraph').innerHTML = tips[36];
    else if(canvasImage.id == "expenditureBox")
        document.getElementById('tipsParagraph').innerHTML = tips[37];
    else return;

    console.log("displayAssetDescriptionTip being called");
}

不要忘记将canvasImage作为参数传递给事件处理程序

 canvasImage.on("mouseover", function(){
        displayAssetDescriptionTip(canvasImage);
        });