div和区域标记之间的冲突

时间:2014-05-14 12:29:54

标签: javascript html area

我正在寻找检测div和区域标签之间碰撞的可能性。 有没有办法解决这个问题?

由于

2 个答案:

答案 0 :(得分:0)

我不知道是否有官方功能可以这样做,但你可以自己编写这个功能,使用他们的位置和他们的宽度和高度......

例如:

function collision(){
   ret=false;
   if(area.posX > div.posX) and (area.posX < div.posX+div.Width))
      if((area.posY > div.posY) and (area.posY < div.posY+div.Height))
         //left top corner is into the div --> COLLISON
         ret=true;

   if((area.posX+area.Width > div.posX) and (area.posX+area.Width < div.posX+div.Width))
       if((area.posY > div.posY) and (area.posY < div.posY+div.Height))
            //Right top corner is into the div --> COLLISON
            ret=true;

   if(area.posX > div.posX) and (area.posX < div.posX+div.Width))
      if((area.posY+area.Height > div.posY) and (area.posY+area.Height < div.posY+div.Height))
            //left bottom corner is into the div --> COLLISON
            ret=true;

   if((area.posX+area.Width > div.posX) and (area.posX+area.Width < div.posX+div.Width))
       if((area.posY+area.Height > div.posY) and (area.posY <+area.Height div.posY+div.Height))
            //Right bottom corner is into the div --> COLLISON
            ret=true;
return ret;

}

function collision(){
    if(    (area.posX+area.Width < div.posX)
        || (area.posX > div.posX+div.Width)
        || (area.posY+area.Height< div.posY)
        || (area.posY > div.posY+Height)
    )
        return false;
    else
        return true;
}

答案 1 :(得分:0)

你是对的,这个函数需要一个矩形区域,但是如果你想要一个多边形的函数,你可以解决这个问题:

function Collision(){
    if(
          (  (area.posX1 > div.posX) and (area.posX1 < div.posX+div.Width) and (area.posY1 > div.posY) and (area.posY1 < div.posY+div.Height)    )
       || (  (area.posX2 > div.posX) and (area.posX2 < div.posX2+div.Width) and (area.posY2 > div.posY) and (area.posY2 < div.posY+div.Height)    )
       || ....
    )
}

用(posX1,posY1)多边形的第一个坐标, 和(posX2,posY2)多边形的秒坐标, ... ...

如果你想要一个全局函数,你可以为你的多边形赋一个函数的参数,并使用一个foreach循环来测试多边形的当前顶点是否不在div中并返回以打破循环的结束(在javascript,foreach用于(列表中的var元素){...} //

    for (var CurrentApex in myPolygon)
    {
        if(   (currentApex.posX < div.posX)
           || (currentApex.posX > div.posX.div.Width)
           || (currentApex.posY < div.posY)
           || (currentApex.posY > div.posY.div.Height
        )
            return false;
    }