2011-12-27 3 views
2

이미지 그룹 사이에 트리 계층 적 관계가 있습니다. 이미지를 부모 노드 이미지보다 작은 자식 노드 이미지가있는 캔버스 태그의 트리 구조로 나타내려면 모든 이미지가 마우스 오버시 일부 값으로 확장되어야합니다.html5 canvas 태그에서 이미지의 계층 구조 트리 구조를 생성 하시겠습니까?

javascript 함수를 사용하면 확대/축소 효과를 조정할 수 있지만 이미지가 표시 되더라도 마우스 이벤트 수신기 기능이 제대로 작동하지 않게되고 mouseover 및 mouseout이 감지되지 않습니다. 나는 디버깅을 위해 사용한 경고 메시지를 얻지 못했다. 이것은 단지 테스트 코드입니다 : -

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 * element *에서만 작동합니다. 이처럼 작동하도록하려면 커서와 이미지의 위치를 ​​감지해야합니다. – pimvdb

+0

이미지 요소로 html 이미지 태그를 의미합니까? 그렇다면 캔버스 태그로 작업 할 수 있습니까? – ajish

+0

예,'new Image'는 기본적으로 이미지 태그를 만듭니다. 이 태그를 캔버스에 배치 할 수는 없습니다. 캔버스에 시각적 표현 만 그릴 수 있습니다. 당신은'canvas.onmouseover'를 사용하고 커서가 어떤 수학을 가진 이미지에 있는지를 결정해야합니다. – pimvdb

답변

0

이벤트는 캔버스에 그려진 이미지가 아닌 dom 요소에서 트리거됩니다. 이러한 이벤트를 시뮬레이트하고 싶다면 캔버스에 mousemove 이벤트를 설정하고 이미지가 그려진 영역 안에 마우스가있는 경우 마우스 오버를 트리거하십시오.

+0

안녕하세요, html5 및 캔버스에 멍청한 놈, 당신은 제발 어떤 특정 이미지가 어떤 이미지 위에 있다면 마우스가 끝났음을 감지하도록 제안 할 수 있습니까? – ajish

+0

캔버스에 그릴 그림 A와 B의 두 이미지가있는 경우 캔버스에서 의도 한 위치와 크기 등을 그려야합니다. A.x = 7; A.y = 195; A.width = 120; A. 높이 = 60;'. 그런 다음 캔버스를 클릭하면 마우스 클릭 (x, y)이 내가 그린 객체의 경계 내에 있는지 확인합니다. 확실히 더 효율적인 알고리즘이 있지만 이것은 아이디어의 요지입니다. –

+0

Btw, 여기서 "개체"라고 말하면, 실제로는 두세 가지의 느슨한 연관성을 의미합니다. 당신은 캔버스에 존재하는 것으로서 "대상"을 생각하고 있습니다,하지만 그건 잘못된 것입니다. 캔버스는 픽셀의 무리 일뿐입니다. 사진은 MS 페인트에 사진을 복사하여 붙여 넣을 수 있습니까? 같은 생각입니다. 내가 언급 한 "범위"는 당신이 어딘가에 저장하기 위해 귀찮은 숫자 일뿐입니다. 이미지는 캔버스에 복사 한 원본 이미지 개체입니다. 당신이 직접 만드는 것을 제외하고는이 모든 것들 사이의 연결이 없습니다. –

0

마우스 이벤트는 그려진 이미지가 아닌 캔버스 자체에만 넣을 수 있습니다.

사용자가 캔버스를 클릭 할 때 관련 작업을 수행 할 수 있도록 그려지는 이미지의 크기와 위치를 추적해야합니다. 캔버스에서 여러 선택 가능한 개체를 추적하는 방법에 대한 예제는 A Gentle Introduction to Making Canvas Useful을 참조하십시오.

관련 문제