js实现上下左右键盘控制div移动


Posted in Javascript onJanuary 16, 2020

本文实例为大家分享了js上下左右键盘控制div移动的具体代码,供大家参考,具体内容如下

描述:

div通过键盘事件上下左右实现div块的移动

效果: 

js实现上下左右键盘控制div移动

实现:

js:

var Method=(function () {
  return {
    EVENT_ID:"event_id",
    loadImage:function (arr) {
      var img=new Image();
      img.arr=arr;
      img.list=[];
      img.num=0;
//      如果DOM对象下的事件侦听没有被删除掉,将会常驻堆中
//      一旦触发了这个事件需要的条件,就会继续执行事件函数
      img.addEventListener("load",this.loadHandler);
      img.self=this;
      img.src=arr[img.num];
    },
    loadHandler:function (e) {
      this.list.push(this.cloneNode(false));
      this.num++;
      if(this.num>this.arr.length-1){
        this.removeEventListener("load",this.self.loadHandler);
        var evt=new Event(Method.EVENT_ID);
        evt.list=this.list;
        document.dispatchEvent(evt);
        return;
      }
      this.src=this.arr[this.num];
    },
    $c:function (type,parent,style) {
      var elem=document.createElement(type);
      if(parent) parent.appendChild(elem);
      for(var key in style){
        elem.style[key]=style[key];
      }
      return elem;
    },
    divColor: function () {
      var col="#";//这个字符串第一位为# 颜色的格式
      for(var i=0;i<6;i++){
        col+=parseInt(Math.random()*16).toString(16);//rondom*16后的随机值即为0-1*16==0-16;  toString(16)为转化为16进制
      }
      return col;//最后返回一个七位的值 格式即为#nnnnnn 颜色的格式
    },
    random:function (min,max) {
      max=Math.max(min,max);
      min=Math.min(min,max);
      return Math.floor(Math.random()*(max-min)+min);
    },
    dragElem:function (elem) {
      elem.addEventListener("mousedown",this.mouseDragHandler);
      elem.self=this;
    },
    removeDrag:function (elem) {
      elem.removeEventListener("mousedown",this.mouseDragHandler);
    },
    mouseDragHandler:function (e) {
      if(e.type==="mousedown"){
        e.stopPropagation();
        e.preventDefault();
        document.point={x:e.offsetX,y:e.offsetY};
        document.elem=this;
        this.addEventListener("mouseup",this.self.mouseDragHandler);
        document.addEventListener("mousemove",this.self.mouseDragHandler);
      }else if(e.type==="mousemove"){
        this.elem.style.left=e.x-this.point.x+"px";
        this.elem.style.top=e.y-this.point.y+"px";
      }else if(e.type==="mouseup"){
        this.removeEventListener("mouseup",this.self.mouseDragHandler);
        document.removeEventListener("mousemove",this.self.mouseDragHandler);
      }
    }
  }
})();

html:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="js/Method.js"></script>
</head>
<body>
<script>
  var div;
  var code=[];
  var speed=2;
  var bool=false;
  init();
  function init() {
    div=Method.$c("div",document.body,{
      width:"50px",
      height:"50px",
      backgroundColor:"red",
      position:"absolute",
      left:0,
      top:0
    });
    window.addEventListener("keydown",keyHandler);
    window.addEventListener("keyup",keyHandler);
    setInterval(animation,16);
  }
 
  function keyHandler(e) {
    if(e.type==="keydown" && (!bool || code.indexOf(e.keyCode)===-1)){
      bool=true;
      code.push(e.keyCode);
    }else if(e.type==="keyup"){
      bool=false;
      code.length=0;
    }
  }
 
  function animation() {
    if(!bool)return;
    for(var i=0;i<code.length;i++){
      switch (code[i]){
        case 37:
          div.style.left=div.offsetLeft-speed+"px";
          break;
        case 38:
          div.style.top=div.offsetTop-speed+"px";
          break;
        case 39:
          div.style.left=div.offsetLeft+speed+"px";
          break;
        case 40:
          div.style.top=div.offsetTop+speed+"px";
          break;
      }
    }
  }
</script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript下IE与Firefox下的差异兼容写法总结
Jun 18 Javascript
浏览器解析js生成的html出现样式问题的解决方法
Apr 16 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
Apr 23 Javascript
JavaScript禁止页面操作的示例代码
Dec 17 Javascript
javascript结合canvas实现图片旋转效果
May 03 Javascript
移动端js触摸事件详解
Sep 18 Javascript
JavaScript实现数值自动增加动画
Dec 28 Javascript
Vue 中的受控与非受控组件的实现
Dec 17 Javascript
vue如何限制只能输入正负数及小数
Jul 04 Javascript
Vue中使用matomo进行访问流量统计的实现
Nov 05 Javascript
使用Canvas绘制一个游戏人物属性图
Mar 25 Javascript
ant design charts 获取后端接口数据展示
May 25 Javascript
vue-cli3 取消eslint校验代码的解决办法
Jan 16 #Javascript
jQuery实现数字华容道小游戏(实例代码)
Jan 16 #jQuery
js实现点击生成随机div
Jan 16 #Javascript
关于vue3.0中的this.$router.replace({ path: '/'})刷新无效果问题
Jan 16 #Javascript
JS实现可视化音频效果的实例代码
Jan 16 #Javascript
js实现div色块碰撞
Jan 16 #Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
Jan 16 #Javascript
You might like
php获取某个目录大小的代码
2008/09/10 PHP
php查询mssql出现乱码的解决方法
2014/12/29 PHP
php metaphone()函数的定义和用法
2016/05/15 PHP
PHP简单创建压缩图的方法
2016/08/24 PHP
Javascript基础教程之变量
2015/01/18 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
jquery滚动条插件(可以自定义)
2016/12/11 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
js实现短信发送倒计时功能(正则验证)
2017/02/10 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
React操作真实DOM实现动态吸底部的示例
2017/10/23 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
2018/09/18 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
vue打开新窗口并实现传参的图文实例
2021/03/04 Vue.js
pycharm 使用心得(一)安装和首次使用
2014/06/05 Python
Python基于百度云文字识别API
2018/12/13 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
2018/12/19 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
基于pygame实现童年掌机打砖块游戏
2020/02/25 Python
Lacoste(法国鳄鱼)加拿大官网:以标志性的POLO衫而闻名
2019/05/15 全球购物
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
人力资源管理专业应届生求职信
2013/09/28 职场文书
后勤岗位职责
2013/11/26 职场文书
升职自荐信范文
2015/03/27 职场文书
写给纪委的违纪检讨书
2015/05/05 职场文书
民事诉讼答辩状范文
2015/05/21 职场文书
Spring实现内置监听器
2021/07/09 Java/Android
JavaScript文档对象模型DOM
2021/11/20 Javascript
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers