使用自定义jQuery滑块和键盘键检测事件
detecting events with custom jQuery slider and keyboard keys
我构建了一个简单的自定义滑块,用户可以在其中单击网格中的项目,它将显示所选项目的内容,还可以让用户使用左右键盘箭头浏览其他网格内容项目。
HTML结构如下:
<div class="grid-container"> <!-- this is the grid container -->
<div class="grid-item" tabindex="1"> <!-- grid item -->
<div class="grid-item-preview"> <!-- preview container -->
<img class="grid-item-preview-image" src="http://placehold.it/360x240" />
</div>
<div class="grid-item-content"> <!-- content container, hidden at first and opens when the user clicks on the preview container -->
<div class="grid-item-content-left">
<img class="grid-item-original-image" src="http://placehold.it/640x480?text=Item1" />
</div>
<div class="grid-item-content-right">
<h3 class="grid-item-title">
This is a test item
</h3>
<p class="grid-item-text">
This is some filler text
</p>
</div>
</div>
</div>
</div>
问题是,使用我的代码,jQuery只遍历HTML元素一次,如果用户再次按下箭头键,它就无法再次工作,除非用户再次关闭并打开新的网格项。
我的js/jQuery代码如下:
$( document ).ready( function() {
$( '.grid-item' )
.on( 'click', function() {
$( this ).toggleClass( 'open-grid-item' );
$( this ).find( '.grid-item-content' ).fadeToggle();
})
.on( 'keydown', function( event ) {
if( $( this ).hasClass( 'open-grid-item' ) ) {
switch( event.keyCode ) {
case 37: $( this ) //User press left arrow
.removeClass( 'open-grid-item' ) //Removes class
.find( '.grid-item-content' ) //Find the content container
.fadeOut() //Fade out content container
.parent() //Traverses to parent div .grid-item
.prev( '.grid-item' ) //Traverses to previous div .grid-item
.addClass( 'open-grid-item' ) //Add class open grid
.find( '.grid-item-content' ) //Traverses to content container of the new div
.fadeIn(); //Shows content div
break;
case 39: $( this )
.removeClass( 'open-grid-item' ) //Same as before, but traverses to next .grid-item
.find( '.grid-item-content' )
.fadeOut()
.parent()
.next( '.grid-item' )
.addClass( 'open-grid-item' )
.find( '.grid-item-content' )
.fadeIn();
break;
}
}
});
});
我在这里有一个工作演示:https://jsfiddle.net/wuzrcnus/4/
如何修改我的代码以使用户能够使用箭头键导航到所有网格项?谢谢
在所有.grid-item
上将tabindex
设置为-1,并使用focus()
使下一个或上一个项目成为焦点:
switch (event.keyCode)
{
case 37:
$(this)
.removeClass('open-grid-item')
.find('.grid-item-content')
.fadeOut()
.parent()
.prev('.grid-item')
.focus()
.addClass('open-grid-item')
.find('.grid-item-content')
.fadeIn();
break;
case 39:
$(this)
.removeClass('open-grid-item')
.find('.grid-item-content')
.fadeOut()
.parent()
.next('.grid-item')
.focus()
.addClass('open-grid-item')
.find('.grid-item-content')
.fadeIn();
break;
}
JSFiddle
将keyevent附加到窗口元素,然后检查可见的网格项内容:
$(window).on( 'keydown', function( event ) {
if( $('.grid-item-content:visible').length > 0 ){
var gridItem = $('.grid-item-content:visible').parent(".grid-item");
switch( event.keyCode ) {
case 37:
gridItem
.removeClass( 'open-grid-item' )
.find( '.grid-item-content' )
.fadeOut()
.parent()
.prev( '.grid-item' )
.addClass( 'open-grid-item' )
.find( '.grid-item-content' )
.fadeIn();
break;
case 39:
gridItem
.removeClass( 'open-grid-item' )
.find( '.grid-item-content' )
.fadeOut()
.parent()
.next( '.grid-item' )
.addClass( 'open-grid-item' )
.find( '.grid-item-content' )
.fadeIn();
break;
}
}
});
jsfiddle
相关文章:
- Javascript-iPad Tab键检测,带蓝牙键盘
- 正在检测javascript中的键盘错误
- 检测javascript中的两个键盘按钮
- 检测输入框何时被键盘填充,何时被条形码扫描仪填充
- 检测 ipad 怪癖,显示键盘对焦
- 如何自动检测键盘输入和自动聚焦以输入并使用js或jquery将其输入到输入中
- 使用 jquery 检测键盘中输入的键模式
- 如何使用javascript检测安卓设备中的键盘关闭事件
- jQuery 和 Javascript - 检测 iPad 键盘何时关闭
- 如何检测数字键盘 在 JavaScript 中输入
- JavaScript 如何检测键盘输入
- iOS7 使用 Javascript 检测键盘高度
- 如何使用 javascript 检测硬件键盘的存在
- 使用自定义jQuery滑块和键盘键检测事件
- 如何实时检测键盘输入,并且不要在Javascript上浪费太多CPU资源
- 如何检测Gmail中的键盘事件
- JavaScript键盘事件和检测
- 如何检测iOS键盘'接下来'键
- 如何检测键盘事件已经绑定
- 检测左或右Shift键在键盘- JavaScript