Js键盘事件实现元素上下左右动态移动(内含源码)

news/2024/7/10 23:19:24 标签: javascript, 计算机外设, 开发语言, es6, 前端

本文主要讲解如何利用JavaScript控制键盘的上下左右键同时利用监听键盘事件来实现对一个元素的控制。键盘控制,本质上是监听到用户对键盘使用,并在监听后实现一些方法使得元素可以跟随键盘进行移动。

如何监听键盘事件

Js监听键盘有以下几种方法:

  • onkeydown:某个键盘按键被按下
  • onkeypress:某个键盘按键被按下并且松开。
  • onkeyup:某个键盘按键被松开。
    我们想要控制键盘上下左右键,主要用到的就是onkeydown这个关键词。它的语法格式为:document.onkeydown(),它有一个自带参数event,里面装着可能当下键盘按键中的一些属性值,当中有一个类似身份证号的属性叫keyCode,那么通过调用这个keyCode属性,即可知道当前按键的keyCode是什么,从而可以在监听事件中对某个元素进行绑定并且实现上下左右的功能。
    举例:
javascript">document.onkeydown=function(e){
	console.log(e.keyCode)
}

上述代码则是实现了一个键盘监听事件,这个事件可以判断当前页面中哪些键盘按键被按下,且打印出被按下的按键的唯一值,如按空格键打印32,按d键打印68等等。从而我们知道上下左右键分别是38、40、37、39.接下来就是动态移动元素。

利用onkeydown实现动态移动元素

解决路线:

  1. 定义id为demo的元素及其基本样式
  2. CSS设置position:absolute;并设置初始位置。
  3. 定义三个变量,分别存储id为demo的元素的style、左右位置、上下位置
  4. 使用键盘监听事件onkeydown,并调用e.keyCode判断是上(38)、下(40)、左(37)、右(38)。
  5. 如果是左,则对左右变量做–操作(我设置的position设置的是left,left值越大离左侧越远),然后赋值给demo.left,利用字符串拼接左右位置变量+‘px’,如果是右则做++操作。
  6. 如果是上,则对上下变量做–操作(我设置的position设置的是top,top值越大离上部越远),然后赋值给demo.top,如果是下,则做++操作。
    具体源码:
javascript"><!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<style>
		* {
			padding: 0;
			margin: 0;
		}

		body {
			position: relative;
		}

		.demo {
			width: 50px;
			height: 50px;
			border: 1px solid gray;
			background-color: antiquewhite;
			border-radius: 50%;
			position: absolute;
			left: 0;
			top: 0;
		}
	</style>
	<body>
		<div class="demo" id="demo">

		</div>
		<script>
			let demo = document.getElementById('demo').style
			let left = 0;
			let top1 = 0;
			document.onkeydown = function(e) {
				// console.log(top1)
				switch (e.keyCode) {
					case 38:
						top1--;
						demo.top = top1 + 'px';
						break;
					case 40:
						top1++;
						demo.top = top1 + 'px';
						break;
					case 37:
						left--;
						demo.left = left + 'px';
						break;
					case 39:
						left++;
						demo.left = left + 'px';
						break;
				}
			}
		</script>
	</body>
</html>

注:除了position外,还可以通过自己调用当前元素在页面中位置,比如想要获取当前元素位置:可以调用clientLeft、clientTop等属性实现。


http://www.niftyadmin.cn/n/5193204.html

相关文章

【vue实战项目】通用管理系统:首页

前言 本文为博主的vue实战小项目系列中的第三篇&#xff0c;很适合后端或者才入门的小伙伴看&#xff0c;一个前端项目从0到1的保姆级教学。前面的内容&#xff1a; 【vue实战项目】通用管理系统&#xff1a;登录页-CSDN博客 【vue实战项目】通用管理系统&#xff1a;封装to…

Azure Machine Learning - Azure AI 搜索中的矢量搜索

矢量搜索是一种信息检索方法&#xff0c;它使用内容的数字表示形式来执行搜索方案。 由于内容是数字而不是纯文本&#xff0c;因此搜索引擎会匹配与查询最相似的矢量&#xff0c;而不需要匹配确切的字词。本文简要介绍了 Azure AI 搜索中的矢量支持。 其中还解释了与其他 Azure…

【AI视野·今日NLP 自然语言处理论文速览 第六十四期】Fri, 27 Oct 2023

AI视野今日CS.NLP 自然语言处理论文速览 Fri, 27 Oct 2023 Totally 80 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers torchdistill Meets Hugging Face Libraries for Reproducible, Coding-Free Deep Learning Studies: A Case …

ETCD中MVCC的运用

MVCC 并发与锁从来都是密不可分的两个东西&#xff0c;在一个请求的过程中&#xff0c;难免会操作各种各样的资源&#xff0c;那么在多个请求同时到来的时候&#xff0c;各个请求处理资源是无序的&#xff0c;肯定就会造成干扰&#xff0c;那么普遍的做法就是加锁。 但是&#…

C++函数调用运算符重载

函数调用运算符重载&#xff08;&#xff09;也可以重载由于重载后使用的方式非常像函数的调用&#xff0c;因此称为仿函数仿函数没有固定写法&#xff0c;非常灵活 #include<iostream> using namespace std;class Myprint { public:void operator()(string text){cout …

【踩坑笔记】国科GK7202V300芯片开发常见问题解决办法

国科Linux芯片开发常见问题&解决办法 0.读前须知 不管什么时候&#xff0c;下载程序还是啥&#xff0c;一定要检查路径&#xff01;&#xff01;&#xff01;别问我为什么&#xff0c;呜呜呜~ tips&#xff1a;该芯片是仿造海思的产品&#xff0c;所以&#xff0c;有些不…

解决k8s node节点报错: Failed to watch *v1.Secret: unknown

现象&#xff1a; 这个现象是发生在k8s集群证书过期&#xff0c;重新续签证书以后。 记得master节点的/etc/kubernetes/kubelet.conf文件已经复制到node节点了。 但是为什么还是报这个错&#xff0c;然后运行证书检查命令看一下&#xff1a; 看样子是差/etc/kubernetes/pki/…

【Linux网络】详解使用http和ftp搭建yum仓库,以及yum网络源优化

目录 一、回顾yum的原理 1.1yum简介 yum安装的底层原理&#xff1a; yum的好处&#xff1a; 二、学习yum的配置文件及命令 1、yum的配置文件 2、yum的相关命令详解 3、yum的命令相关案例 三、搭建yum仓库的方式 1、本地yum仓库建立 2、通过http搭建内网的yum仓库 3、…