通过键盘的上下左右,实现对光标的移动,当点击回车时,进入所选的对应页面。左边是菜单栏,右边是具体数据。

左边的菜单栏布局

右边的具体数据局部

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) {
                   $(this).find("a")
                                .attr("tabindex", li * 10 + baseIndex).attr("my_li",li )
                                .addClass("cGridInputs");
                 //alert("当前位置:"+li+"列");

});//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之间的调用,正在完善一些问题。本人处学者,有问题就多交流

JS实现键盘移动光标相关推荐

  1. selenium java 滚动条_java+selenium使用JS、键盘滑动滚动条

    本篇文章介绍如何使用JS和键盘对象对页面进行滑动滚动条-------------主要针对java做自动化测试的同学 一:使用键盘对象操作滚动条 //导包 importorg.openqa.seleni ...

  2. php接收键盘事件,js获取键盘事件的方法实例

    本文主要和大家分享js获取键盘事件的方法实例,希望能帮助到大家. document.οnkeydοwn=function(event){ var e = event || window.event | ...

  3. js检测键盘组合键,禁止F12

    js检测键盘组合键ctrl+p js检测键盘组合键ctrl+d js检测键盘组合键ctrl+s js禁止F12 体验地址:点击在线体验 <!DOCTYPE html> <html l ...

  4. js通过键盘操控盒子

    js通过键盘操控盒子 步骤 1.键盘按下方向键,可以控制小盒子的移动. 1.1 给谁添加键盘按下事件 document 1.2 如何判断按下的是哪个键键盘事件对象 1.3 如何让小盒子移动 让小盒子绝 ...

  5. js实现键盘控制div移动(可加速)_☆往事随風☆的博客

    文章目录 前言 一.基本思路 二.代码分析 1.首先为div开启绝对定位 2.为document绑定键盘按下和抬起事件 3.获取对应键盘的Unicode编码 4.设置变量保存速度和键盘Unicode编 ...

  6. vue实现自定义身份证,数字键盘(光标,输入框,键盘)

    vue实现自定义身份证,数字键盘(光标,输入框,键盘) 组件介绍 组件代码 效果图 组件使用 引用 使用 参数介绍 方法 插槽 组件介绍 vue实现自定义身份证键盘(光标,输入框,键盘全手写) 组件代 ...

  7. html打字并自动滚动效果,js实现键盘自动打字效果

    content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale= ...

  8. JS之键盘事件案例(重要)

    事件对象案例 下拉菜单 HTNL CSS JS 拖拽回放 html css js 移动表格 html css js 换肤效果 html css js 下拉菜单 需求: [1]搜索框获取焦点的时候 显示 ...

  9. js模拟键盘某个键按下_教你认识电脑键盘上的按键基础篇,轻松认识键盘

    常用的键盘,无论是台式机还是笔记本,除了材质.品牌等差异,基本用法是一样的,今天就带大家认识键盘 1.键盘区域划分,主要有主键盘区.功能区.光标控制区.小键盘区和指示灯区,日常使用最多的是主键盘区,方 ...

最新文章

  1. js插值计算_Python IDW插值计算及可视化绘制
  2. (转)【javascript基础】原型与原型链
  3. 如何查找订单提示VPRS VE217 数量/值确定时出错
  4. CVPR 2018 TRACA:《Context-aware Deep Feature Compression for High-speed Visual Tracking》论文笔记
  5. SEO优化---学会建立高转化率的网站关键词库
  6. WAP自助建站 我编程之路的启蒙
  7. android 存储私有文件,是否可以只在Android应用程序的私有目录中保存图像,而不是设备的内部或任何外部存储?...
  8. PyTorch 1.0 中文官方教程:数据加载和处理教程
  9. Anconda之常用命令汇总
  10. matlab里的scalar,scalar_scalar与vector之间的区别
  11. 关于代码审查的几点建议
  12. Geoserver+postSQL+openlayer实现路径规划
  13. mysql世界国家省市地区的信息中英文
  14. 转化Foggy_Cityscapes数据集为voc和yolo格式用作目标检测
  15. KafKa 启动异常 : ERROR Failed to clean up log for __consumer_offsets-30 in dir 另一个程序正在使用此文件,进程无法访问
  16. 深入理解Java类加载器(2):线程上下文类加载器
  17. springboot2.0启动报错The APR based Apache Tomcat Native library which allows optimal performance in ...
  18. 如何高效的完成每日的任务?
  19. JAVA8的ConcurrentHashMap为什么放弃了分段锁,有什么问题吗,如果你来设计,你如何 设计。
  20. 网易免费企业邮箱Foxmail设置方法

热门文章

  1. Win10各版本区别
  2. 漫漫软考路-考后总结
  3. Java jdt 编辑_java – 如何使用JDT以编程方式重命名方法
  4. php编程模块英文缩写_工作中常用的英文单词缩写
  5. linux服务器 ip地址,查看linux服务器的IP地址
  6. Java异常 | JedisException: Could not get a resource from the pool
  7. 树莓派教程——树莓派连接并打开摄像头
  8. 扭蛋机html源码,微信小程序wxss制作扭蛋机
  9. 目光远大,不要被小许诺所牵绊,唯有自我提升是真理
  10. 全网功能最全的无水印短视频提取工具