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.ui.dialog 增加“自动记住关闭时的位置”的功能
Nov 24 Javascript
基于jquery的获取浏览器窗口大小的代码
Mar 28 Javascript
CSS+jQuery实现的一个放大缩小动画效果
Sep 24 Javascript
js使用html()或text()方法获取设置p标签的显示的值
Aug 01 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
Oct 23 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
Jun 22 Javascript
jQuery实现按比例缩放图片的方法
Apr 29 jQuery
ES6深入理解之“let”能替代”var“吗?
Jun 28 Javascript
微信小程序 共用变量值的实现
Jul 12 Javascript
JavaScript面向对象程序设计创建对象的方法分析
Aug 13 Javascript
微信小程序页面间传值与页面取值操作实例分析
Apr 30 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
Jul 20 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
织梦sitemap地图实时推送给百度的教程
2015/08/03 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
jQuery select控制插件
2009/08/17 Javascript
JQuery与iframe交互实现代码
2009/12/24 Javascript
jQuery的slideToggle方法实例
2013/05/07 Javascript
js快速排序的实现代码
2013/12/08 Javascript
实例分析js和C#中使用正则表达式匹配a标签
2014/11/26 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
JavaScript+html5 canvas实现图片破碎重组动画特效
2016/02/22 Javascript
javascript基础语法——全面理解变量和标识符
2016/06/02 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
2016/06/21 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
2016/08/03 Javascript
js拼接html字符串的注意事项
2016/10/13 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
从零开始做一个pagination分页组件
2017/03/15 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
Vue实现本地购物车功能
2018/12/05 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
Django中的静态文件管理过程解析
2019/08/01 Python
Django上线部署之IIS的配置方法
2019/08/22 Python
使用Rasterio读取栅格数据的实例讲解
2019/11/26 Python
python的time模块和datetime模块实例解析
2019/11/29 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
2020/01/18 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
2020/11/13 Python
scrapy头部修改的方法详解
2020/12/06 Python
详解CSS的border边框属性及其在CSS3中的新特性
2016/05/10 HTML / CSS
自荐信格式的六要素
2013/09/21 职场文书
人力资源职位说明书
2014/07/29 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang