JS實現鍵盤移動游標
阿新 • • 發佈:2018-11-30
通過鍵盤的上下左右,實現對游標的移動,當點選回車時,進入所選的對應頁面。左邊是選單欄,右邊是具體資料。
左邊的選單欄佈局
右邊的具體資料區域性
1、先查詢到選單欄所以元素
function dh_method(){
alert("選單欄載入");
var my_dz=0;//右移動時改變值,從而將左邊的游標取消,右邊的游標設定(my_dz=1時)
var baseIndex = 10;//初始值
var li_sum=$("#div_dh ul").find("li").size();$("#div_dh").find("li").each(function(li) {
.attr("tabindex", li * 10 + baseIndex).attr("my_li",li )
.addClass("cGridInputs");
});//li==結束位置
if(my_dz==0){
$(".cGridInputs[tabindex=" + 10 + "]").focus() ;
}
2、選單欄的鍵盤控制
$("#div_dh .cGridInputs").keydown( function(evt) {var tabIndex = parseInt($(this).attr("tabindex"));
var my_lis = parseInt($(this).attr("my_li"));
switch (evt.which) {
case 40: //下---------------------
if( my_lis==9){//最後一個
return;
}
my_lis++;
tabIndex = my_lis*10+ baseIndex;
break;
case 38: //上---------------------
if( my_lis==0){//第一個
return;
}
my_lis--;
tabIndex = my_lis*10+ baseIndex;
break;
case 39: //右---------------------
// $(".cGridInput[tabindex=" + 10 + "]").blur();
my_dz=1;
break;
case 13:
/* alert("確定進入所選選單--座標:"+my_lis);
var url= $("ul li:eq("+my_lis+")").find("a").attr("href");
alert("菜單鏈接: "+url);
window.location.href=url;*/
break;
};
if(my_dz==0){
$(".cGridInputs[tabindex=" + tabIndex + "]").focus() ;
var distance = my_lis*(40+0)+50+'px';
$('.lanrenzhijia .hover').stop().animate({top:distance},150);
}
if(my_dz==1){
$(".cGridInputs[tabindex=" + tabIndex + "]").blur();
zt_method(); // 當點選右時,從左邊將移動到右邊,呼叫右邊移動的函式
return;
}
});
};
3、右邊頁面的查詢與控制
function zt_method(){alert("主體載入");
var baseIndex = 10;//初始值
var my_list;
var my_li;
var arrays = [];
var my_dz=0;
var rows=$("#list ").size();//總行數
$("#list ").each(function(list) {
arrays.push({"list":list,"li": $(this).find("li").size()});
// alert("list-第: "+list+"行;"+"li-總:"+$(this).find("li").size()+"張");
$(this).find("li").each(function(li) {
$(this).find("img")
.attr("tabindex", list * 10 + li + baseIndex).attr("my_list", list ).attr("my_li",li )
.addClass("cGridInput");
// alert("當前位置:"+list+"行"+li+"列");
});//li==結束位置
});//子div==結束位置
if(my_dz==0){
$(".cGridInput[tabindex=" + 10 + "]").focus();
$(".div_right #list:eq(0) li:eq(0)").addClass("mybg");
localStorage.clear();
}
$("#list .cGridInput").keydown( function(evt) {
var tabIndex = parseInt($(this).attr("tabindex"));
var my_lists = parseInt($(this).attr("my_list"));
var my_lis = parseInt($(this).attr("my_li"));
var column = 0;//列總數
switch (evt.which) {
case 38: //上---------------------
if ( my_lists == 0){
return;
}
my_lists -= 1;
$.each(arrays,function(index,value) {
if(my_lists == value.list){
column = value.li;
return;
}
});
if (my_lis > column-1) {
my_lis = column-1;
}
tabIndex = my_lists * 10 +my_lis + baseIndex;
break;
case 40: //下---------------------
if (my_lists == rows-1) { //已經是最後一行
return;
}
my_lists += 1;
$.each(arrays,function(index,value) {
if(my_lists == value.list){
column = value.li;
return;
}
});
if (my_lis > column-1) {
my_lis = column-1;
}
tabIndex = my_lists * 10 +my_lis + baseIndex;
break;
case 37: //左移---------------------
if (my_lists == 0 && my_lis == 0) { //第一行第一個,跳轉到選單------------------------
//跳到選單---------------
my_dz=1;
//return;
}
if(my_lis == 0){
my_lists--;
$.each(arrays,function(index,value) {
if(my_lists == value.list){
column = value.li;
return;
}
});
my_lis=column-1;
tabIndex=tabIndex-10+my_lis;
}else{
tabIndex--;
my_lis--;
}
break;
case 39: //右---------------------
$.each(arrays,function(index,value) {
if(my_lists == value.list){
column = value.li;
return;
}
});
if (my_lists == rows-1 && my_lis == column-1) { //最後行最後一個,跳轉到第一個
my_lists =0 ;
my_lis= 0;
break;
}
if(my_lis == column-1){
my_lists++;
my_lis=0;
tabIndex=tabIndex+10-(column-1);
}
else{
tabIndex++;
my_lis++;
}
break;
case 13:
alert("確定進入觀看--座標:"+my_lists+" , "+my_lis);
var url= $("#div_index #list:eq("+my_lists+") li:eq("+my_lis+")").find("a").attr("href");
alert("電影超連結: "+url);
window.location.href=url;
break;
};
//改變選擇的顏色--------------------------------
if(my_dz==0){
alert(my_lists+"行,列"+my_lis+"=="+tabIndex+"游標");
$(".div_right #list li").removeClass("mybg");
$(".div_right #list:eq("+my_lists+") li:eq("+my_lis+")").addClass("mybg");
$(".cGridInput[tabindex=" + tabIndex + "]").focus();
}
if(my_dz==1){
$(".cGridInput[tabindex=" + tabIndex + "]").blur();
$(".div_right #list li").removeClass("mybg");
dh_method();
return;
}
});//按鍵==結束位置
};
4、實現效果圖
5、個人總結與優化 這是一個頁面的實現,框架與框架的巢狀佈局,將分別寫選單的js與具體資料的js,關鍵在於跨頁面的框架js之間的呼叫,正在完善一些問題。本人處學者,有問題就多交流