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 相关文章推荐
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
Mar 04 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
Jan 21 Javascript
javaScript 页面自动加载事件详解
Feb 10 Javascript
函数式 JavaScript(一)简介
Jul 07 Javascript
JavaScript模块规范之AMD规范和CMD规范
Oct 27 Javascript
你有必要知道的25个JavaScript面试题
Dec 29 Javascript
JavaScript函数参数的传递方式详解
Mar 06 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
Jul 13 Javascript
关于Vue在ie10下空白页的debug小结
May 02 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
Sep 27 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
May 09 Javascript
cypress测试本地web应用
Jun 01 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+mysql开源XNA 聚合程序发布 下载
2007/07/13 PHP
PHP 文件编程综合案例-文件上传的实现
2013/07/03 PHP
一个PHP二维数组排序的函数分享
2014/01/17 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
thinkPHP多语言切换设置方法详解
2016/11/11 PHP
laravel实现简单用户权限的示例代码
2019/05/28 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
jQuery实现新消息闪烁标题提示的方法
2015/03/11 Javascript
jQuery中Nicescroll滚动条插件的用法
2016/11/10 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
详谈构造函数加括号与不加括号的区别
2017/10/26 Javascript
JavaScript canvas实现围绕旋转动画
2017/11/18 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
详解vue中localStorage的使用方法
2018/11/22 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
解决cordova+vue 项目打包成APK应用遇到的问题
2019/05/10 Javascript
vue分页器组件编写方法详解
2019/06/28 Javascript
在vue项目中使用sass语法问题
2019/07/18 Javascript
js+cavans实现图片滑块验证
2020/09/29 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
详解Python中的__init__和__new__
2014/03/12 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
python3获取文件中url内容并下载代码实例
2019/12/27 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
keras实现基于孪生网络的图片相似度计算方式
2020/06/11 Python
html5中audio支持音频格式的解决方法
2018/08/24 HTML / CSS
2014年高一班主任工作总结
2014/12/05 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
2015-2016年小学教导工作总结
2015/07/21 职场文书
python 模块重载的五种方法
2021/04/24 Python