js实现键盘操作对div的移动或改变——-Day43

js实现键盘操作对div的移动或改变——-Day43

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

《爸爸去哪儿》的第二季据说要开播了额,有点小期待,不知道这一季的小宝贝们会有多萌,还会甜到心底吧,
哈哈,还记得那个风一样的女子呢,不知道她如今怎样了。

言归正传,继续今天的记录,实际上在刚開始的时候,我以为能够非常快的实现这个功能,毕竟昨天记录了获取键盘按键的值的事件,有了值,无非就是针对不同值做不同的操作嘛,并且之前以前在写贪吃蛇时也用到过。结果一捯饬,又是好久的一段时间,所以感觉有必要记录下的,一方面确有可取之处,还有一方面也对自己的提醒,刚刚实现过的功能转头又是陌生人了,总的来说,算是温故而知新吧。

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

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

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

*—获取键盘的操作

*—依据键盘的不同操作,给出不同响应

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

先是html部分

    <div style="width: 50px;height: 50px;background-color: cyan;position: absolute;" id="showZone">

然后记录下javascript的实际操作

window.onload=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.onkeydown=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.onkeyup=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.onkeydown=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 && (<span style="font-family: Arial, Helvetica, sans-serif;">obj</span><span style="font-family: Arial, Helvetica, sans-serif;">.style.left = 0);</span>
		//防止顶部溢出
		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")
	}

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

好了,今天就到这里吧,明天还要去加班,不知道还会不会下雨。来个暖心的,他们俩事实上我都喜欢

js实现键盘操作对div的移动或改变-------Day43

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118883.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dump 分析工具_一键全扒网站工具

    dump 分析工具_一键全扒网站工具ProcDumpProcDump是一个命令行实用程序,其主要目的是监视应用程序的CPU峰值,并在峰值期间生成崩溃转储,管理员或开发人员可以使用它来确定峰值的原因。ProcDump还包括挂起窗口监视(使用与Windows和任务管理器使用的窗口挂起相同的定义)、未处理的异常监视,并且可以根据系统性能计数器的值生成转储。它还可以作为一个通用的进程转储实用程序,您可以将其嵌入到其他脚本中。官网DebugDiag调试诊断工具(DebugDiag)旨在帮助解决任何用户模式进程中的挂起、性能缓慢、内存泄漏

    2022年10月2日
    3
  • pycharm双击打不开,没有反应,下列方法亲测有用!

    pycharm双击打不开,没有反应,下列方法亲测有用!关于这个问题,刚好我朋友安装的pycharm出现了同样地问题,激活成功教程安装一段时间后就突然打不开了,网上有许多的解决办法,我都试了一遍还是无果,后来自己发现了问题所在,首先给大家科普一下网上的方法,再放上我的,请大家耐心读完。亲测有效!!!第一种:1.打开C:\Windows\System32;以管理员身份运行cmd.exe;2.在打开的cmd窗口中,输入netshwinsockreset,按回车键;3.重启电脑;4.重启后,双击pycharm图标就能打开了!第二种:在Pycha

    2022年8月25日
    7
  • map用value值找key的两种方法

    map用value值找key的两种方法map用value值找key的两种方法Map中是一个key有且只有一个value.但是一个value可以对应多个key值.只用用特殊方法才能用value值来找key,以下就是用value值找key的两种方法publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstub…

    2022年7月23日
    12
  • QListWidget的使用

    QListWidget的使用QListWidgetQListWidget类提供了一个基于item的列表小部件。QListWidget是一个方便的类,它提供了类似于QlistView所具有的列表视图,但是具有增加和删除的功能。QListWidget使用内部模型来管理列表中的每个QListWidgetItem。想要有更灵活的列表视图,请使用具有标准模型的QListView类。QlistWidget有两种方法追加数据,一种

    2022年5月3日
    77
  • FAST_ICA MTALAB工具包下载/ICA分析/独立成分分析MATLAB安装包/ICA toolbox

    FAST_ICA MTALAB工具包下载/ICA分析/独立成分分析MATLAB安装包/ICA toolbox很多小伙伴在后台问我,MATLAB怎么进行独立成分分析(ICA)。一般来讲,ICA操作可以说是EEG里面十分总要的操作。EEGLAB这方面做的非常好,只需要RunICA就能很快的进行EEG的分析,但同样也有其弊端(懂得都懂)。这里,我提供了matlab中FAST_ICA的安装包,由于年代较较远,因此,支持的MATLAB版本可能比较老。而且网址必须外网连接,如果有直接想要安装包的小伙伴可直接关注我的公众号,回复FAST_ICA,便可免费领取。打个小广告,粉爷公众号大厂面经,刷题指南,脑…

    2022年5月13日
    40
  • Java程序设计(高级及专题)- 类的加载和反射[通俗易懂]

    Java程序设计(高级及专题)- 类的加载和反射[通俗易懂]Java程序设计(高级及专题)- 类的加载和反射

    2022年4月22日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号