照片墙拖动-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.top
103                                  },1000)
104                                  //由于索引没有变化  就需要替换
105                                  //设置第三方变量存 index
106                                  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.5
154                          })
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].top
163                              },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是随即出现的。所以数组就被随即排序了。*/

时间: 2024-11-06 10:14:22

照片墙拖动-3的相关文章

照片墙拖动-1

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <style type="text/css"> 7 #ul1 {margin: 50px auto 0; padding: 0; width:630px; position: relative;} 8 li {float:

Android照片墙加强版,使用ViewPager实现画廊效果

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/12646775 记得关于照片墙的文章我已经写过好几篇了,有最基本的照片墙,有瀑布流模式的照片墙,后来又在瀑布流的基础之上加入了查看大图和多点触控缩放的功能.总体来说,照片墙这个Demo在这几篇文章的改进中已经变得较为完善了,本想关于这个功能的系列到此为止,但有朋友跟我反应,觉得在查看大图的时候最好能通过左右滑动来浏览前后的图片.恩,确实,好像比较高端的一些应用都有这样的效果,那么本

javascript继承(七)—用继承的方式实现照片墙功能

照片墙DEMO下载 注意:图片有四种类型:1可放大:2可拖动:3即可放大也可拖动:4都不行.由于每个图片的构造函数不同而不同 照片墙的实现是比较容易的,网上也有许许多多的事例.本篇文章将着重介绍一下用继承的方式怎么样去实现.使用继承又能带来怎样的好处.我们知道面向对象的优势在于可扩展性,这篇文章主要就是用面向对象的思想. 下面将具体的介绍如何实现照片墙: 首先是布局,将所有照片按顺序排列并不难,因为图片的宽高是不固定的,所以这儿只需要定义图片的高就行了,宽度会根据高度来缩放.又因为要实现拖动的效

*C#(WPF)--矩阵拖动和矩阵动画(拖动展开,不足动画效果)

最近在研发新的项目,遇到了一个桌面模式下的难点--展开动画.之前动画这方面没做过,也许很多人开始做的时候也会遇到相关问题,因此我把几个重点及实际效果图总结展示出来: 我的开发环境是在VS2017下进行的,这个工具条主要功能是:一个工具条,可进行拖拉.可进行拖拉展开,可在拖动之后不足展开并反向继续展开剩下的部分: 一.[拖动]   拖动的核心代码是通过矩阵进行定位和拖动的,定位是以父容器为模板的.以下是核心代码(及效果图): 1 /// <summary> 2 /// 这里TitleBar代指最

javascript照片墙效果

<!doctype html> <html> <head> <meta charset="UTF-8"> <title>锤子-直播照片墙拖拽技术-网站开发-网页特效</title> <style type="text/css"> *{margin:0;padding:0;} body{background:#000000;/*背景填充*/overflow:hidden;} #pers

可拖动GridView的实现,类似支付宝界面

1.概述 之前实现过一个仿支付宝界面的代码,可拖动网格视图.其实实现的原理网上都可以找到,我也是参考网上实现的方法,实现了自己需要的界面.并对实现的原理和方法进行了分析,现在进行总结,放太久都快忘记自己做过这回事了.原理和实现网上大部分地方都可以找到,我是根据自己的理解进行分析的,现在对之前的工作进行总结,了解实现的基本过程和方法.GridView拖动的源码来源于网上,根据需求修改成了需要的效果,下面简单说明下实现过程. 在说明实现之前,先上一张总体的界面效果图: 为了更好说明程序种各个变量的意

在Canvas上拖动产生文字

拖动的幅度越大,字就会越大. <!DOCTYPE html> <html> <head lang="en"> <style> html, body { width: 100%; height: 100%; margin: 0px; overflow: hidden; } canvas { cursor: crosshair; } span { font-family: 'Georgia', cursive; font-size: 40px

Unity3D拖动任意对象GameObject移动到任意地方

今天不是很忙,研究了一下拖拽GameObject移动到任意位置,沿x轴和z轴移动,其他的也就不说了,上代码: using UnityEngine; using System.Collections; public class DragAndDrog : MonoBehaviour {     private GameObject target;     private bool isMouseDrag;     private Vector3 screenPosition;     privat

CentOS6下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具)

1.先添加几个RPM下载源 1.1)安装RPMforge的CentOS6源      [[email protected] ~]# wget -c http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm      [[email protected] ~]# rpm –import http://apt.sw.be/RPM-GPG-KEY.dag.txt      [[email