js实现div色块碰撞

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

描述:

生成两个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>

以上是 js实现div色块碰撞 的全部内容, 来源链接: utcz.com/z/328187.html

回到顶部