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 相关文章推荐
JavaScript Event学习第九章 鼠标事件
Feb 08 Javascript
js 禁止选择功能实现代码(兼容IE/Firefox)
Apr 23 Javascript
jquery判断checkbox(复选框)是否被选中的代码
Oct 20 Javascript
jQuery无刷新分页完整实例代码
Oct 27 Javascript
zTree插件下拉树使用入门教程
Apr 11 Javascript
vue.js表格组件开发的实例详解
Oct 12 Javascript
JS与jQuery实现子窗口获取父窗口元素值的方法
Apr 17 jQuery
React Native之ListView实现九宫格效果的示例
Aug 02 Javascript
原生JS实现的简单小钟表功能示例
Aug 30 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
Sep 27 Javascript
VUE搭建手机商城心得和遇到的坑
Feb 21 Javascript
详解iframe跨域的几种常用方法(小结)
Apr 29 Javascript
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
PHP禁止个别IP访问网站
2013/10/30 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
PHP随机生成信用卡卡号的方法
2015/03/23 PHP
让Laravel API永远返回JSON格式响应的方法示例
2018/09/05 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
编辑浪子版表单验证类
2007/05/12 Javascript
原生javascript获取元素样式
2014/12/31 Javascript
百度搜索框智能提示案例jsonp
2016/11/28 Javascript
jQuery插件Echarts实现的渐变色柱状图
2017/03/23 jQuery
angularjs中回车键触发某一事件的方法
2017/04/24 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
vue.js中created方法作用
2018/03/30 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
tracking.js页面人脸识别插件使用方法
2020/04/16 Javascript
Vue.js实现tab切换效果
2019/07/24 Javascript
微信小程序拼接图片链接无底洞深入探究
2019/09/03 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
Python实现K折交叉验证法的方法步骤
2019/07/11 Python
python控制台实现tab补全和清屏的例子
2019/08/20 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
Python错误的处理方法
2020/06/23 Python
从一次项目重构说起CSS3自定义变量在项目的使用方法
2021/03/01 HTML / CSS
印度尼西亚最大和最全面的网络商城:Blibli.com
2017/10/04 全球购物
乔丹诺(Giordano)酒庄德国官网:找到最好的意大利葡萄酒
2017/12/28 全球购物
大学生实习自我鉴定
2013/12/11 职场文书
房展策划方案
2014/06/07 职场文书
质量主管工作职责
2014/09/26 职场文书
2014年中学生检讨书大全
2014/10/09 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
先进人物事迹材料
2014/12/29 职场文书
乔迁之喜答谢词
2015/01/05 职场文书
筑梦中国心得体会
2016/01/18 职场文书
Python利用FlashText算法实现替换字符串
2022/03/31 Python