照片墙拖动-2

效果:碰撞💥 检测  距离检测


  1 <!DOCTYPE html>
  2 <html>
  3     <head>
  4         <meta charset="UTF-8">
  5         <title></title>
  6         <script src="js/move.js" type="text/javascript" charset="utf-8"></script>
  7         <style type="text/css">
  8             #ul1 {margin: 50px auto 0; padding: 0; width:630px; position: relative;}
  9             li {float: left; margin: 0 10px 10px 0; width: 200px; height: 150px; list-style: none;}
 10             li img {display: block;}
 11         </style>
 12         <script type="text/javascript">
 13             window.onload=function()
 14             {
 15                  var oul = document.getElementById("ul1");
 16                  var ali = document.getElementsByTagName("li");
 17                  var lilen = ali.length;
 18                  var zindex = 1;
 19                  //转换定位
 20 //                  for (var i=0;i<lilen;i++) {
 21 //                     ali[i].style.position = "absolute";
 22 //                 }
 23                   //创建一个数组保存  每个图片的位置
 24                   var  picwz =[];
 25                  for (var i=0;i<lilen;i++) {
 26                      picwz.push({
 27                          left:ali[i].offsetLeft,
 28                          top:ali[i].offsetTop
 29                      })
 30                  }
 31                   for (var i=0;i<lilen;i++) {
 32                      ali[i].style.left = picwz[i].left +"px";
 33                      ali[i].style.top = picwz[i].top +"px";
 34                      ali[i].style.position = "absolute";
 35                      drag(ali[i])//调用拖动图片函数
 36                  }
 37                  function drag(obj)
 38                  {
 39                      var  disX = 0;
 40                      var  disY = 0;
 41                      obj.onmousedown = function(ev)
 42                      {
 43                          var ev = ev || event;
 44                          disX = ev.clientX - obj.offsetLeft ;
 45                          disY = ev.clientY - obj.offsetTop ;
 46                          obj.style.zIndex = zindex++;
 47                          document.onmousemove = function(ev)
 48                          {
 49                              var ev = ev || event;
 50                              obj.style.left = ev.clientX - disX +"px";
 51                              obj.style.top = ev.clientY - disY +"px";
 52                              //碰撞检测  循环所以Li  排除自己与自己的碰撞💥
 53                              var pzArr = []; //每次move 初始为空
 54                                  for (var i = 0 ; i< lilen;i++) {
 55                                  if(obj != ali[i])
 56                                   {
 57                                  pz(obj, ali[i]) && pzArr.push(ali[i]);
 58                                   }
 59                              }
 60                                  console.log(pzArr);
 61                                  //拖动距离  算中心点 离哪一张图片的距离
 62                                  //设计一个方法   距离最短
 63                                  var o = getshort(obj,pzArr);
 64                                  for (var i=0;i<lilen;i++) {
 65                                      ali[i].style.border = "0px solid red";    
 66                                      }
 67                                  if(o) //如果o 存在
 68                                  {
 69                                  o.style.border = "4px solid red";
 70                                  console.log(o);
 71                                  }
 72                                  
 73                          }
 74                          obj.onmouseup =function()
 75                          {
 76                              document.onmousemove = null;
 77                              obj.onmouseup = null;
 78                          }
 79                      return false;
 80                      }
 81                    //碰撞检测
 82                    function pz(obj1,obj2)
 83                    {
 84                         var L1 = obj1.offsetLeft;
 85                         var T1 = obj1.offsetTop;
 86                         var R1 = L1+ obj1.offsetWidth;
 87                         var B1 = T1+ obj1.offsetHeight;
 88                         var L2 = obj2.offsetLeft;
 89                         var T2 = obj2.offsetTop;
 90                         var R2 = L2+ obj1.offsetWidth;
 91                         var B2 = T2+ obj1.offsetHeight;
 92                         
 93 //                         if (R1<L2  || B1 < T2 || L1 > R2 || T1 > B2) {
 94 //                             
 95 //                         }
 96                        return !(R1<L2  || B1 < T2 || L1 > R2 || T1 > B2)
 97                    }
 98                      function getshort(obj,arr)
 99                      {
100                          var o = null;
101                          var pos = 100000;
102                          for(var i =0;i<arr.length;i++)
103                          {
104                              var a = (obj.offsetTop + obj.offsetHeight/2) - (arr[i].offsetTop + arr[i].offsetHeight/2);
105                              var b = (obj.offsetLeft+ obj.offsetWidth/2) - (arr[i].offsetLeft + arr[i].offsetWidth/2);
106                              c =Math.sqrt(a*a + b*b);
107                              if(c<pos)
108                              {
109                                  pos = c;
110                                  o = arr[i]; //最小值
111                              }
112                          }
113                          return o;
114                      }
115                      
116                      
117                      
118                  }
119             }
120         </script>
121     </head>
122     <body>
123         <ul id="ul1">
124             <li><img src="photo/1.jpg" alt="" /></li>
125             <li><img src="photo/2.jpg" alt="" /></li>
126             <li><img src="photo/3.jpg" alt="" /></li>
127             <li><img src="photo/4.jpg" alt="" /></li>
128             <li><img src="photo/5.jpg" alt="" /></li>
129             <li><img src="photo/1.jpg" alt="" /></li>
130             <li><img src="photo/2.jpg" alt="" /></li>
131             <li><img src="photo/3.jpg" alt="" /></li>
132             <li><img src="photo/4.jpg" alt="" /></li>
133         </ul>
134 
135     </body>
136 </html>

 


 

posted @ 2016-09-07 14:36  h5monkey  阅读(297)  评论(0编辑  收藏  举报