vue判断两个元素是否重叠

我做的是通过接口返回的列表数据渲染元素,元素可以调整位置和大小,所以遍历中的item包含元素的positionX,positionY,width,height等信息,也可通过获取元素的offsetLeft、offsetTop、width、height等方式参考下面的几种重叠的情况进行判断:

watch: {
    pageData: {
      handler(nVal, oVal) {
        //设置元素重叠默认标识
        nVal.articles.forEach((item1, index1) => {
          item1.overlap = false;
        });
        nVal.articles.forEach((item1, index1) => {
          nVal.articles.forEach((item2, index2) => {
            // 1左上在其他元素内
            let leftTopOver =
              item1.positionX > item2.positionX &&
              item1.positionX < item2.positionX + item2.width &&
              item1.positionY > item2.positionY &&
              item1.positionY < item2.positionY + item2.height;
            // 2右下在其他元素内
            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右上在其他元素内
            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左下在其他元素内
            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
            ) {
              //设置元素重叠标识
              item1.overlap = true;
              item2.overlap = true;
            }
          });
        });
      },
      deep: true
    }
  },

你可能感兴趣的:(vue判断两个元素是否重叠)