js实现div色块碰撞


Posted in Javascript onJanuary 16, 2020

本文实例为大家分享了js实现div色块碰撞的具体代码,供大家参考,具体内容如下

描述:

生成两个div色块,一个可以拖动,一个不可以,用拖动的去撞击不能动的,会将这个色块随机撞到一个位置,改变颜色。

效果:

js实现div色块碰撞

js实现div色块碰撞

实现:

js文件:

function DragObj(_obj) {
 this.obj=_obj;
 this.point={};
 this.moveBool=false;
 this.obj.self=this;
 this.obj.addEventListener("mousedown",this.mouseHandler);
 this.obj.addEventListener("mouseup",this.mouseHandler);
 this.obj.addEventListener("mousemove",this.mouseHandler);
 this.obj.addEventListener("mouseleave",this.mouseHandler);
}
DragObj.prototype={
 mouseHandler:function (e) {
  if(!e){
   e=window.event;
  }
  if(e.type=="mousedown"){
   this.self.moveBool=true;
   this.self.point.x=e.offsetX;
   this.self.point.y=e.offsetY;
  }else if(e.type=="mousemove"){
   if(!this.self.moveBool) return;
   this.self.obj.style.left=(e.clientX-this.self.point.x)+"px"
   this.self.obj.style.top=(e.clientY-this.self.point.y)+"px"
  }else if(e.type=="mouseup" || e.type=="mouseleave"){
   this.self.moveBool=false;
  }
 },
 removeEvent:function () {
 
  this.obj.removeEventListener("mousedown",this.mouseHandler);
  this.obj.removeEventListener("mouseup",this.mouseHandler);
  this.obj.removeEventListener("mousemove",this.mouseHandler);
  this.obj.removeEventListener("mouseleave",this.mouseHandler);
 
  this.obj=null;
  this.point=null;
 }
};
var HitTest=HitTest || (function () {
 return {
  to:function (display0,display1) {
   var rect=display0.getBoundingClientRect();
   var rect1=display1.getBoundingClientRect();
   if(rect.left>=rect1.left && 
rect.left<=rect1.left+rect1.width
 && rect.top>=rect1.top && rect.top<=rect1.top+rect1.height){
    return true;
   }
   if(rect.left+rect.width>=rect1.left && rect.left+rect.width<=rect1.left+rect1.width && rect.top>=rect1.top
 && rect.top<=rect1.top+rect1.height){
    return true;
   }
   if(rect.left>=rect1.left && 
rect.left<=rect1.left+rect1.width 
&& rect.top+rect.height>=rect1.top && 
rect.top+rect.height<=rect1.top+rect1.height){
    return true;
   }
   if(rect.left+rect.width>=rect1.left && rect.left+rect.width<=rect1.left+rect1.width && 
rect.top+rect.height>=rect1.top 
&& rect.top+rect.height<=rect1.top+rect1.height){
    return true;
   }
  }
 }
})();
var LoadImg=LoadImg || (function () {
 return {
  load:function (listSrc,callBack) {
   this.callBack=callBack;
   this.listSrc=listSrc;
   this.num=0;
   this.imgArr=[];
   var img=new Image();
   img.addEventListener("load",this.loadHandler.bind(this));
   img.src=listSrc[0];
  },
  loadHandler:function (e) {
   if(!e){
    e=window.event;
   }
   e.currentTarget.removeEventListener
("load",this.loadHandler.bind(this));
   this.imgArr[this.num]=e.currentTarget;
   if(this.num==this.listSrc.length-1){
    this.callBack(this.imgArr)
    return;
   }
   var img=new Image();
   this.num++;
   img.addEventListener("load",this.loadHandler.bind(this));
   img.src=this.listSrc[this.num];
  }
 }
})();

html:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <style>
  div{
   width: 200px;
   height: 200px;
   position: absolute;
  }
 </style>
 <script src="js/dragObj.js"></script>
