昨天记录了获取键盘按键的值的事件,有了值,无非就是针对不同值做不同的操作嘛,而且之前曾经在写贪吃蛇时也用到过。结果一捯饬,又是好久的一段时间,所以感觉有必要记录下的,一方面确有可取之处,另一方面也对自己的提醒,刚刚实现过的功能转头又是陌生人了,总的来说,算是温故而知新吧。

这样我们先来分析,要实现键盘操作实现div的移动大概的原理吧:

*---要实现div的移动,首先最关键的一点:获取div对象

*---postion:absolute将div完全从文档流中拖出啊,这个地方漏掉了,回去看了贪吃蛇才发现的,真晕

*---获取键盘的操作

*---根据键盘的不同操作,给出不同响应

这就是我想起的大概需要注意的地方,还是先来看代码:

先是html部分

然后记录下javascript的实际操作

window.οnlοad=function(){

var obj=document.getElementById("showZone");//获取到对象了吧,这最简单

var a=10;

var toLeft=toRight=toTop=toBottom=false;//定义几个boolean型变量,是为了后面方向操作用的,看是四个方向吧

var move=setInterval(function(){//这个地方的move定义实际上毫无意义,只是为了让这个方法更明显一点

if(toLeft){

obj.style.left=parseInt(obj.offsetLeft-a)+"px";//感觉最好还是写上parseInt,另外,因为offsetLeft是不含px的,所以不要忘记“px”

}

if(toRight){

obj.style.left=obj.offsetLeft+a+"px";//不写parseInt也可以,难道是因为javascript的执行顺序?执行+,再执行+,再执行=?实现结果来看是

}

if(toTop){

obj.style.top=obj.offsetTop-a+"px";

}

if(toBottom){

obj.style.top=obj.offsetTop+a+"px";

}

},300); //这个经典的定时器啊,循环执行的大神器,还记得setInterval和settimeout的区别么

document.οnkeydοwn=function(event){

var event=event||window.event;

switch(event.keyCode){ //哈哈,获取到键盘操作了吧

case 37:toLeft=true;break;//改变变量,继续执行最初的循环,不让你停不能停啊

case 38:toTop=true;break;

case 39:toRight=true;break;

case 40:toBottom=true;break;

}

};

document.οnkeyup=function(event){

switch(event.keyCode){

case 37:toLeft=false;break;//给我变回来,让你停就别动了

case 38:toTop=false;break;

case 39:toRight=false;break;

case 40:toBottom=false;break;

}

};

};

就这样,我们完成了原理分析中的需求,同时也就可以通过上、下、左、右按键来实现div的上下左右移动了,接下来,再来记录下敏感地方吧。

1、div需是absolute的,为这个纠结了半天实在不值得,于是查询了下,了解了一个概念“文档流”,

文档流,通常说是元素从上而下,自左向右进行排列,那么这个元素就是节点元素,庞大的dom啊。还是先来说说其它解释吧,我比较喜欢的是这样来阐述:文档+流,文档顾名思义就是说网页文档,而流则是输出方式,还有的解释说是浏览器的解析方式,这个貌似更形象一点,正常的文档流,就好像是一个平面,而一个元素你把它放在哪了,它就在哪,而浮动、固定定位和相对定位,这里分析absolute,就是重新生成了一个流,脱离了它的父层标签,就好像之前z-index为0,而这个的z-index就上了它的上面,凭空悬浮在它上面的,可以通过left、top来肆意的挪动它。

大概意思能够明白了,但是感觉有些地方还是没法有效的用语言来表述,而且有些点略微有些模糊,相信随着经验的累积,我能理解的更深一些。

2、keyCode这里的大写,onkeyup和onkeydown这里的小写,在这个地方也是测试了下才发现的问题,对于javascript,每个小地方都是大问题啊;

3、switch里的break;这个java里面就常碰到,就不多说了

大概的问题就是以上几点,而你还记得注释的快捷键么,还记得其他快捷键么,这就出现了一个问题,上面做出响应的我们只是针对单个按键,如果我们想用一些快捷键呢,该怎么设置呢?

先来看下代码:

document.οnkeydοwn=function(event){//还是跟上面差不多的代码吧,你看出不同在哪里了么

var event=event||window.event;

var bctrl=event.ctrlKey;//在这里

switch(event.keyCode){

case 37:toLeft=true;break;

case 38:if(bctrl){obj.style.background="yellow";break;}toTop=true;break;//在这里,

case 39:toRight=true;break;

case 40:toBottom=true;break;

}

};

这里碰到了event对象的另一个属性,是在keyCode之外的另一个,ctrlKey,还是大写哦,它的主要功能是检查ctrl按键的状态,其实这样的还有两个:

altKey和shiftKey,分别是对alt按键和shift按键状态的检查,这样知道怎么设个快捷键了吧。

其实如果是我自己写的话,可能这样我就已经很满足了,但是在翻阅搜索的时候,总能碰到心思缜密的朋友

附上代码,你知道是要做什么么:

