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 相关文章推荐
prettify 代码高亮着色器google出品
Dec 28 Javascript
js动态创建标签示例代码
Jun 09 Javascript
jQuery滚动加载图片实现原理
Dec 14 Javascript
尝试动手制作javascript放大镜效果
Dec 25 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
Jun 16 Javascript
微信小程序 网络API Websocket详解
Nov 09 Javascript
jQuery中的deferred对象和extend方法详解
May 08 jQuery
使用 Vue.js 仿百度搜索框的实例代码
May 09 Javascript
jQuery实现简单的下拉菜单导航功能示例
Dec 07 jQuery
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
May 15 Javascript
Javascript实现动态时钟效果
Nov 17 Javascript
JavaScript使用setTimeout实现倒计时效果
Feb 19 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
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
2010/03/15 PHP
PHP 之Section与Cookie使用总结
2012/09/14 PHP
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
php判断手机访问还是电脑访问示例分享
2014/01/20 PHP
php中\r \r\n \t的区别示例介绍
2014/02/08 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
Laravel相关的一些故障解决
2020/08/19 PHP
Javascript 作用域使用说明
2009/08/13 Javascript
关于用Jquery的height()、width()计算动态插入的IMG标签的宽高的问题
2010/12/08 Javascript
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
javascript和HTML5利用canvas构建猜牌游戏实现算法
2013/07/17 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
2014/05/05 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
2015/04/17 Javascript
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
JS实现前端缓存的方法
2017/09/21 Javascript
使用node搭建自动发图文微博机器人的方法
2019/03/22 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
Python实现多进程的四种方式
2019/02/22 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
2020/03/07 Python
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
2013/01/09 HTML / CSS
什么是接口(Interface)?
2013/02/01 面试题
为什么使用接口?
2014/08/13 面试题
面向对象编程是如何提高软件开发水平的
2014/05/06 面试题
高中自我评价分享
2013/12/05 职场文书
大学生个人自荐信
2014/02/24 职场文书
个人委托书
2014/07/31 职场文书
思想作风建设心得体会
2014/10/22 职场文书
现货白银电话营销话术
2015/05/29 职场文书
三国演义读书笔记
2015/06/25 职场文书
2016年习主席讲话学习心得体会
2016/01/20 职场文书
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python
工厂无线对讲系统解决方案
2022/02/18 无线电