/**
* 获取弹窗位置 (优先右下侧显示)
* dialogW : 弹窗 宽
* dialogH :弹窗 高
* viewW : 视口 宽 (弹窗的父级)
* viewH :视口 高
* itemX : 点击项相对视口的X坐标
* itemY :点击项相对视口的Y坐标
* itemW : 点击项的宽
* itemH : 点击项的高
* clearance : 间隙大小(默认为6)
*/
const createDetailStyle = (dialogW, dialogH, viewW, viewH, itemX, itemY, itemW, itemH, clearance = 6) => {
// debugger
let top = 0
let left = 0
// left
// 点击项右侧宽度 大于 弹窗宽度 + 间隙
if (viewW - itemX - itemW - clearance > dialogW) {
left = itemX + itemW + clearance
// 点击项左侧宽度 大于 弹窗宽度 + 间隙
} else if (itemX - clearance > dialogW) {
left = itemX - clearance - dialogW
// 点击项中间距离视口右侧的距离 大于 弹窗宽度
} else if (viewW - itemX - itemW / 2 > dialogW) {
left = viewW - dialogW
// 点击项中间距离视口左侧的距离 大于 弹窗宽度
} else if (itemX + itemW / 2 > dialogW) {
left = 0
// 点击项中间距视口左右距离 小于 弹窗宽度
} else {
left = viewW - dialogW
}
// top
// 24 为弹窗距离视口下边距离最小为24
// 点击项上边框距离视口底边 大于 弹窗高度
if (viewH - itemY - 24 > dialogH) {
top = itemY
// 点击项上边框距离视口顶边 大于 弹窗高度
} else if (itemY > dialogH) {
top = itemY - dialogH
// 点击项上边框距离视口上下边框 都小于 弹窗高度
} else {
top = viewH - dialogH - 24
}
return { t: top, l: left }
}