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 相关文章推荐
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
Apr 29 Javascript
javascript:history.go()和History.back()的区别及应用
Nov 25 Javascript
鼠标焦点离开文本框时验证的js代码
Jul 19 Javascript
瀑布流布局代码一例
Apr 11 Javascript
用JavaScript实现页面重定向功能的教程
Jun 04 Javascript
JavaScript进阶练习及简单实例分析
Jun 03 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
Oct 28 Javascript
vue使用Axios做ajax请求详解
Jun 07 Javascript
vue实现图书管理demo详解
Oct 17 Javascript
React Native 使用Fetch发送网络请求的示例代码
Dec 02 Javascript
layui之select的option叠加问题的解决方法
Mar 08 Javascript
从表单校验看JavaScript策略模式的使用详解
Oct 17 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
欧美媒体选出10年前最流行的17部动画
2017/01/18 日漫
一个改进的UBB类
2006/10/09 PHP
php检测图片木马多进制编程实践
2013/04/11 PHP
对淘宝URL中ID提取的PHP代码
2013/09/01 PHP
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
2013/10/15 Javascript
一个不错的仿携程自定义数据下拉选择select
2014/09/01 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
2015/11/05 Javascript
JS实现兼容性较好的随屏滚动效果
2015/11/09 Javascript
jQuery定义插件的方法
2015/12/18 Javascript
js不间断滚动的简单实现
2016/06/03 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
2018/09/03 Javascript
node后端服务保活的实现
2019/11/10 Javascript
javascript实现切割轮播效果
2019/11/28 Javascript
JavaScript实现拖动对话框效果的实现代码
2020/10/12 Javascript
ant design vue中表格指定格式渲染方式
2020/10/28 Javascript
详解nginx配置vue h5 history去除#号
2020/11/09 Javascript
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
2019/09/06 Python
Pycharm 字体大小调整设置的方法实现
2019/09/27 Python
wxpython绘制音频效果
2019/11/18 Python
python with (as)语句实例详解
2020/02/04 Python
Elasticsearch py客户端库安装及使用方法解析
2020/09/14 Python
h5封装下拉刷新
2020/08/25 HTML / CSS
以工厂直接定价的传奇性能:Ben Hogan Golf
2019/01/04 全球购物
美国婴儿和儿童服装购物网站:PatPat
2020/10/01 全球购物
《毛主席在花山》教学反思
2014/04/20 职场文书
绿色出行口号
2014/06/18 职场文书
云台山导游词
2015/02/03 职场文书
会计主管岗位职责
2015/04/02 职场文书
雷锋观后感
2015/06/10 职场文书
小学教师读书笔记
2015/07/01 职场文书
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python
python缺失值填充方法示例代码
2022/12/24 Python