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 相关文章推荐
JQuery 中几个类选择器的简单使用介绍
Mar 14 Javascript
JavaScript每天定时更换皮肤样式的方法
Jul 01 Javascript
Vue.js每天必学之方法与事件处理器
Sep 06 Javascript
JS点击缩略图整屏居中放大图片效果
Jul 04 Javascript
js生成word中图片处理方法
Jan 06 Javascript
解决vue 按钮多次点击重复提交数据问题
May 10 Javascript
vue单页面实现当前页面刷新或跳转时提示保存
Nov 02 Javascript
JS实现从对象获取对象中单个键值的方法示例
Jun 05 Javascript
微信小程序如何刷新当前界面的实现方法
Jun 07 Javascript
jQuery表单选择器用法详解
Aug 22 jQuery
Vue如何基于es6导入外部js文件
May 15 Javascript
Vue如何提升首屏加载速度实例解析
Jun 25 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
超人钢铁侠联手合作?美漫作家呼吁DC漫威合作联动以抵抗疫情
2020/04/09 欧美动漫
php基础教程 php内置函数实例教程
2012/08/21 PHP
php获取服务器信息的实现代码
2013/02/04 PHP
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
jQuery 使用个人心得
2009/02/26 Javascript
JavaScript 对象的属性和方法4种不同的类型
2010/03/19 Javascript
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
jQuery表格插件datatables用法总结
2014/09/05 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
Javascript aop(面向切面编程)之around(环绕)分析
2015/05/01 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
理解javascript中Map代替循环
2016/02/26 Javascript
Javascript使用SWFUpload进行多文件上传
2016/11/16 Javascript
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
JavaScript动态加载重复绑定问题
2018/04/01 Javascript
Vue实现侧边菜单栏手风琴效果实例代码
2018/05/31 Javascript
微信小程序swiper禁止用户手动滑动代码实例
2019/08/23 Javascript
JS图片预加载三种实现方法解析
2020/05/08 Javascript
pandas 空数据处理方法详解
2019/11/02 Python
python 制作简单的音乐播放器
2020/11/25 Python
浅谈css3中calc在less编译时被计算的解决办法
2017/12/04 HTML / CSS
法国发饰品牌:Alexandre De Paris
2018/12/04 全球购物
心得体会怎么写
2013/12/30 职场文书
审计班子对照检查材料
2014/08/27 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
安全月宣传标语
2014/10/07 职场文书
2014年初中班主任工作总结
2014/11/08 职场文书
给老师的感谢信
2015/01/20 职场文书
青年志愿者服务活动总结
2015/05/06 职场文书
2016年先进班集体事迹材料
2016/02/26 职场文书
Python基础之Socket通信原理
2021/04/22 Python
Golang: 内建容器的用法
2021/05/05 Golang
《艾尔登法环》发布最新「战技」宣传片
2022/04/03 其他游戏
Python中re模块的元字符使用小结
2022/04/07 Python