vue判斷兩個(gè)元素是否重疊

我做的是通過(guò)接口返回的列表數(shù)據(jù)渲染元素,元素可以調(diào)整位置和大小,所以遍歷中的item包含元素的positionX,positionY,width,height等信息,也可通過(guò)獲取元素的offsetLeft、offsetTop、width、height等方式參考下面的幾種重疊的情況進(jìn)行判斷:

watch: {
    pageData: {
      handler(nVal, oVal) {
        //設(shè)置元素重疊默認(rèn)標(biāo)識(shí)
        nVal.articles.forEach((item1, index1) => {
          item1.overlap = false;
        });
        nVal.articles.forEach((item1, index1) => {
          nVal.articles.forEach((item2, index2) => {
            // 1左上在其他元素內(nèi)
            let leftTopOver =
              item1.positionX > item2.positionX &&
              item1.positionX < item2.positionX + item2.width &&
              item1.positionY > item2.positionY &&
              item1.positionY < item2.positionY + item2.height;
            // 2右下在其他元素內(nèi)
            let rightBottomOver =
              item1.positionX + item1.width > item2.positionX &&
              item1.positionX + item1.width < item2.positionX + item2.width &&
              item1.positionY + item1.height > item2.positionY &&
              item1.positionY + item1.height < item2.positionY + item2.height;
            // 3右上在其他元素內(nèi)
            let rightTopOver =
              item1.positionX + item1.width > item2.positionX &&
              item1.positionX + item1.width < item2.positionX + item2.width &&
              item1.positionY > item2.positionY &&
              item1.positionY < item2.positionY + item2.height;
            // 4左下在其他元素內(nèi)
            let leftBottomOver =
              item1.positionX > item2.positionX &&
              item1.positionX < item2.positionX + item2.width &&
              item1.positionY + item1.height > item2.positionY &&
              item1.positionY + item1.height < item2.positionY + item2.height;
            // 5十字交叉重疊
            let centerCenterOver =
              item1.positionX < item2.positionX &&
              item1.positionX + item1.width > item2.positionX + item2.width &&
              item1.positionY > item2.positionY &&
              item1.positionY + item1.height < item2.positionY + item2.height;
            // 6覆蓋重疊
            let containOver =
              item1.positionX > item2.positionX &&
              item1.positionX + item1.width < item2.positionX + item2.width &&
              item1.positionY > item2.positionY &&
              item1.positionY + item1.height < item2.positionY + item2.height;
            if (
              leftTopOver ||
              rightBottomOver ||
              rightTopOver ||
              leftBottomOver ||
              centerCenterOver ||
              containOver
            ) {
              //設(shè)置元素重疊標(biāo)識(shí)
              item1.overlap = true;
              item2.overlap = true;
            }
          });
        });
      },
      deep: true
    }
  },
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容