hookehuyr

feat(PointsCollector): 添加响应式高度适配平板设备

为PointsCollector组件添加响应式高度计算逻辑,根据设备类型调整容器高度和中心圆位置
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
6 </view> 6 </view>
7 7
8 <!-- 积分收集器主体 --> 8 <!-- 积分收集器主体 -->
9 - <view class="points-collector" :style="{ height: height }"> 9 + <view class="points-collector" :style="{ height: responsiveHeight }">
10 10
11 <!-- 中心圆形显示总积分 --> 11 <!-- 中心圆形显示总积分 -->
12 <view class="center-circle"> 12 <view class="center-circle">
...@@ -83,6 +83,24 @@ const floatingItems = ref([]) // 漂浮的积分项 ...@@ -83,6 +83,24 @@ const floatingItems = ref([]) // 漂浮的积分项
83 const isCollecting = ref(false) // 是否正在收集,防止重复触发 83 const isCollecting = ref(false) // 是否正在收集,防止重复触发
84 84
85 /** 85 /**
86 + * 计算响应式容器高度
87 + */
88 +const responsiveHeight = computed(() => {
89 + const { windowWidth, windowHeight } = Taro.getWindowInfo();
90 +
91 + // iPad和平板设备检测
92 + const isTablet = windowWidth >= 768 || (windowWidth > windowHeight && windowWidth >= 1024);
93 +
94 + if (isTablet) {
95 + // 平板设备使用更保守的高度,确保圆圈不被切掉
96 + return Math.min(windowHeight * 0.6, 600) + 'px';
97 + } else {
98 + // 手机设备使用传入的height或默认值
99 + return props.height;
100 + }
101 +})
102 +
103 +/**
86 * 根据数值长度动态计算字体大小 104 * 根据数值长度动态计算字体大小
87 */ 105 */
88 const dynamicFontSize = computed(() => { 106 const dynamicFontSize = computed(() => {
...@@ -187,7 +205,7 @@ const generatePointsData = () => { ...@@ -187,7 +205,7 @@ const generatePointsData = () => {
187 205
188 // 检查与中心禁飞区的距离 206 // 检查与中心禁飞区的距离
189 const dxCenter = x - 50; 207 const dxCenter = x - 50;
190 - const dyCenter = y - 75; // 中心点在75% 208 + const dyCenter = y - 65; // 更新中心点位置为65%
191 const distanceFromCenter = Math.sqrt(dxCenter * dxCenter + dyCenter * dyCenter); 209 const distanceFromCenter = Math.sqrt(dxCenter * dxCenter + dyCenter * dyCenter);
192 if (distanceFromCenter < centerNoFlyZone) { 210 if (distanceFromCenter < centerNoFlyZone) {
193 hasCollision = true; 211 hasCollision = true;
...@@ -476,7 +494,7 @@ const handleGoToRewards = () => { ...@@ -476,7 +494,7 @@ const handleGoToRewards = () => {
476 .center-circle { 494 .center-circle {
477 position: absolute; 495 position: absolute;
478 left: 50%; 496 left: 50%;
479 - top: 75%; 497 + top: 65%; // 从75%调整到65%,为iPad等大屏设备留出更多底部空间
480 transform: translate(-50%, -50%); 498 transform: translate(-50%, -50%);
481 width: 200rpx; 499 width: 200rpx;
482 height: 200rpx; 500 height: 200rpx;
...@@ -615,4 +633,21 @@ const handleGoToRewards = () => { ...@@ -615,4 +633,21 @@ const handleGoToRewards = () => {
615 font-size: 20rpx; 633 font-size: 20rpx;
616 } 634 }
617 } 635 }
636 +
637 +// iPad和平板设备适配
638 +@media screen and (min-width: 768px) {
639 + .center-circle {
640 + top: 60%; // 平板设备进一步上移,确保不被切掉
641 + width: 240rpx;
642 + height: 240rpx;
643 + }
644 +
645 + .points-number {
646 + font-size: 52rpx;
647 + }
648 +
649 + .points-label, .family-points-label {
650 + font-size: 28rpx;
651 + }
652 +}
618 </style> 653 </style>
......