function checkBoxCollision()

in kystudio/src/directive/index.js [307:379]


    function checkBoxCollision (changeType, size, rectifyVal) {
      rectifyVal = rectifyVal || 0
      // 无自定义盒子和限制
      if (!dragInfo.box && !limitObj && dragInfo.allowOutOfView) {
        return true
      }
      if (limitObj) {
        let curCheckProp = limitObj[changeType]
        if (curCheckProp) {
          // 无自定义限制
          if (curCheckProp.length > 0 && undefined !== curCheckProp[0] && size < curCheckProp[0]) {
            dragInfo[changeType] = curCheckProp[0]
            return false
          }
          if (curCheckProp.length > 1 && undefined !== curCheckProp[1] && size > curCheckProp[1]) {
            dragInfo[changeType] = curCheckProp[1]
            return false
          }
        }
      }
      if (dragInfo.box && !dragInfo.allowOutOfView) {
        if (changeType === 'top') {
          if (size + dragInfo.height > boxH) {
            dragInfo.top = boxH - dragInfo.height > 0 ? boxH - dragInfo.height : 0
            return false
          }
          if (size < 0) {
            dragInfo.top = 0
            return false
          }
        }
        if (changeType === 'height') {
          if (dragInfo.top + rectifyVal < 0) {
            return false
          }
          if (rectifyVal + size + dragInfo.top > boxH) {
            dragInfo.height = boxH - dragInfo.top
            return false
          }
        }
        if (changeType === 'width') {
          if (!isNaN(dragInfo.left)) {
            if (dragInfo.left + rectifyVal < 0) {
              return false
            }
            if (rectifyVal + size + dragInfo.left > boxW) {
              dragInfo.left = boxW - dragInfo.width
              return false
            }
          }
          if (!isNaN(dragInfo.right)) {
            if (dragInfo.right + rectifyVal < 0) {
              return false
            }
            if (size + dragInfo.right - rectifyVal > boxW) {
              dragInfo.width = boxW - dragInfo.right
              return false
            }
          }
        }
        if (changeType === 'right' || changeType === 'left') {
          if (size + dragInfo.width > boxW) {
            dragInfo[changeType] = boxW - dragInfo.width > 0 ? boxW - dragInfo.width : 0
            return false
          }
          if (size < 0) {
            dragInfo[changeType] = 0
            return false
          }
        }
      }
      return true
    }