</head>
<body>
<div id="div0"></div>
<div id="div1"></div>
<script>
 window.addEventListener("mousedown",mousedownHandler);//生成一个
 function mousedownHandler(e) {
  if(!e){
   e=window.event;
  }
  e.preventDefault();
 }
 var div0=document.getElementById("div0");
 var div1=document.getElementById("div1");
 div0.style.backgroundColor=randomColor();
 div1.style.backgroundColor=randomColor();
 
 randomPosition(div0)
 randomPosition(div1)
 var drag0=new DragObj(div0);
 div0.addEventListener("mousemove",mouseMoveHandler)
 function randomColor() {
  var str="#";
  for(var i=0;i<3;i++){
   var color=Math.floor(Math.random()*256).toString(16);
   if(color.length<2){
    color="0"+color;
   }
   str+=color;
  }
  return str;
 }
 
 function randomPosition(div) {
  div.style.left=Math.random()*(document.documentElement.clientWidth-50)+"px";
  div.style.top=Math.random()*(document.documentElement.clientHeight-50)+"px";
 
 
 }
 
 function mouseMoveHandler(e) {
  if(!e){
   e=window.event;
  }
  if(!drag0.moveBool) return;
 
  if(HitTest.to(div0,div1)){
   randomPosition(div1);
   div1.style.backgroundColor=randomColor();
 
  }
 }
</script>
 
</body>
</html>

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

Javascript 相关文章推荐
不要小看注释掉的JS 引起的安全问题
Dec 27 Javascript
删除javascript中注释语句的正则表达式
Jun 11 Javascript
Node.js中使用Buffer编码、解码二进制数据详解
Aug 16 Javascript
jQuery中index()的用法分析
Sep 05 Javascript
Jquery Ajax Error 调试错误的技巧
Nov 20 Javascript
javascript实现九宫格相加数值相等
May 28 Javascript
jquery获取input type=text中的值的各种方式(总结)
Dec 02 Javascript
Jquery根据浏览器窗口改变调整大小的方法
Feb 07 Javascript
vue组件如何被其他项目引用
Apr 13 Javascript
使用原生js写ajax实例(推荐)
May 31 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
Jul 17 Javascript
Angular中使用better-scroll插件的方法
Mar 27 Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
Jan 16 #Javascript
vue列表数据发生变化指令没有更新问题及解决方法
Jan 16 #Javascript
使用Karma做vue组件单元测试的实现
Jan 16 #Javascript
js实现div色块拖动录制
Jan 16 #Javascript
微信小程序实现二维码签到考勤系统
Jan 16 #Javascript
解决vue+ element ui 表单验证有值但验证失败问题
Jan 16 #Javascript
JavaScript实现简单的计算器
Jan 16 #Javascript
You might like
php中static静态变量的使用方法详解
2010/06/04 PHP
php中call_user_func函数使用注意事项
2014/11/21 PHP
简单谈谈php中ob_flush和flush的区别
2014/11/27 PHP
PHP使用Pear发送邮件(Windows环境)
2016/01/05 PHP
Zend Framework缓存Cache用法简单实例
2016/03/19 PHP
PHP 断点续传实例详解
2017/11/11 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
2021/03/04 PHP
简明json介绍
2008/09/28 Javascript
如何使用Javascript正则表达式来格式化XML内容
2013/07/04 Javascript
js简单实现删除记录时的提示效果
2013/12/05 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
2016/04/18 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
Bootstrap实现弹性搜索框
2016/07/11 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
如何在微信小程序里面退出小程序的方法
2019/04/28 Javascript
JS为什么说async/await是generator的语法糖详解
2019/07/11 Javascript
python监控网卡流量并使用graphite绘图的示例
2014/04/27 Python
python3学习笔记之多进程分布式小例子
2018/02/13 Python
PyQt5实现画布小程序
2020/05/30 Python
Python如何定义有默认参数的函数
2020/08/10 Python
Spartoo荷兰:鞋子、包包和服装
2018/07/12 全球购物
俄罗斯电子产品在线商店:UltraTrade
2020/01/30 全球购物
毕业求职自荐信格式是什么
2013/11/19 职场文书
偷看我的初中毕业鉴定
2014/01/29 职场文书
交通安全教育制度
2014/02/02 职场文书
央视元宵晚会主持串词
2014/03/25 职场文书
2015大学生求职信范文
2015/03/20 职场文书
2016父亲节感恩话语
2015/12/09 职场文书
导游词之河北滦平金山岭长城
2019/10/16 职场文书
Pytorch distributed 多卡并行载入模型操作
2021/06/05 Python
解决MySQL添加新用户-ERROR 1045 (28000)的问题
2022/03/03 MySQL