0

"디지털 LP"를 만들기 위해 Itunes에서 html, css 및 javascript를 사용하는 "Itunes LP"형식의 터치 응용 프로그램을 만들고 있습니다. 응용 프로그램에는 터치 스크린을 통해 탐색 할 여러 LP가 있습니다. 전체 화면 모드 (iTunes 및 LP 내)에서 "esc 키"를 눌러 LP를 종료하고 탐색 할 다른 LP를 선택할 수있는 "coverflow view"를 입력 할 수 있습니다. 사용자가이 링크를 클릭 할 때 실제로 ESC 키를 눌렀을 때 한 가지 일을하는 버튼/링크를 만들어야하므로 키보드 또는 마우스가 없습니다.JavaScript를 사용하여 링크를 클릭하여 키보드 단축키를 시뮬레이션 할 수 있습니까?

제 질문은; 링크에서 JavaScript를 사용하여 키보드 단축키를 시뮬레이션 할 수 있습니까? 내 링크가 "집"이고이 링크를 클릭하면 ESC 키를 누를 때 브라우저가 작동합니다.

이 정보는 도움이 될 것입니다. 감사합니다.

다윗은

은 30/6 추가;

(아이튠즈 LP에 대한 TuneKit.js의 일부)

/* ==================== Keyboard Navigation ==================== */ 

TKSpatialNavigationManager.prototype.handleKeydown = function (event) { 

    var key = event.keyCode; 

    // check if our controller knows what it's doing and let it take over in case it does 
    if (this._managedController.wantsToHandleKey(key)) { 
    // prevent default actions 
    event.stopPropagation(); 
    event.preventDefault(); 
    // have the controller do what it think is best in this case 
    this._managedController.keyWasPressed(key); 
    return; 
    } 

    // reset the sound 
    TKSpatialNavigationManager.soundToPlay = null; 

    // check we know about this key, otherwise, do nothing 
    if (TKSpatialNavigationManagerKnownKeys.indexOf(key) == -1) { 
    return; 
    } 

    var navigation = TKNavigationController.sharedNavigation; 
    // first, check if we're hitting the back button on the home screen, in which case 
    // we don't want to do anything and let the User Agent do what's right to exit 
    if (event.keyCode == KEYBOARD_BACKSPACE && navigation.topController === homeController) { 
    return; 
    } 

    // before we go any further, prevent the default action from happening 
    event.stopPropagation(); 
    event.preventDefault(); 

    // check if we're busy doing other things 
    if (TKSpatialNavigationManager.busyControllers > 0) { 
    return; 
    } 
    // see if we pressed esc. so we can pop to previous controller 
    if (event.keyCode == KEYBOARD_BACKSPACE) { 
    var top_controller = navigation.topController; 
    if (top_controller !== homeController) { 
     // at any rate, play the exit sound 
     TKUtils.playSound(SOUND_EXIT); 
     // see if the top controller has a custom place to navigate to with the back button 
     if (top_controller.backButton instanceof Element && top_controller.backButton._navigationData !== undefined) { 
     navigation.pushController(TKController.resolveController(top_controller.backButton._navigationData.controller)); 
     } 
     // otherwise, just pop the controller 
     else { 
     navigation.popController(); 
     } 
    } 
    } 

는 **** 내 스크립트가 다음과 같이 표시됩니다

var albumHelper = {}; 

albumHelper.playAlbum = function() { 
    var playlist = bookletController.buildPlaylist(appData.songs); 
    playlist.play(); 
}; 

var event = {}; 

event.keyCode = function() { 
    var escapeKeyProxy = TKSpatialNavigationManager.prototype.handleKeydown({'keyCode':27}); 
    document.getElementById('btnExitFullScreen').onclick = escapeKeyProxy; 
}; 

var homeController = new TKController({ 
    id: 'home', 
    actions : [ 
    { selector: '.menu > .play', action: albumHelper.playAlbum }, 
    { selector: '.menu > .linernotes', action: event.keyCode } 
    ], 
    navigatesTo : [ 
    { selector: '.menu > .songs', controller: 'songs' }, 
    { selector: '.menu > .photos', controller: 'photos' }, 
    { selector: '.menu > .videos', controller: 'videos' }, 
    { selector: '.menu > .credits', controller: 'credits' } 
    ], 
    // make the PLAY button be default highlight 
    highlightedElement : '.menu > .play' 
}); 

그래서 내가 원하는 것입니다 **** .linernotes의 이미지를 클릭하면 푸시 된 ESC 키를 시뮬레이션합니다!

답변

0

이 답변은 iTunes LP 응용 프로그램이 전체 화면을 종료하는 데 사용하는 JS 기능이 있다고 가정합니다.

가능할 수도 있지만 이벤트를 시뮬레이트 할 필요가 없습니다. 작업중인 키 이벤트는 이벤트 수신기 또는 이벤트 처리기에 의해 함수 (이 경우 전체 화면 모드를 종료하는 함수)와 연결됩니다. 단추를 만들어 유사한 이벤트 수신기 나 이벤트 처리기로 묶어 동일한 기능을 수행 할 수 있어야합니다.

키 이벤트가 어떤 키가 눌 렸는지, 마우스 이벤트가 전달되지 않았으므로 프록시를 통해 전송해야하기 때문에 키 이벤트가 직접 연결할 수 없습니다. 귀하의 코드는 다음과 같이 보일 수 있습니다. 이 경우 iTunes LP 라이브러리에서 Key 이벤트를 취하는 코드는 iTunesLPKeyPressEvent라고합니다. 나는 그것이 실제로 불려지는지 전혀 모른다.

var escapeKeyProxy = function() { 
    iTunesLPKeyPressEvent({'keyCode':27}); 
} 
document.getElementById('btnExitFullScreen').onclick = escapeKeyProxy; 

약간 마사지해야 할 수도 있지만 기본적인 아이디어는 효과가 있습니다.

[편집] 당신의 갱신을 바탕으로, 나는 TKSpatialNavigationManager.prototype._managedController 당신이 작업에 필요한 대부분의 아마 TKSpatialNavigationManager.prototype._managedController.keyWasPressed(key)가 이스케이프 키를 캡처 코드는 객체라고 말할 것입니다. addEventListener("keypress",SOME_METHOD,true) (또는 keyup 또는 keydown) 코드를 살펴보고 이벤트를 처리하는 코드는 SOME_METHOD입니다. 그것은 당신이 도적질하기를 원하는 방법입니다. 바라건대 쉽게 얻을 수있는 범위에 있기를 바랍니다.

+0

감사합니다. 위의 편집을 참조하십시오. 나는 그 옳지 않다는 것을 안다. 그러나 나는 JS에서 경험이별로 없지만 많이 시도했다. 그러나 이것은 프로젝트의 마지막 부분이다. 그리고 끝난다. 그래서 집안을 시작하는 것은 어리석은 일이 될 것이다. js 파일을 작동 시키려면? 고마워! /david – Dave

+0

코드를 기반으로 답변을 업데이트했습니다. 여전히 문제가 있다면,'TKSpatialNavigationManager'의 인스턴스를 생성하는 라인과'onkeypress' 또는'addEventListener ("onkeypress")'를 갖는 라인을 제공 할 수 있습니까? – Andrew

관련 문제