2016-11-12 1 views
2

캔버스 프로젝트에 Adobe Animate CC를 사용하고 있습니다. 나는 내가 너무 좋아하는 이벤트 리스너를 할당 배열을 가지고 :버튼을 클릭했을 때 indexOf를 사용하여 배열의 인덱스 값을 찾으려고 시도합니다.

for(var i = 0; i < navBtnArray.length; i++){ 
navBtnArray[i].addEventListener("click", navigationControls); 
} 

내가 알아 내려고 노력하고 있어요 것은 배열에 클릭 된 버튼의 인덱스 값을 캡처하는 방법입니다. 나는 이렇게 시도 :

function navigationControls(e){ 

console.log(navBtnArray.indexOf(this)); 
} 

하지만 그 -1 반환합니다. 다시 이것은 Animate CC이므로 jQuery에 액세스 할 수 없습니다. Animate는 CreateJS 및 EaselJS 라이브러리를 사용합니다. AS3에서 indexOf를 사용했지만 똑같은 방식으로 작동하지 않는 것 같습니다.

+0

currentTarget 속성을 사용하여이 작업을 수행 할 수있었습니다. console.log (navBtnArray.indexOf (e.currentTarget) + "이것은 버튼 배열 인덱스입니다."); – icekomo

답변

0

이 시도 : 그 내용은

var navBtnArray = document.getElementsByClassName('demo'); 
 
for(var i = 0; i < navBtnArray.length; i++){ 
 
(function(index){ 
 
     navBtnArray[i].onclick = function(){ 
 
       console.log(index) ; 
 
     }  
 
    })(i); 
 

 
}
<button class="demo">hi</button> 
 
<button class="demo">hi</button> 
 
<button class="demo">hi</button> 
 
<button class="demo">hi</button> 
 
<button class="demo">hi</button>

+0

마치 순수한 자바 스크립트 접근 방식처럼 보입니다. Animate 플랫폼을 사용 중이며 Animate 내부에서 js/easelJS 프레임 워크를 사용합니다. 이 기사를 발견했지만 내 문제를 해결하지 못하는 것 같습니다. http://createjs.com/docs/easeljs/classes/Utility%20Methods.html#method_indexOf – icekomo

1

을 사용할 수 :

function navigationControls(e){ 
    console.log(navBtnArray.indexOf(e.target)); 
} 

을 그 여전히 작동하지 않고 indexOf는 객체를 비교 할 수없는 경우, 당신은 시도 할 수 있습니다 다음과 같이 버튼 객체에 추가 속성을 추가합니다.

for(var i = 0; i < navBtnArray.length; i++){ 
    navBtnArray[i].addEventListener("click", navigationControls); 
    navBtnArray[i].index = i; 
} 

다음을 수행하십시오.

+0

대신에'e.currentTarget'을 사용하는 것이 좋습니다. 'target' (버튼에 자식이있는 경우) 'btn.mouseChildren = false'를 사용하여 마우스 자식을 끌 수 있습니다. – Lanny

+0

예, 그렇습니다. 그래픽이 어떻게 이루어 졌는지에 따라 상황에 따라 시나리오가 달라질 수 있다고 생각합니다. 때로는 모양의 자식에서'e.currentTarget '을 사용하여 이상한 결과를 얻었 기 때문입니다. –

관련 문제