2013-06-30 2 views
1

페이지의 특정 영역에 대한 클릭 수를 계산하고 유지하는 배열을 만들려고합니다. 그런 다음 클릭당 금액을 무언가를하고 싶습니다. 예) 5 번째 버튼은 mp3를 통해 소리를냅니다. 페이지가 흔들리는 여섯 번째 클릭.클릭 카운터, 클릭당 다른 이벤트

배열을 작성하여 특정 클릭 수에 무언가를 할당하면서 클릭 수에 따라 다른 이벤트를 추가 할 수 있습니까?

답변

1

http://jsbin.com/izutav/1/edit

를 단순히 이벤트 기능의 배열을 생성함으로써 : 당신이 당신의 이벤트 루프를 원하지 않는 경우

var a1_Events = [shake, noise, something], 
    a1_c = 0; 


function shake(){ 
    alert('SHAKING!'); 
} 

function noise(){ 
    alert('BZZZZZZZZZZZ!'); 
} 

function something(){ 
    alert('SOMETHING ELSE!'); 
} 


$('#area1').click(function(){ 
    a1_Events[a1_c++ % a1_Events.length](); 
}); 

을 사용하는 것보다 : a1_Events[a1_c++]();

+1

감사합니다. @ 로코 –

2
var clicks = 0; 
$('a').click(function() { 
    switch(++clicks) { 
     case X: 
      /* do something */ 
      break; 
     /* ... */ 
    } 
}); 

또는 배열이 같은

var myEvents = [function1, function2, function3]; 
var clicks = -1; 
$('a').click(function() { 
    clicks++; 
    if(myEvents[clicks] != undefined) myEvents[clicks](); 
}); 
+0

첫 번째 해결 방법은 정말 우아합니다! +1 – elslooo

+0

나는 또한 '혼란 스러움'에 대해 혼란 스럽다. 나는 전에 이것을 보지 못했다. 그래서 새로운 함수를 추가 할 수 있습니다. 그 줄 바로 위에있는 거지? 다음 코드 세트는 해당 함수를 저장하고 호출합니다. 권리? 도와 줘서 고마워! –

+0

@ 1977 -'break'는'switch/case'의 일부입니다 ... 자바 스크립트의 기본 내용 – Shaddow

1

뭔가 기능을 저장할 수 있습니다!

var actions = { 
    5: 'playMusic', 
    6: 'shakeDiv'  
}, 
actors = { 
doNothing: function() {/*default action; do nothing;*/}, 
playMusic: function() { 
    alert('Your are about to here a music now'); 
    /*place code for playing music here*/ 
    }, 
shakeDiv: function() { 
    alert('page is about to shake'); 
    /* place shake animation code here*/ 
    } 
}, 
defaultActionName = 'doNothing';//default action name 


var clickCount = 0; 

$('yourSelectorForThepart').click(function(e) { 
    clickCount++; 
    doAction(); 
}); 

function doAction() { 
    var actionName = actions[clickCount] || defaultActionName; 
    actors[actionName](); 
} 

그리고 그래, 당신은 단지 actions & actors 병합 할 수 있습니다. 그러나 유지 관리를 위해이 접근법을 선호합니다. & 가독성.

+1

6 번의 클릭으로 페이지를 흔들어보십시오. – Pietu1998

+0

죄송합니다. 수정 해 드리겠습니다. 고마워. –

+0

고마워요. 이것은 굉장해 보인다. 나는 그것을 어떻게 구현할 수 있을지 궁금하다; 정의 된 변수 중 하나에서 MP3 파일을 트리거하는 지점까지 ...? –

0

이처럼 할 수있는 :

// put your click actions as functions here 
var clickEvents = [function1, function2, function3, function4, playMP3, shakePage]; 
var clicks = 0; 
// put your clickable object here 
clickableObject.onclick = function(){ 
    clickEvents[clicks](); 
    clicks++; 
}