首页 > 代码库 > 照片墙拖动-3

照片墙拖动-3

效果:随机数组   索引值改变

技术分享

  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 btn = document.getElementById("btn"); 16                  var oul = document.getElementById("ul1"); 17                  var ali = document.getElementsByTagName("li"); 18                  var lilen = ali.length; 19                  var zindex = 1; 20                   21                  //转换定位 22 //                  for (var i=0;i<lilen;i++) { 23 //                     ali[i].style.position = "absolute"; 24 //                 } 25                   //创建一个数组保存  每个图片的位置 26                   var  picwz =[]; 27                  for (var i=0;i<lilen;i++) { 28                      picwz.push({ 29                          left:ali[i].offsetLeft, 30                          top:ali[i].offsetTop 31                      }) 32                  } 33                   for (var i=0;i<lilen;i++) { 34                       ali[i].index = i; //为了回到原来的位置增加的索引值 35                      ali[i].style.left = picwz[i].left +"px"; 36                      ali[i].style.top = picwz[i].top +"px"; 37                      ali[i].style.position = "absolute"; 38                      drag(ali[i])//调用拖动图片函数 39                  } 40                  function drag(obj) 41                  { 42                      var  disX = 0; 43                      var  disY = 0; 44                      var   o = null; 45                      obj.onmousedown = function(ev) 46                      { 47                          var ev = ev || event; 48                          disX = ev.clientX - obj.offsetLeft ; 49                          disY = ev.clientY - obj.offsetTop ; 50                          obj.style.zIndex = zindex++; 51                          document.onmousemove = function(ev) 52                          { 53                              var ev = ev || event; 54                              obj.style.left = ev.clientX - disX +"px"; 55                              obj.style.top = ev.clientY - disY +"px"; 56                              //碰撞检测  循环所以Li  排除自己与自己的碰撞?? 57                              var pzArr = []; //每次move 初始为空 58                                  for (var i = 0 ; i< lilen;i++) { 59                                  if(obj != ali[i]) 60                                   { 61                                  pz(obj, ali[i]) && pzArr.push(ali[i]); 62                                   } 63                              } 64                                  console.log(pzArr); 65                                  //拖动距离  算中心点 离哪一张图片的距离 66                                  //设计一个方法   距离最短 67                                   o = getshort(obj,pzArr); 68                                  for (var i=0;i<lilen;i++) { 69                                      ali[i].style.border = "0px solid red";     70                                      } 71                                  if(o) //如果o 存在 72                                  { 73                                  o.style.border = "4px solid red"; 74                                  console.log(o); 75                                  } 76                                   77                          } 78                          obj.onmouseup =function() 79                          { 80                              document.onmousemove = null; 81                              obj.onmouseup = null; 82                              //判断是否有碰撞 83                              if(!o) 84                              { //回到原来的位置 85                                //alert(obj.index);     86                                move(obj,{ 87                                    left:picwz[obj.index].left, 88                                    top:picwz[obj.index].top 89                                },1000,"backOut") 90                              }else{ 91                                  o.style.border =""; 92                                  var p1 = picwz[obj.index]; 93                                  var p2 = picwz[o.index]; 94                                //移动图片 95                                  move(obj,{ 96                                      left:p2.left, 97                                      top:p2.top 98                                  },1000,"backOut") 99                                  //被移动图片100                                  move(o,{101                                      left:p1.left,102                                      top:p1.top103                                  },1000)104                                  //由于索引没有变化  就需要替换105                                  //设置第三方变量存 index106                                  var _index = obj.index;107                                  obj.index = o.index;108                                  o.index = _index;109                              }110                          }111                      return false;112                      }113                    //碰撞检测114                    function pz(obj1,obj2)115                    {116                         var L1 = obj1.offsetLeft;117                         var T1 = obj1.offsetTop;118                         var R1 = L1+ obj1.offsetWidth;119                         var B1 = T1+ obj1.offsetHeight;120                         var L2 = obj2.offsetLeft;121                         var T2 = obj2.offsetTop;122                         var R2 = L2+ obj1.offsetWidth;123                         var B2 = T2+ obj1.offsetHeight;124 //                         if (R1<L2  || B1 < T2 || L1 > R2 || T1 > B2) {125 //                         }126                        return !(R1<L2  || B1 < T2 || L1 > R2 || T1 > B2)127                    }128                      function getshort(obj,arr)129                      {130                          var o = null;131                          var pos = 100000;132                          for(var i =0;i<arr.length;i++)133                          {134                              var a = (obj.offsetTop + obj.offsetHeight/2) - (arr[i].offsetTop + arr[i].offsetHeight/2);135                              var b = (obj.offsetLeft+ obj.offsetWidth/2) - (arr[i].offsetLeft + arr[i].offsetWidth/2);136                              c =Math.sqrt(a*a + b*b);137                              if(c<pos)138                              {139                                  pos = c;140                                  o = arr[i]; //最小值141                              }142                          }143                          return o;144                      }145                      //随机数146                      btn.onclick=function()147                      {148                          var arr =[];149                          for (var i = 0; i<lilen;i++) {150                              arr.push(i);151                          }152                          arr.sort(function(){153                              return Math.random() - 0.5154                          })155                          console.log(arr);//随机数组中[2, 3, 0, 1, 4, 5, 7, 8, 6]156                          157                          for (var i = 0; i<lilen;i++) {158                              var posindex = arr[i];//随机数组中[2, 3, 0, 1, 4, 5, 7, 8, 6]159                              ali[i].index = posindex; //这一步非常重要 索引 根据变化的值而变化160                              move(ali[i],{161                                  left:picwz[posindex].left,162                                  top:picwz[posindex].top163                              },1000,"backOut")164                          }165                      }166                  }167             }168         </script>169     </head>170     <body>171         <input type="button" value="随机" id="btn" />172         <ul id="ul1">173             <li><img src="photo/1.jpg" alt="" /></li>174             <li><img src="photo/2.jpg" alt="" /></li>175             <li><img src="photo/3.jpg" alt="" /></li>176             <li><img src="photo/4.jpg" alt="" /></li>177             <li><img src="photo/5.jpg" alt="" /></li>178             <li><img src="photo/1.jpg" alt="" /></li>179             <li><img src="photo/2.jpg" alt="" /></li>180             <li><img src="photo/3.jpg" alt="" /></li>181             <li><img src="photo/4.jpg" alt="" /></li>182         </ul>183 184     </body>185 </html>

知识点补充:

JavaScript随机打乱数组

 1 var arr = [4,1,67,12,45,121,3]; 2 arr.sort(function() { 3 return (0.5-Math.random()); 4 }) 

代码
arr.sort(function(){ return 0.5 - Math.random() })
//sort 是对数组进行排序
//他的是这样工作的。每次从数组里面挑选两个数 进行运算。
//如果传入的参数是0 两个数位置不变。
//如果参数小于0 就交换位置
//如果参数大于0就不交换位置
//接下来用刚才的较大数字跟下一个进行比较。这样循环进行排序。
/*恰好。我们利用了这一点使用了0.5 - Math.random 这个运算的结果要么是大于0,要么是小于0.这样要么交换位置,要么不交换位置。当然大于或者小于0是随即出现的。所以数组就被随即排序了。*/ 

 

照片墙拖动-3