javascript制作照片墙及制作过程中出现的问题


Posted in Javascript onApril 04, 2016

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

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>

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

Javascript 相关文章推荐
学习jquery之一
Apr 27 Javascript
Javascript 篱式条件判断
Aug 22 Javascript
老鱼 浅谈javascript面向对象编程
Mar 04 Javascript
jqeury eval将字符串转换json的方法
Jan 20 Javascript
js 字符串转化成数字的代码
Jun 29 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
May 10 Javascript
使用vue.js写一个tab选项卡效果
Mar 25 Javascript
详解使用vue实现tab 切换操作
Jul 03 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
Oct 23 Javascript
利用three.js画一个3D立体的正方体示例代码
Nov 19 Javascript
Vue CLI中模式与环境变量的深入详解
May 30 Vue.js
vue中利用mqtt服务端实现即时通讯的步骤记录
Jul 01 Vue.js
javascript拖拽效果延伸学习
Apr 04 #Javascript
javascript事件委托的用法及其好处简析
Apr 04 #Javascript
基于javascript制作微博发布栏效果
Apr 04 #Javascript
纯js实现手风琴效果
Apr 17 #Javascript
AngularJS中的$watch(),$digest()和$apply()区分
Apr 04 #Javascript
Angular 根据 service 的状态更新 directive
Apr 03 #Javascript
jQuery中的Deferred和promise 的区别
Apr 03 #Javascript
You might like
windows中为php安装mongodb与memcache
2015/01/06 PHP
php实现excel中rank函数功能的方法
2015/01/20 PHP
thinkPHP3.1验证码的简单实现方法
2016/04/22 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
PHP 布尔值的自增与自减的实现方法
2018/05/03 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
php微信公众号开发之关键词回复
2018/10/20 PHP
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
用正则xmlHttp实现的偷(转)
2007/01/22 Javascript
js类中的公有变量和私有变量
2008/07/24 Javascript
node.js中的console用法总结
2014/12/15 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
JS上传图片预览插件制作(兼容到IE6)
2016/08/07 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
JavaScript中立即执行函数实例详解
2017/11/04 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
vue-cli3.0 环境变量与模式配置方法
2018/11/08 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
微信小程序实现登录注册功能
2020/12/29 Javascript
Python 类与元类的深度挖掘 II【经验】
2016/05/06 Python
python表格存取的方法
2018/03/07 Python
对Python 简单串口收发GUI界面的实例详解
2019/06/12 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
岗位职责的含义
2013/11/17 职场文书
导购员的岗位职责
2014/02/08 职场文书
高中生个性发展自我评价
2015/03/09 职场文书
公司表扬信格式
2015/05/04 职场文书
详解Mysql 函数调用优化
2021/04/07 MySQL
浅谈JS的二进制家族
2021/05/09 Javascript
一起来学习Python的元组和列表
2022/03/13 Python