| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- /**
- *! 创建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;
|