2013-03-08 4 views
0

this image gallery에 화살표 키 탐색을 추가하려고합니다.화살표 키 갤러리 탐색

그것은 this

var chosen = ""; 
$(document).keydown(function (e) { // 38-up, 40-down 
    if (e.keyCode == 40) { 
     if (chosen === "") { 
      chosen = 0; 
     } else if ((chosen + 1) < $('li.t').length) { 
      chosen++; 
     } 
     $('li.t').removeClass('selected'); 
     $('li.t:eq(' + chosen + ')').addClass('selected'); 
     $('li.t').click(this); 
     return false; 
    } 
    if (e.keyCode == 38) { 
     if (chosen === "") { 
      chosen = 0; 
     } else if (chosen > 0) { 
      chosen--; 
     } 
     $('li.t').removeClass('selected'); 
     $('li.t:eq(' + chosen + ')').addClass('selected'); 
     $('li.t').click(this); 
     return false; 
    } 
}); 

유사한 작동합니다 ...하지만 나는 그것이 iframe에 페이지를로드하고 동시에 다른 클릭 동작을 수행해야하기 때문에 각 화살표 키를 눌러 이동 (클릭처럼 작동 할 새로 선택한 엄지 손톱에 노란색 프레임)을 클릭하면됩니다.

또한 화살표 키로 이동하면 선택한 축소판을보기 위해 강제로 스크롤 할 수 있습니다.

... 내가 작동하게되면 다음 문제는 iframe 내에서 무언가가 클릭 될 때마다 기본 페이지와 화살표 키 탐색에 초점을 잃게 될 것이라고 상상해보십시오. 이것은 무시할 수있는 문제이지만 간단한 해결책이 있다면 그것을 사용하고 싶습니다.

감사합니다.

+0

코드를 들여하십시오 찾을 수 있습니다, 그것은 그런 식으로 읽는 것이 훨씬 쉽다. :) 그리고 이미지를 다루는 방법과 이미지 배치 방법을 보여주는 데모를 함께 만들 수 있습니까? –

+0

글쎄, 내가 이미지를 배치하는 방법은 위의 "이 이미지 갤러리"링크에서 보여주는 방법입니다. 데모를 만드는 방법을 모릅니다. 어떻게 코드를 남겨두고 미안 해요, 어쨌든 읽을 수는 없습니다. :/ –

답변

0

제공 한 jsfiddle을 사용하면 jquery의 trigger() 메소드를 사용하여 사용자 클릭을 시뮬레이션 할 수 있습니다.

$('li:eq('+whichIndex+') a').trigger("click"); 

이로 인해 클릭 이벤트의 현재 코드가 실행됩니다. 이런 식으로 클릭이나 키 누름을 추적하는 로직에 대해 걱정할 필요가 없습니다.

자바 스크립트이 샘플에서

var chosen = ""; 
$(document).keydown(function(e){ // 38-up, 40-down 
    chosen = $('li.selected').index(); //grab the current selection 
    if (e.keyCode == 40) { 
     if(chosen === "") { 
      chosen = 0; 
     } else if((chosen+1) < $('li').length) { 
      chosen++; 
     } 
     selectImage(chosen); 
     return false; 
    } 
    if (e.keyCode == 38) { 
     if(chosen === "") { 
      chosen = 0; 
     } else if(chosen > 0) { 
      chosen--;    
     } 
     selectImage(chosen); 
     return false; 
    } 
}); 

function selectImage(whichIndex) { 
    $('li:eq('+whichIndex+') a').trigger("click"); 
} 
$("#selection a").click(function() { 
    $('li').removeClass('selected'); 
    $(this).parent().addClass('selected'); 
}); 

는를 keyDown 이벤트는 단순히해야하는 요소 파악 다음 "선택". 일단 발견되면 selectImage() 함수가 호출됩니다.이 함수는 기본적으로 선택한 요소에서 마우스 클릭을 시뮬레이트합니다.

요소를 클릭하면 (사용자 클릭이든, jquery를 통해 호출 된 클릭이든) 이전 요소를 선택 취소하고 새 요소를 선택하는 실제 논리가 실행됩니다.

이의 작업 예제와 함께 바이올린 여기 http://jsfiddle.net/DPHWZ/

+0

JuanT ... 고맙습니다 JuanT ... 나는 이것을 구현 하려다가 목록 항목에 실제 URL을 추가하면 키 누름에 URL이로드되지 않지만 클릭하면 작동한다는 것을 알았습니다. 클릭 수와 키 누름 수가 아직 동일하지 않습니다. 이 문제를 해결할 방법이 있습니까? –

+0

이상하게도 효과가 있습니다. 마우스 클릭이나 키 누름을 억제해야하는 코드가 없습니다. 지금까지 가지고있는 것을 보여 주시겠습니까? – JuanT

+0

업데이트 된 jsfiddle [here] (http://jsfiddle.net/DPHWZ/1/)에서 마지막 두 목록 항목에는 화살표 키로 선택한 경우가 아니라 클릭 할 때 아래 iframe에만로드하는 URL이 있음을 볼 수 있습니다 ... –