From 108c72b6e3f5a3d9a0f487d1394ed0d3e0e34606 Mon Sep 17 00:00:00 2001 From: jiannibang <271381693@qq.com> Date: Wed, 23 Oct 2024 14:44:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=89=AB=E6=8F=8F=E8=BF=87=E7=A8=8B?= =?UTF-8?q?=E4=B8=AD=E5=BC=95=E5=AF=BC=E9=A1=BE=E5=AE=A2=E5=B9=B3=E4=B8=BE?= =?UTF-8?q?=E6=89=8B=E6=9C=BA=EF=BC=8C=E6=89=AB=E6=8F=8F=E5=91=A8=E5=9B=B4?= =?UTF-8?q?=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/calibrator/calibrator.js | 71 +++++++++++++++++ pages/calibrator/calibrator.json | 4 + pages/calibrator/calibrator.wxml | 14 ++++ pages/calibrator/calibrator.wxss | 127 +++++++++++++++++++++++++++++++ pages/calibrator/p.png | Bin 0 -> 736 bytes pages/calibrator/p1.png | Bin 0 -> 1380 bytes pages/calibrator/success.png | Bin 0 -> 3097 bytes pages/index/index-helper.js | 2 +- pages/index/index.js | 9 ++- pages/index/index.json | 5 +- pages/index/index.wxml | 3 +- 11 files changed, 228 insertions(+), 7 deletions(-) create mode 100644 pages/calibrator/calibrator.js create mode 100644 pages/calibrator/calibrator.json create mode 100644 pages/calibrator/calibrator.wxml create mode 100644 pages/calibrator/calibrator.wxss create mode 100644 pages/calibrator/p.png create mode 100644 pages/calibrator/p1.png create mode 100644 pages/calibrator/success.png diff --git a/pages/calibrator/calibrator.js b/pages/calibrator/calibrator.js new file mode 100644 index 0000000..ee6483c --- /dev/null +++ b/pages/calibrator/calibrator.js @@ -0,0 +1,71 @@ +// pages/calibrator/calibrator.js +Component({ + /** + * 组件的属性列表 + */ + properties: {}, + + /** + * 组件的初始数据 + */ + data: { + pendingStart: 0, + success: false, + lineStyle: "", + }, + + /** + * 组件的方法列表 + */ + methods: {}, + lifetimes: { + attached() { + const windowInfo = wx.getWindowInfo(); + const vh = windowInfo.windowHeight; + wx.startDeviceMotionListening({ interval: "ui" }); + this.deviceCb = ({ beta, gamma }) => { + if (this.data.success) return; + const isGammaPass = + (gamma > -45 && gamma < 45) || gamma < -135 || gamma > 135; + let top = + (((Math.abs(gamma) > 90 ? 180 - Math.abs(beta) : Math.abs(beta)) / + 90) * + vh) / + 2; + if (!isGammaPass) { + if (top < vh / 2) top = vh / 2 - 100; + else top = vh / 2 + 100; + } + const success = top > vh / 2 - 50 && top < vh / 2 + 50; + if (!success) { + this.setData({ + lineStyle: `top: ${top}px;`, + pendingStart: 0, + }); + } else if (!this.data.pendingStart) { + this.setData({ + lineStyle: `top: ${top}px;`, + pendingStart: Date.now(), + }); + } else if (Date.now() - this.data.pendingStart > 750) { + this.setData({ + lineStyle: `top: ${top}px;`, + success: true, + }); + setTimeout(() => { + this.triggerEvent("success"); + }, 500); + } else { + this.setData({ + lineStyle: `top: ${top}px;`, + }); + } + }; + wx.onDeviceMotionChange(this.deviceCb); + }, + detached() { + wx.offDeviceMotionChange(this.deviceCb); + wx.stopDeviceMotionListening(); + }, + }, +}); diff --git a/pages/calibrator/calibrator.json b/pages/calibrator/calibrator.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/pages/calibrator/calibrator.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/calibrator/calibrator.wxml b/pages/calibrator/calibrator.wxml new file mode 100644 index 0000000..9bdc21e --- /dev/null +++ b/pages/calibrator/calibrator.wxml @@ -0,0 +1,14 @@ + + 请竖举手机 + 将摄像头对准周围环境,并保持手机对准水平状态 + + + + + + 请校准手机至中间高亮区域 + + + + + \ No newline at end of file diff --git a/pages/calibrator/calibrator.wxss b/pages/calibrator/calibrator.wxss new file mode 100644 index 0000000..652f49f --- /dev/null +++ b/pages/calibrator/calibrator.wxss @@ -0,0 +1,127 @@ +.calibrator { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 10; + background: rgba(0, 0, 0, 0.8); +} +.rect { + display: flex; + align-items: center; + justify-content: center; + position: absolute; + left: 0; + top: calc(50vh - 40px); + width: 100vw; + height: 80px; + background: rgba(238, 233, 222, 0.3); + backdrop-filter: blur(3px); +} +.rect .l1 { + position: absolute; + bottom: 25px; + left: 14px; + width: calc(50vw - 30px); + border-top: 2px dashed rgba(215, 207, 198, 0.4); +} +.rect .l2 { + position: absolute; + bottom: 25px; + right: 14px; + width: calc(50vw - 30px); + border-top: 2px dashed rgba(215, 207, 198, 0.4); +} +.rect .p { + position: absolute; + left: 0; + right: 0; + bottom: 16px; + margin: auto; + width: 24px; + height: 40px; +} +.title { + position: absolute; + left: 0; + right: 0; + top: calc(50vh - 40px - 192px - 34px); + margin: auto; + color: var(--T-G1, #eee9de); + text-align: center; + /* 标题-Title1/B */ + font-family: "PingFang SC"; + font-size: 24px; + font-style: normal; + font-weight: 500; + line-height: normal; + z-index: 2; +} +.opacity6 { + opacity: 0.6; +} +.meta { + position: absolute; + left: 0; + right: 0; + top: calc(50vh - 40px - 137px - 41px); + width: 288px; + margin: auto; + padding: 12px; + border-radius: 16px; + background: rgba(0, 0, 0, 0.7); + backdrop-filter: blur(6px); + color: var(--T-9, #fff); + text-align: center; + font-family: "PingFang SC"; + font-size: 12px; + font-style: normal; + font-weight: 400; + line-height: normal; + z-index: 2; +} +.line { + position: absolute; + width: 100vh; + height: 80px; + top: 50vh; + left: 0; + transform-origin: center; + transform: translateY(-40px); + z-index: 1; +} +.line .l { + position: absolute; + left: 16px; + right: 16px; + width: calc(100vw - 32px); + background: #ffdb00; + height: 4px; + border-radius: 100px; + bottom: 23px; + z-index: 1; +} +.line .p { + position: absolute; + width: 30px; + height: 56px; + left: calc(50vw - 15px); + bottom: 11px; + z-index: 2; +} +.meta1 { + position: absolute; + left: 0; + right: 0; + top: calc(50vh + 40px + 18px); + color: var(--T-G2, #d1c8b9); + text-align: center; + /* Font/正文B2M-14 */ + font-family: "PingFang SC"; + font-size: 14px; + font-style: normal; + font-weight: 500; + line-height: normal; + z-index: 2; +} diff --git a/pages/calibrator/p.png b/pages/calibrator/p.png new file mode 100644 index 0000000000000000000000000000000000000000..a47a4e1e47aaa499a3a75028441a2b2903d18b5e GIT binary patch literal 736 zcmeAS@N?(olHy`uVBq!ia0vp^+CUt@!3HE7cJv$qQk(@Ik;M!QVyYm_=ozH)0Vv2= z9OUlAuua2O zd{Hu2oYi#?uF?ov8^QnT=xx7$t-txX?u9rdUSLgKsQWpA?@@xusW;oo3@gv8n5Hi8 zWvR<sefA8$pa&SN2vFMBD8j1bQAJXiX zJXn>cX|iSCI(hE+KiNs5d_ikmZ^u|oaFi0?tf$s(bMNI}LA?~2_WvA5lNLtkh;+9m zZ4A&6>pJSRF+xL(n{2^FPF{x>22N2g5}vec-Oa7HCWma_zpRhf>Gpw2&PheBd6Cz) zt$W>>-{@=0du7fi=}RA$&Q>$|<>Rrk>itXi%Le<@Dt#5FTYsKD?bw8%S2r#k4tvcW zqbO&yXyU4_Nj3js8O>wX3j|2Wvld_5ym+sV*zdpoGr9Qw7dD*NTcp0^a5jJ3tpkxI zr8h%zrP~5qcsQK*27j}PV^!KR_3qCi(RW?jKYkKEFZ`SJ?X8ZJFP+|PurED2Yufcy zh5b+Vgy)-_{pqA|+2j;!>;4Y+NuraS&ExJJIw#LDy}gG|P4wCBa`9b9wB}6Px25*& ivA7TOYh>R4<9;f9cmDA|w!44{lEKr}&t;ucLK6VaGEDyf literal 0 HcmV?d00001 diff --git a/pages/calibrator/p1.png b/pages/calibrator/p1.png new file mode 100644 index 0000000000000000000000000000000000000000..be767017ab09d8e4017899a17a771233338eff6b GIT binary patch literal 1380 zcmeAS@N?(olHy`uVBq!ia0vp^PC#7F!3HF^Kc4mtNO2Z;L>4nJh^c}wqi2xH2cRHh zage(c!@6@aFM%AEbVpxD28NCO+-E{-7;jBn?9XT*d`9RL6Q+!BL+6=zoN zZ7;TDzGCK_*?M8ug_Dao?q(EbikGVI2rz%7*D38d;gyqs>l%SO9T)OmDRm#~<&P=R z`EkIcq~)5B;@hp2=d`y!-~BVqsJ}S9XtMQ%IluoNGBE!>$LHPOv*qV(=j<%DbNH~K zEa>FkP9CijtIihA53gkUtGqbQzInlpf`r8#zJJnslh%cQU8i)X^2yc9ORAo1oWF63 zfOx!eU-z}Zt!vjVa&$dlv1&)dU%dsgrzabv%7zD7b=?XG{IIQR7sKY6VP{iURkq*# z(>=+db(yz<+Rqqi6Q!ovhfP@$N_G3Der3#!v*W+L9eCr;6Iay!$?hJ1&>nr1F6E_zX*a*J6Z?V3t?rL2By^k;Ti{^DKxZqgx zp$;s-itz=U@fg>+g*OR9G)#d=g^_Iif_cM8YU`#pXjy4Ot4F9 zzuMB~SHULlSgrc}@Bj7;4+&5znihZG;P>am8k5gDK25Vu>@?<{%W9aCYx=1w@Voo{ z8v92F4ASZ?*XZAHndg#X%@rf^PDizgKU==&#j3?`-^6xt+_kvZRCqBUJ=OQV`Aq?v zU7ZGIS|uGEZnM~gEd{swu3m9lU(j*Ki4KlKVuHLbEXqm}f(L=pE(Y6nwTUVIaB1Ow z{7mW9n%pB>pFg{9!XqZgt)f%}R-n`*DA?1H0M+xOOTuevs@41*`>PyWX7tQDcYWW% ziNb+vJ2~o~6!)?zE$V|Sz41ytNZG?a=gJ3rr6X>dCrb7$-EVo9#q5;P-20+X+mQ|5 zX+0lklL@a{k;#WaTv}FkuUzrZ!W4_kKOLv{EWdiSG~g3M)Va#_A^wD(yxs+Gbh1zAEv%7P z?tjlsVnWD$6$Zr%;euB#pO3NZ``gf?Bl-Wg@}<-n9#)YT-)&#J{Hybu+K*4LNe*3;mN`)L75ft*iX$nWYu^ zMt{!6i@PN!8JJa_Uw^J_p5CFq!E>K5toy0=XZ5X%^4yZo&jl@t(Arw(VKie^+C^s3 zN#_!beq^Oj>Fbl*`-)dx+b?a$+pp$VrEkCG{x8C-UNFThdXu%A%I3#nC5mkl9F)TH~536e3cqXqpRypI~ z9INTwyWXsKIsfE@j>`I^=c#@*9{p9%pH_Hw{5~4@PWZmpu4gNrH+410-%?&Mmwnse WxQc|&-`4>PMFvk-KbLh*2~7Y=BYuAX literal 0 HcmV?d00001 diff --git a/pages/calibrator/success.png b/pages/calibrator/success.png new file mode 100644 index 0000000000000000000000000000000000000000..baf95b2f8a80ec164817d083986cb2ad14aa523d GIT binary patch literal 3097 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 literal 0 HcmV?d00001 diff --git a/pages/index/index-helper.js b/pages/index/index-helper.js index a58aba3..442c335 100644 --- a/pages/index/index-helper.js +++ b/pages/index/index-helper.js @@ -15,7 +15,7 @@ export const STATES = { noCamera: "noCamera", tomap: "tomap", arriveEnd: "arriveEnd", - bluetoothRequired: "bluetoothRequired", + bluetoothRequired: "bluetoothRequired",calibrating: "calibrating", }; export const promptIcons = { info: "info", diff --git a/pages/index/index.js b/pages/index/index.js index f55a156..45498aa 100644 --- a/pages/index/index.js +++ b/pages/index/index.js @@ -175,6 +175,9 @@ Page({ registerGLTFLoader(THREE); }); }, + startCalibrator() { + this.setData({ state: STATES.calibrating }); + }, requestLocation() { if (!(this.data.inited && this.data.floorOrder !== null)) return; if (!this.sdkInited) { @@ -554,7 +557,7 @@ Page({ if (btn === "3") return this.exit(); } if (state === STATES.fail8s) { - if (btn === "1") return this.requestLocation(); + if (btn === "1") return this.startCalibrator(); if (btn === "2") return this.setState(STATES.selectFloor); if (btn === "3") return this.exit(); } @@ -576,7 +579,7 @@ Page({ floorId: nextFloor.floorId, floorName: nextFloor.name, }); - return this.requestLocation(); + return this.startCalibrator(); } if (state === STATES.requestEnd || state === STATES.arriveEnd) { if (btn === "1") return this.exit(); @@ -642,7 +645,7 @@ Page({ }, handleRelocate() { this.SDK.finishARNavigation(); - this.requestLocation(); + this.startCalibrator(); }, handleNavExit() { this.setState(STATES.requestEnd); diff --git a/pages/index/index.json b/pages/index/index.json index 38b5100..ccb65f4 100644 --- a/pages/index/index.json +++ b/pages/index/index.json @@ -4,6 +4,7 @@ "map2d": "../map2d/map2d", "tabs": "../tabs/tabs", "destination": "../destination/destination", - "nav": "../nav/nav" + "nav": "../nav/nav", + "calibrator": "../calibrator/calibrator" } -} \ No newline at end of file +} diff --git a/pages/index/index.wxml b/pages/index/index.wxml index 73db0ab..73ef78e 100644 --- a/pages/index/index.wxml +++ b/pages/index/index.wxml @@ -26,7 +26,7 @@ {{item.name}} - + @@ -67,6 +67,7 @@ 返回 +