javascript制作照片墙及制作过程中出现的问题
来源: 阅读:576 次 日期:2016-07-08 15:33:16
温馨提示: 小编为您整理了“javascript制作照片墙及制作过程中出现的问题”,方便广大网友查阅!

本文主要做了一个照片墙,整个制作过程,主要需要解决一下几个问题:

1、如何进行布局转换?

2、如何对图片进行拖拽处理?

3、如何检测图片碰撞问题?进行碰撞检测

4、当多个图片进行碰撞,如何取其中距离对象最小的物体?

5、如何将相互碰撞的两个物体的位置相互交换?涉及到运动的类库

代码如下:

<html>

<head>

<style>

body{background:black;margin: 0;padding: 0;color: white;font-size: 50px;}

p{position: absolute;width:20px;margin-left: 50px;}

#ul1{width: 690px;position: relative;margin: 20px auto;}

#ul1 li{list-style: none;float: left;margin: 10px;width: 200px;height: 150px;z-index: 1;border: 5px solid white;}

#ul1 .active{border: 5px solid yellow;}

</style>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title></title>

<script src="move2.js"></script>

<script type="text/javascript">

window.onload=function ()

{

  var oUl=document.getElementById('ul1');

  var oLi=oUl.getElementsByTagName('li');

  var sTore=[];

  var i;

  var iMinZindex=2;

  //进行布局转换

  for(i=0;i<oLi.length;i++)

  {

     sTore[i]={left:oLi[i].offsetLeft,top:oLi[i].offsetTop};//用数组存储每个li的左边距和高度

  }

  for(i=0;i<oLi.length;i++)

  {

     oLi[i].style.left=sTore[i].left+'px';

     oLi[i].style.top=sTore[i].top+'px';

     oLi[i].style.position='absolute';

     oLi[i].style.margin=0;

     oLi[i].index=i;

  }

  //图片拖拽处理

  for(i=0;i<oLi.length;i++)

  {

    setDrags(oLi[i]);

  }

  function setDrags(obj)

  {

    obj.onmousedown=function(ev)

    {

       //层级问题

      obj.style.zIndex=iMinZindex++;

      var oEvent=ev||event;

      var disx=oEvent.clientX-obj.offsetLeft;

      var disy=oEvent.clientY-obj.offsetTop;

      document.onmousemove=function(ev)

      {

         

        var oEvent=ev||event;

        obj.style.left=oEvent.clientX-disx+'px';//注意加px

        obj.style.top=oEvent.clientY-disy+'px';

        for(i=0;i<oLi.length;i++)

        {

          oLi[i].className='';

        }

        var oNear=findNearest(obj);

        if(oNear)//如果是最近的那个物体

        {

          oNear.className='active';

        }

      };

      document.onmouseup=function()

      {

         document.onmousemove=null;

         document.onmousedown=null;

         //交换两物体的位置

         var oNear=findNearest(obj);

         if(oNear)

         {

          startMove(oNear,sTore[obj.index]);

          startMove(obj,sTore[oNear.index]);

          //交换索引值

          var temp;

          temp=obj.index;

          obj.index=oNear.index;

          oNear.index=temp;

         }

         else

         {

          startMove(obj,sTore[obj.index])//回到自己的位置

         }

         return false;

      };

      clearInterval(obj.timer);

      return false;

    };

  }

//发生碰撞,使被碰的图片加边框,进行碰撞检测

function IBoundTest(obj1,obj2)

{

  var l1=obj1.offsetLeft;

  var r1=obj1.offsetLeft+obj1.offsetWidth;

  var t1=obj1.offsetTop;

  var b1=obj1.offsetTop+obj1.offsetHeight;

  var l2=obj2.offsetLeft;

  var r2=obj2.offsetLeft+obj2.offsetWidth;

  var t2=obj2.offsetTop;

  var b2=obj2.offsetTop+obj2.offsetHeight;

  if(r1<l2||l1>l2||b1<t2||t1>b2)//没有碰撞

  {

    return false;

  }

  else

  {

    return true;

  }

}

//得到两个物体之间的距离

function getDis(obj1,obj2)

{

  var a=obj1.offsetLeft-obj2.offsetLeft;

  var b=obj1.offsetTop-obj2.offsetTop;

  return Math.sqrt(a*a+b*b);

}

//发生碰撞,当与多个碰撞时,取其距离最小的图片

function findNearest(obj)

{

  var iMin=9999999;

  var iMindex=-1;

  var i;

  for(i=0;i<oLi.length;i++)

  {

     if(obj==oLi[i]){continue;}

     if(IBoundTest(obj,oLi[i]))//如果两个物体碰撞上

     {

         

         var dis=getDis(obj,oLi[i]);

         if(iMin>dis)

         {

           iMin=dis;

           iMindex=i;

         }

     }

  }

  if(iMindex==-1){return null;}

  else

  {

    return oLi[iMindex];//返回最近的那个

  }

}

}

</script>

</head>

<body >

<p>照片墙</p>

<ul id="ul1">

 <li><img src="images/1.jpg"></li>

 <li><img src="images/2.jpg"></li>

 <li><img src="images/3.jpg"></li>

 <li><img src="images/4.jpg"></li>

 <li><img src="images/5.jpg"></li>

 <li><img src="images/1.jpg"></li>

 <li><img src="images/2.jpg"></li>

 <li><img src="images/3.jpg"></li>

 <li><img src="images/4.jpg"></li>

</ul>

</body>

</html>

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

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map