143 lines
3.9 KiB
JavaScript
143 lines
3.9 KiB
JavaScript
![]() |
/**
|
|||
|
*! 创建h5页面上拖动的气泡标签
|
|||
|
*/
|
|||
|
function createH5Bubble(options, devTools) {
|
|||
|
let tagConfig = localStorage.getItem('devTools_tagConfig')
|
|||
|
if (!tagConfig) {
|
|||
|
tagConfig = {}
|
|||
|
} else {
|
|||
|
tagConfig = JSON.parse(tagConfig)
|
|||
|
}
|
|||
|
|
|||
|
tagConfig = Object.assign(
|
|||
|
{
|
|||
|
show: options.bubble.status,
|
|||
|
x: window.innerWidth - 90,
|
|||
|
y: window.innerHeight - 90,
|
|||
|
},
|
|||
|
tagConfig,
|
|||
|
)
|
|||
|
|
|||
|
tagConfig.show = options.bubble.status
|
|||
|
|
|||
|
// 拖动范围限制
|
|||
|
let dragLimit = {
|
|||
|
min: { x: 0, y: 0 },
|
|||
|
max: {
|
|||
|
x: window.innerWidth - 70,
|
|||
|
y: window.innerHeight - 24,
|
|||
|
},
|
|||
|
}
|
|||
|
|
|||
|
tagConfig.x = Math.min(Math.max(tagConfig.x, dragLimit.min.x), dragLimit.max.x)
|
|||
|
tagConfig.y = Math.min(Math.max(tagConfig.y, dragLimit.min.y), dragLimit.max.y)
|
|||
|
|
|||
|
let tag = document.createElement('div')
|
|||
|
tag.style = `
|
|||
|
box-sizing: border-box;
|
|||
|
position: fixed;
|
|||
|
z-index: 9999999;
|
|||
|
left: ${tagConfig.x}px;
|
|||
|
top: ${tagConfig.y}px;
|
|||
|
width: 70px;
|
|||
|
height: 24px;
|
|||
|
display: flex;
|
|||
|
flex-direction: column;
|
|||
|
align-items: center;
|
|||
|
justify-content: center;
|
|||
|
padding: 4px;
|
|||
|
border-radius: 6px;
|
|||
|
background-color: ${options.bubble.bgColor};
|
|||
|
color: ${options.bubble.color};
|
|||
|
font-size: 10px;
|
|||
|
cursor: grab;
|
|||
|
box-shadow: 0px 0px 6px ${options.bubble.bgColor};
|
|||
|
backdrop-filter: blur(1px);
|
|||
|
`
|
|||
|
tag.innerHTML = options.bubble.text
|
|||
|
tag.setAttribute('id', 'debugTag')
|
|||
|
|
|||
|
if (tagConfig.show) {
|
|||
|
document.body.appendChild(tag)
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 标签单击事件
|
|||
|
*/
|
|||
|
function tagClick() {
|
|||
|
let pages = getCurrentPages()
|
|||
|
let route = options.route.substring(1, options.route.length - 2)
|
|||
|
if (pages[pages.length - 1].route == route) {
|
|||
|
// 已经处于debug页面,不响应点击事件
|
|||
|
return
|
|||
|
}
|
|||
|
devTools.show()
|
|||
|
}
|
|||
|
|
|||
|
let isTouch = false
|
|||
|
let touchStartPoint = {
|
|||
|
clientX: 0,
|
|||
|
clientY: 0,
|
|||
|
tagX: tagConfig.x,
|
|||
|
tagY: tagConfig.y,
|
|||
|
hasMove: false,
|
|||
|
}
|
|||
|
|
|||
|
function touchStart(e) {
|
|||
|
if (isTouch) return
|
|||
|
if (e.preventDefault) {
|
|||
|
e.preventDefault()
|
|||
|
}
|
|||
|
let clientX = e.clientX ? e.clientX : e.targetTouches[0].clientX
|
|||
|
let clientY = e.clientX ? e.clientY : e.targetTouches[0].clientY
|
|||
|
touchStartPoint.clientX = clientX
|
|||
|
touchStartPoint.clientY = clientY
|
|||
|
touchStartPoint.tagX = tagConfig.x
|
|||
|
touchStartPoint.tagY = tagConfig.y
|
|||
|
touchStartPoint.hasMove = false
|
|||
|
isTouch = true
|
|||
|
}
|
|||
|
function touchMove(e) {
|
|||
|
if (!isTouch) return
|
|||
|
if (e.preventDefault) {
|
|||
|
e.preventDefault()
|
|||
|
}
|
|||
|
let clientX = e.clientX ? e.clientX : e.targetTouches[0].clientX
|
|||
|
let clientY = e.clientX ? e.clientY : e.targetTouches[0].clientY
|
|||
|
touchStartPoint.hasMove = true
|
|||
|
|
|||
|
let offsetX = touchStartPoint.clientX - clientX
|
|||
|
let offsetY = touchStartPoint.clientY - clientY
|
|||
|
let tx = touchStartPoint.tagX - offsetX
|
|||
|
let ty = touchStartPoint.tagY - offsetY
|
|||
|
tx = Math.min(Math.max(tx, dragLimit.min.x), dragLimit.max.x)
|
|||
|
ty = Math.min(Math.max(ty, dragLimit.min.y), dragLimit.max.y)
|
|||
|
tag.style.left = `${tx}px`
|
|||
|
tag.style.top = `${ty}px`
|
|||
|
tagConfig.x = tx
|
|||
|
tagConfig.y = ty
|
|||
|
}
|
|||
|
function touchEnd(e) {
|
|||
|
if (!isTouch) return
|
|||
|
if (e.preventDefault) {
|
|||
|
e.preventDefault()
|
|||
|
}
|
|||
|
isTouch = false
|
|||
|
localStorage.setItem('devTools_tagConfig', JSON.stringify(tagConfig))
|
|||
|
if (!touchStartPoint.hasMove) {
|
|||
|
tagClick()
|
|||
|
}
|
|||
|
}
|
|||
|
tag.addEventListener('touchstart', touchStart)
|
|||
|
tag.addEventListener('touchmove', touchMove)
|
|||
|
tag.addEventListener('touchend', touchEnd)
|
|||
|
|
|||
|
tag.addEventListener('mousedown', touchStart)
|
|||
|
document.addEventListener('mousemove', touchMove)
|
|||
|
document.addEventListener('mouseup', touchEnd)
|
|||
|
|
|||
|
localStorage.setItem('devTools_tagConfig', JSON.stringify(tagConfig))
|
|||
|
}
|
|||
|
|
|||
|
export default createH5Bubble
|