2

JS의 키보드 이벤트와 관련된 문제가 있습니다. 모든JS - 키보드 이벤트 - 듣기/듣기 취소

첫째, jQuery를 방법을 사용하는 내 질문에 대답하지 마십시오, 나는 그것의 대부분을 알고 (바인드/언 바인드, 온/오프, 한 ...)하지만 난에이 내부 프레임 워크와 함께 작동 대부분의 프로젝트에서 jQuery가 사용 되더라도 jQuery없이 작업하십시오 ().

사실 저는 Swipe.js을 기반으로 한 스 와이프 도구가 있으며 웹 및 모바일 환경에서 작동하도록 확장되었습니다 (Internet Explorer 7 이상, WebKit (Safari Chrome &), Moz, Opera 및 IE10/Windows 전화 번호)

마우스/터치 이벤트에 아무런 문제가 없다면 the mobile HTML5 BP에서 영감을 얻은 바인딩 및 바인딩 해제 방법은 detachEvents 메소드에 대한 작은 수정으로 매우 잘 작동하는 것 같습니다.

그리고 나서 'keydown'이벤트를 기반으로 키보드 컨트롤 기능을 구현할 것입니다. 은 (BTW, 나는 작은 스크롤 효과를 방지하지 않습니다()는 keypressEvent.preventDefault 제외 keydon 키 누르기 이벤트 사이 좋은 차이를 만들 확실하지 않다, 그래서를 keyDown 사용합니다.)

은 추가 할 수 있습니다으로 같은 페이지에서 많은 스 와이프를하고, 스 와이프에 집중할 때만 키 입력 이벤트를 듣기 시작합니다 (요소에 초점을 맞출 수 있도록 "tabindex"속성을 추가합니다). 스 와이프는 'touchstart'를 처리하는 다음

<div id="swipe1" class="swipe" tabindex='0'> 
    <ul> 
     [...] 
    </ul> 
</div> 

/'클릭'/ 'MSPointerDown'이벤트, 나는 그것을 초점 :

onTouchStart: function(e) { 
    this.container.focus(); // Refers to the div#swipe1.swipe element 
    [...] 
    return false; 
} 

onFocus: function (e) { 
    if (this.activateKeyboardControls) { // Keyboard control is optional 
     this.addListener(document, 'keydown', this, true); 
    } 
} 

onBlur: function (e) { 
    if (this.activateKeyboardControls) { // Keyboard control is optional 
     this.removeListener(document, 'keydown', this, true); 
    } 
} 

그러나 불행하게도의 removeListener이 작동하지 않습니다. 이 문서 객체에 바인더 제본되어 있기 때문에 요소 (흐림 이벤트가 발생), 그것은 여전히를 keyDown 이벤트를 처리 포커스를 잃었을

내 말은 ...

가 있습니까? 일부 불리언으로 작업하는 몇 가지 해결책을 읽었지 만 관리하기가 더 깨끗한 방법을 찾고 있습니다.

많은 수의 스 와이프에 집중할 때 키보드를 누를 때 각 스 와이프가 스 와이프하고 있기 때문에 이것은 성가신 일입니다.

미리 감사드립니다. 2 주 이상 게시 후 - -

답변

0

나는 내 대답이 삭제 된 이유의 확실하지 않다 이것이 내가 그것을 해결하는 방법이다, 어쨌든하지만 : 그것은의 '유형'매개 변수에서 오는

addEventListener/attachEvent 메서드, 첫 번째 것은 ...

나는 창문이 아니라 물결 모양으로 물체에 바인딩합니다.

var target = e.target || e.srcElement; 
if (this.activateKeyboardControls) { 
    this.addListener(target, 'keydown', this, false); 
}