欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript制作照片墻及制作過程中出現(xiàn)的問題

 更新時間:2016年04月04日 10:54:25   作者:向婷風(fēng)  
這篇文章主要介紹了javascript制作照片墻及制作過程中出現(xiàn)的問題,感興趣的朋友可以參考一下

本文主要做了一個照片墻,整個制作過程,主要需要解決一下幾個問題:

1、如何進行布局轉(zhuǎn)換?

2、如何對圖片進行拖拽處理?

3、如何檢測圖片碰撞問題?進行碰撞檢測

4、當(dāng)多個圖片進行碰撞,如何取其中距離對象最小的物體?

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;
  //進行布局轉(zhuǎn)換
  for(i=0;i<oLi.length;i++)
  {
     sTore[i]={left:oLi[i].offsetLeft,top:oLi[i].offsetTop};//用數(shù)組存儲每個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;
    };
  }
//發(fā)生碰撞,使被碰的圖片加邊框,進行碰撞檢測
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);
}
//發(fā)生碰撞,當(dāng)與多個碰撞時,取其距離最小的圖片
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>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • Javascript 命名空間模式

    Javascript 命名空間模式

    命名空間是通過為項目或庫創(chuàng)建一個全局對象,然后將所有功能添加到該全局變量中。通過減少程序中全局變量的數(shù)量,實現(xiàn)單全局變量,從而在具有大量函數(shù)、對象和其他變量的情況下不會造成全局污染,同時也避免了命名沖突等問題
    2013-11-11
  • JavaScript中Promise處理異步的并行與串行

    JavaScript中Promise處理異步的并行與串行

    js中的promise是一個異步編程的解決方案,語法層面上他是一個構(gòu)造函數(shù),名字為Promise(),下面這篇文章主要給大家介紹了關(guān)于JavaScript中Promise處理異步的并行與串行的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • JavaScript數(shù)據(jù)類型轉(zhuǎn)換的注意事項

    JavaScript數(shù)據(jù)類型轉(zhuǎn)換的注意事項

    JavaScript是一種無類型語言,但同時JavaScript提供了一種靈活的自動類型轉(zhuǎn)換的處理方式。基本規(guī)則是,如果某個類型的值用于需要其他類型的值的環(huán)境中,JavaScript就自動將這個值轉(zhuǎn)換成所需要的類型。
    2016-07-07
  • js實現(xiàn)tab切換效果實例

    js實現(xiàn)tab切換效果實例

    這篇文章主要介紹了js實現(xiàn)的tab標(biāo)簽切換效果,功能非常簡單,實現(xiàn)了點擊切換的效果,推薦給大家,有需要的小伙伴可以參考下。
    2015-09-09
  • 一百行JS代碼實現(xiàn)一個校驗工具

    一百行JS代碼實現(xiàn)一個校驗工具

    這篇文章主要介紹了一百行JS代碼實現(xiàn)一個校驗工具,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • go.js的基本使用方法詳解【與vue,react同理】

    go.js的基本使用方法詳解【與vue,react同理】

    這篇文章主要介紹了go.js的基本使用方法,結(jié)合實例形式詳細(xì)分析了go.js基本功能、原理及vue中使用方法,需要的朋友可以參考下
    2023-06-06
  • JavaScript伸縮的菜單簡單示例

    JavaScript伸縮的菜單簡單示例

    伸縮的菜單,想必大家都有見到過吧,實現(xiàn)方法也是很多的,在接下來的文章中為大家介紹下使用js是如何實現(xiàn)的,需要的朋友可以參考下
    2013-12-12
  • JavaScript實現(xiàn)PC端橫向輪播圖

    JavaScript實現(xiàn)PC端橫向輪播圖

    這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)PC端橫向輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 微信小程序?qū)崿F(xiàn)上傳圖片功能

    微信小程序?qū)崿F(xiàn)上傳圖片功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)上傳圖片功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 一篇文章弄懂js中的typeof用法

    一篇文章弄懂js中的typeof用法

    這篇文章主要給大家介紹了關(guān)于js中typeof用法的相關(guān)資料,typeof運算符把類型信息當(dāng)作字符串返回,包括有大家常有變量類型,本文通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-11-11

最新評論