js实现div色块碰撞

本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下

描述:

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

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

(0)

相关推荐

  • JS实现简单的浮动碰撞效果示例

    本文实例讲述了JS实现简单的浮动碰撞效果.分享给大家供大家参考,具体如下: <html> <head> <meta charset="UTF-8"> <title>www.jb51.net JS碰撞效果</title> <script language="javascript"> <!-- directX=1; //X轴方向 directY=1; //Y轴方向 sunX=0; sunY=0

  • JS碰撞运动实现方法详解

    本文实例分析了JS碰撞运动实现方法.分享给大家供大家参考,具体如下: 描述:撞到目标点弹回来(速度反转) 一.无重力的漂浮div var div1=document.getElementById("div1"); var iSpeedX=6; var iSpeedY=8; setInterval(function(){ var l=div1.offsetLeft+iSpeedX; var t=div1.offsetTop+iSpeedY; if(t>=document.docum

  • JS实现小球的弹性碰撞效果

    一.HTML代码(body部分) <body> <!--只需要做一个大div包裹几个小div即可,你想要几个小球碰撞就在内部做几个div即可,这里我们做了6个小球--> <div id="main"> <div></div> <div></div> <div></div> <div></div> <div></div> <di

  • javascript实现10个球随机运动、碰撞实例详解

    本文实例讲述了javascript实现10个球随机运动.碰撞的方法.分享给大家供大家参考.具体如下: 学了一段时间的javascript了,做过一些小案例,目前最有难度的就是10个小球随机碰撞效果,这不,把它上上来与大家分享一下,相信不少和我一样的菜鸟在开始上手编程时都会有不少的困惑,希望它能给一些人带来帮助. 效果要求:10个小球在页面随机移动,碰到窗口边界或其他小球都会反弹 思路: 1.10个小球是10个div; 2.碰窗口反弹,定义vx vy为小球的移动变量,以及一个弹力变量bounce(

  • 原生JS实现多个小球碰撞反弹效果示例

    本文实例讲述了原生JS实现多个小球碰撞反弹效果.分享给大家供大家参考,具体如下: 实现思路:小球的移动,是通过改变小球的left和top值来改变,坐标分别为(x,y)当x/y值加到最大,即加到父级的宽度或者高度时,使x值或者y值减小,同理当x值或者y值减到最小时,同样的使x值或者y值增加,以上的思路可以实现小球的碰壁反弹 小球与小球之间的碰撞,要判断小球在被撞小球的哪个方向,从而判断小球该向哪个方向移动,同样的改变小球的坐标值,来实现小球的反弹 实现代码: <!doctype html> &l

  • js实现div色块碰撞

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 描述: 生成两个div色块,一个可以拖动,一个不可以,用拖动的去撞击不能动的,会将这个色块随机撞到一个位置,改变颜色. 效果: 实现: js文件: function DragObj(_obj) { this.obj=_obj; this.point={}; this.moveBool=false; this.obj.self=this; this.obj.addEventListener("mousedown&

  • js实现div色块拖动录制

    本文实例为大家分享了js实现div色块拖动录制的具体代码,供大家参考,具体内容如下 描述: 实现一个div50*50的色块,拖动它生成一个轨迹,松手后,这个div会重复你刚才拖动的这个路径. 效果: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style&g

  • js实现div在页面拖动效果

    本文实例讲述了js实现div在页面拖动效果.分享给大家供大家参考,具体如下: <style type="text/css"> body { margin: 0px; } #div1 { display: none; position: absolute; z-index: 1000; height: 100%; width: 100%; background: #000000; filter:Alpha(opacity=30); } #div2 { display: non

  • js实现div弹出层的方法

    本文实例讲述了js实现div弹出层的方法.分享给大家供大家参考.具体分析如下: 话说现在各种插件出来了要实现弹出层真是太简单了,但个人有时觉得那些插件不实用经常会找一些纯js原生态的东西,下面来给各位分享一个原生太js div弹出层实例,有需要的朋友可一起看看. 这个不用多说了,直接贴代码吧.有码有注释: 复制代码 代码如下: /*  * 弹出DIV层 */ function showDiv() { var Idiv     = document.getElementById("Idiv&quo

  • JS实现div居中示例

    复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>JS实现div居中</title> <style> /*外层div居中*/ #main { position: absolute; /*极为重要*/ background-color: blue; width:400px; height:200px; /*le

  • JS+CSS实现带有碰撞缓冲效果的竖向导航条代码

    本文实例讲述了JS+CSS实现带有碰撞缓冲效果的竖向导航条代码.分享给大家供大家参考.具体如下: 这是一款碰撞缓冲效果的导航条,JavaScript妙味课堂奉献给大家的作品,很不错的竖向菜单,希望大家喜欢.所用技术是JS和CSS. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-css-pzxg-r-nav-style-codes/ 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.

  • js控制div弹出层实现方法

    本文实例讲述了js控制div弹出层实现方法.分享给大家供大家参考.具体分析如下: 这是个功能很好,且容易调用和控制的弹出层.感兴趣的朋友可以调试运行一下看看效果如何~O(∩_∩)O~ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>弹出窗口(可拖动,背景灰色透明)</title&g

  • 纯js模拟div层弹性运动的方法

    本文实例讲述了纯js模拟div层弹性运动的方法.分享给大家供大家参考.具体如下: 特性: 1. 支持各项常数自定义 2. 理论支持所有元素,只需修改style.width,你懂得 3. 已知支持浏览器:chrome/firefox/IE7.8.9 <html> <head> <meta http-equiv=Content-Type content="text/html;charset=utf-8"> <script type="te

  • js防止DIV布局滚动时闪动的解决方法

    本文实例讲述了js防止DIV布局滚动时闪动的方法,分享给大家供大家参考.具体方法如下: 最近接触页面性能的东西,有很多细微又原始的内容,比如浏览器渲染.资料非常多,所以选一些做节译,备忘. JavaScript多次写.读DOM就会发生「布局颠簸」,引起文档重排(reflow – the process of constructing a render tree 复制代码 代码如下: from a DOM tree1). // 读 var h1 = element1.clientHeight; /

  • JS实现DIV容器赋值的方法

    本文实例讲述了JS实现DIV容器赋值的方法.分享给大家供大家参考,具体如下: 给某个DIV容器赋值js函数,ajax中使用,支持ie和firefox <script> function setValueForDiv(id,content) { var element = document.getElementById(id); element.innerHTML = unescape(content); if(!element.innerHTML) { try{ element.innerHT

随机推荐