2011-12-27 9 views
2

画像のグループ間にツリーの階層関係があります。画像を親ノードの画像よりも小さい子ノード画像を持つキャンバスタグの木構造として表現し、すべての画像をマウスオーバー時にある値で拡大する必要があります。html5キャンバスタグで画像の階層ツリー構造を作成していますか?

javascriptの関数setscaleとtranslateを使用すると、スケーリングの効果は問題ありませんが、画像が表示されているにもかかわらずマウスイベントリスナーの機能が正しく動作しないことがあります。私はデバッグに使用したアラートメッセージを取得しません。これはちょうどテストコードです: -

function loadImages(sources, callback){ 
    var images = {}; 
    var loadedImages = 0; 
    var numImages = 0; 
    // get num of sources 
    for (var src in sources) { 
    numImages++; 
    } 
    for (var src in sources) { 
    images[src] = new Image(); 
    images[src].onload = function(){ 
     if (++loadedImages >= numImages) { 
      callback(images); 
     } 
    }; 
    images[src].src = sources[src]; 
    } 
    } 



window.onload = function(){ 
var canvas = document.getElementById("myCanvas"); 
var context = canvas.getContext("2d"); 
var destX = 20; 
var destY = 20; 
var destWidth = 200; 
var destHeight = 137; 

var sources = new Array(); 
sources[0]="darth-vader.jpg"; 
sources[1]="darth-vader.jpg"; 

var imageObj = new Image(); 

loadImages(sources, function(images){ 
    context.drawImage(images[0], destX, destY, destWidth, destHeight); 
    images[0].onmouseover=function() 
    { 
     alert('1'); 
    } 

    images[0].onmouseout=function() 
    { 
     alert('2'); 
    } 
    context.drawImage(images[1], destX+200,destY, destWidth, destHeight); 
    images[1].onmouseover=function() 
    { 
     alert('3'); 
    } 

    images[1].onmouseout=function() 
    { 
     alert('4'); 
    } 
     }); 
    }; 
+0

キャンバスに画像のコピーを描画しています。 'onmouseover'属性は、表示されていないimage *要素*に対してのみ機能します。このようなことをするには、カーソルと画像の位置を検出する必要があります。 – pimvdb

+0

by image要素は、htmlイメージタグを意味しますか?はいの場合は、キャンバスタグで作業することはできますか? – ajish

+0

はい、 'new Image'は基本的に画像タグを作成します。このタグをキャンバスに配置することはできません。ビジュアル表現はキャンバスにのみ描画できます。 'canvas.onmouseover'を使って、カーソルがある数学の画像にあるかどうかを判断する必要があります。 – pimvdb

答えて

0

イベントは、キャンバスに描かれたイメージ上にないdom要素でトリガーされます。これらのイベントをシミュレートしたい場合は、キャンバスにmousemoveイベントを設定し、マウスが画像を描画した領域の内側にある場合はマウスオーバーをトリガーします。

+0

あなたはhtml5とキャンバスの合計noobを知っていますか、何らかの画像上にマウスを置いて特定の画像を検出する方法を教えてください。 – ajish

+0

キャンバスに描画する予定のAとBの2つのイメージがある場合は、それらを描画する前にキャンバス上の意図した位置とそのサイズなどをメモしてください。 A.y = 195; A.width = 120; A.height = 60; '。キャンバスをクリックすると、マウスのクリック(x、y)が描いたオブジェクトの境界内にあるかどうかを確認します。確かにより効率的なアルゴリズムがありますが、これがアイデアの要点です。 –

+0

Btw、ここで「オブジェクト」と言うと、私は実際には2つか3つの異なるものの緩やかな関連を意味します。あなたはキャンバスに存在するものとして "オブジェクト"を考えていますが、それは間違っています。キャンバスは単なるピクセルの集まりです(写真をMSペイントにコピー&ペーストするのは同じアイディアです)。私が言及した「限界」は、あなたがどこかで救うのに気にかけた数字だけです。イメージはキャンバスにコピーした元のイメージオブジェクトです。あなた自身で作成するものを除いて、これらの間には何の関係もありません。 –

0

マウスイベントは、描画されたイメージではなく、キャンバス自体にのみ配置できます。

ユーザーがキャンバスをクリックしたときに関連することができるように、描画される画像のサイズと位置を把握しておく必要があります。キャンバス上の複数の選択可能なオブジェクトを追跡する方法の例については、A Gentle Introduction to Making Canvas Usefulを参照してください。

関連する問題