function limit(){

var doc = [document.documentElement.clientWidth, document.documentElement.clientHeight]

//防止左侧溢出

obj.offsetLeft <=0 && (obj.style.left = 0);

//防止顶部溢出

obj.offsetTop <=0 && (obj.style.top = 0);

//防止右侧溢出

doc[0] - obj.offsetLeft - obj.offsetWidth <= 0 && (obj.style.left = doc[0] - obj.offsetWidth + "px");

//防止底部溢出

doc[1] - obj.offsetTop - obj.offsetHeight <= 0 && (obj.style.top = doc[1] - obj.offsetHeight + "px")

}

这里我附上的是网上的代码在实现防止溢出的同时,我还想赞一下这个写法,比我写的果断的要短了许多许多,以后也要试着写短点。

java键盘控制英雄左右移动_js实现键盘操作实现div的移动或改变的原理及代码相关推荐

  1. js小学生图区_js实现图片区域可点击大小随意改变(适用移动端)代码实例

    实现图片区域可点击,实际上使用map是可以的,但是适配效果并不好,图片只能是固定大小的值,而且点都被写死了. 在这里,我使用的js基于canvas写的一个小工具.可以圈出你需要点击的部分,然后生成一串 ...

  2. html5 javascript 事件练习3键盘控制练习

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...

  3. 小车yolo机械臂(一)ros下gazebo搭建小车(可键盘控制)安装摄像头仿真 加载yolo检测识别标记物体

    ros下gazebo搭建小车(可键盘控制)安装摄像头仿真 加载yolo检测识别标记物体 目录总览 一,项目代码下载 二,ros下实现darknet_ros(YOLO V3)检测 2.1 编译整个项目 ...

  4. 控制程序中加入键盘控制

      又是哭瞎的调试过程,不是码农,不做很深入地追究,只想实现想要的效果,随便记录下.期待有更好的想法. 设计目标:方便小车调试,能用键盘控制小车急停与移动.   刚开始是为了调试的时候防止小车出现不可 ...

  5. Java 利用EasyPoi做Excel模板的导入导出操作

    Java 利用EasyPoi做Excel模板的导入导出操作 项目背景 加入pom依赖 项目Excel模板图 代码实现 首先是实体类定义 Excel 实现导入 Excel的导出 结束语 项目背景 作为一 ...

  6. java 怎么让图片运动,小编给你传授java怎么实现键盘控制图片移动

    电脑现已成为我们工作.生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到java怎么实现键盘控制图片移动的问题,如果我们遇到了java怎么实现键盘控制图片移动的情况,该怎么处理怎么才能解决ja ...

  7. java 图片 运动_怎么在GUI中用键盘控制图片运动?java问题?

    怎么在GUI中用键盘控制图片运动?java问题? 关注:174  答案:3  mip版 解决时间 2021-01-17 01:03 提问者落叶.牵绊着思念 2021-01-16 09:43 怎么在GU ...

  8. dota是java中的_用java开发dota英雄最华丽的技能(实例讲解)

    爱java 爱dota,突发奇想想用java开发dota操作最华丽的英雄之一的卡尔的技能,因为本人系小白,代码不足的地方还请包涵,有同样爱好的同学欢迎一起研究学习. 先把我的代码呈上 import j ...

  9. Chapter4 Java流程控制之选择结构

    Lecture1 流程控制概述 流程控制语句种类:顺序.选择.循环:选择结构--if结构.if-else结构.多重if结构.嵌套if结构.switch结构:循环结构--while循环.do-whiil ...

最新文章

  1. java后台访问接口
  2. 字节流练习:图片复制
  3. Intent 匹配规则
  4. ios 轻扫手势_轻扫即可快速删除iOS计算器中的数字
  5. python 持续集成 教程_jenkins+python自动化测试持续集成教程
  6. 求助了,园子里的高手们,软件运行报401错误
  7. RSA算法原理简介,非对称加密,公开密钥算法(易懂篇)
  8. python io_Python 的 io.StringIO()
  9. 硬件电路基础知识(30)---RS232、RS485、RS422、RJ45接口的区别
  10. VM : 虚拟机中Linux磁盘的挂载与卸载
  11. SQL Server:专业的DateTime范围
  12. java的IO操作之--RandomAccessFile
  13. android把代码打包成sdk,基于Library去开发android SDK——sdk打包(示例代码)
  14. mybatis的selectOne分享
  15. 全美“50大好差事” 软件工程师排名第一
  16. 【CP2K教程(三)】元动力学 (Metadynamics)与增强采样
  17. Windows10 微软拼音 翻页按键 设置
  18. 一款专业写公式的软件——MathType
  19. Hive-编写UDF函数(详细教程~~~)
  20. “燕云十六将”之橙子刘龙静

热门文章

  1. 触发器中的 临时表 old 与 new
  2. mysql show sleep_mysq解决sleep进程过多的办法
  3. 解决kaggle邮箱验证不能confirm的问题
  4. nodejs连接mysql数据库,报错Client does not support authentication protocol requested by server的解决方法
  5. VueTreeselect出现unknown解决方法
  6. 【Mysql】存储emoji表情报错(Incorrect string value: ‘\xF0\x9F\x98\x82\xF0\x9F...‘)的解决方案
  7. c语言中用于程序化结构设计的三种结构是,c语言中用于结构化程序设计的3种基本结构是...
  8. 登录 java_登录Java
  9. android 5.0 字体,QC8916 修改系统默认字体(Android 5.0)
  10. python离线安装flask_离线环境下安装flask