2012-11-29 3 views
3

먼저 자바 스크립트 세계에서 초보자라고 말하고 싶습니다.javascript - one button three functionsn

나는 버튼에 함수를 작성하려면 :

when button is pushed -> x=0 ; post(x); display x; 
when button is released -> x=1; post(x); display x; 
when button is hold down -> while hold: 
      if(x=0){post(x); display x; x++}   
      if(x=1){post(x); display x; x--} 

이 내가 지금까지 함께 온 것입니다 :

http://pastebin.com/1myT891h

도움은 매우 극명하게 될 것이다.

+3

: // jsbin. com –

+1

'post' 란 무엇입니까? 그리고 무한 루프 인 "보류"란 무엇을 의미합니까? – Bergi

답변

0

2 개의 인수 (값과 동작)를 가진 하나의 함수를 만들 수 있습니다. 이므로 when button is pushed -> myfunction(x,"pushed") ... 등등.

1

다음 jsFiddle을 확인하십시오. 그것은 당신이 찾고있는 것을 해줍니다 (적어도 그것이 이루어 지길 바랍니다). 그것이 명확하지 않다면 알려주고 조금이라도 지울 수 있는지 알게 될 것입니다. 당신이 행동에 그것을보고에 관심이 있다면

http://jsfiddle.net/s9nUr/

여기, 바이올린의 코드입니다. jQuery 사용에주의하십시오.

HTML : :

var x= 0; 
var interval; 

var push = function(val) { 

} 

var hold = function() { 
    if (x === 0) { 
     console.log('x is 0');  
    } 
    if (x === 1) { 
     console.log('x is 1');   
    } 
} 

$('#myButton').on('mousedown', function() { 
    x= 0; 
    push(x); 

    interval = setInterval(hold, 500); 
}); 

$('#myButton').on('mouseup', function() { 
    x = 1;   
    push(x); 

    clearInterval(interval); 
}); 
2

fiddle을 시도

<button id="button">Click here</button><br/> 
Status: <span id="status"></span> 

자바 스크립트 :

observeTriState("#button", function(state) { 
    var states = { '0':'Push', '1':'Release', '2':'Hold Down' }; 

    $("#status").text(states[state]); 
}, 500); 

function observeTriState(selector, callback, holdDelay) { 
    var mouseDown = false; 
    var mouseIn = false; 
    var interval; 

    function checkStatus() { 
     if (mouseDown && mouseIn) { 
      callback(2) 
     } 
    } 

    $(selector).mousedown(function() { 
     callback(0); 
     mouseDown = true; 
     interval = setInterval(checkStatus, holdDelay); 
    }).mouseup(function() { 
     mouseDown = false; 
     callback(1); 
     clearInterval(interval); 
    }).mouseenter(function() { 
     mouseIn = true; 
    }).mouseleave(function() { 
     mouseIn = false; 
     mouseDown = false; 
     clearInterval(interval); 
     callback(1); 
    }); 
} 
는 http://jsfiddle.net 또는 http에 코드를 이동
+0

왜'setTimeout' * 및 *'setInterval'입니까? – Bergi

+0

"hold down"을 발사하기 전에 초기 일시 중지를 추가합니다. 당신은'setInterval()'에 초기 타임 아웃을 사용할 수 있지만, 약간의 융통성을 허용한다. 코드 냄새를 감지하고 있습니까? – Anders

+1

그래, 나는 그 좋은 코를 가지고있다 :-) 타임 아웃은 간격을 시작하고'mouseDown = true'를 놓은 후에 길게 설정할 수있다. 버튼을 한 번 클릭 한 다음 1 초 정도 후 커서를 가리 키십시오. – Bergi