From 956a4d91b175673f69e748677c6d1c347eccc190 Mon Sep 17 00:00:00 2001 From: jinhhanhan <1683105490@qq.com> Date: Wed, 26 Nov 2025 18:23:11 +0800 Subject: [PATCH] =?UTF-8?q?chore:=E5=9C=A8DesktopTouch=E4=B8=8A=E9=BC=A0?= =?UTF-8?q?=E6=A0=87=E5=8F=AF=E4=BB=A5=E8=BF=9B=E8=A1=8C=E5=A5=96=E5=93=81?= =?UTF-8?q?=E6=8B=96=E6=8B=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/BattleRanking.vue | 71 +++++++++++++++++++++++++++---------- 1 file changed, 53 insertions(+), 18 deletions(-) diff --git a/src/views/BattleRanking.vue b/src/views/BattleRanking.vue index 7b4e75e..15963ed 100644 --- a/src/views/BattleRanking.vue +++ b/src/views/BattleRanking.vue @@ -14,10 +14,10 @@
🥁
-
🥁
+
🏆
-
🥁
-
🥁
+
+
@@ -32,8 +32,11 @@ -
+
一等奖
二等奖
@@ -698,7 +701,7 @@ const isPlayingSound = ref(false); const drumsPosition = ref({ x: 20, y: 20 }); // 倒计时位置状态已移除,直接在模板中使用固定位置 // 奖金设置模块位置状态 - 使用reactive存储实际定位值 -const bonusPosition = reactive({ x: 'auto', y: 'auto' }); +const bonusPosition = reactive({ x: 320, y: 360 }); let isDragging = false; let isBonusDragging = false; @@ -731,12 +734,20 @@ const startDrag = (e) => { const startBonusDrag = (e) => { e.stopPropagation(); // 阻止事件冒泡 isBonusDragging = true; - // 计算鼠标相对于元素左上角的偏移量 - const rect = e.currentTarget.getBoundingClientRect(); - bonusDragOffset.x = e.clientX - rect.left; - bonusDragOffset.y = e.clientY - rect.top; + + // 根据事件类型处理拖动偏移量 + if (e.type === 'touchstart') { + const touch = e.touches[0]; + bonusDragOffset.x = touch.clientX - bonusPosition.x; + bonusDragOffset.y = touch.clientY - bonusPosition.y; + } else { + bonusDragOffset.x = e.clientX - bonusPosition.x; + bonusDragOffset.y = e.clientY - bonusPosition.y; + } + // 提高拖动时的性能,临时禁用动画效果 - e.currentTarget.style.transition = 'none'; + const bonusElement = e.currentTarget; + bonusElement.style.transition = 'none'; e.preventDefault(); }; @@ -761,9 +772,22 @@ const drag = throttle((e) => { drumsPosition.value.y = e.clientY - dragOffset.y; } if (isBonusDragging) { + // 根据事件类型处理拖动位置 + let clientX, clientY; + if (e.type === 'mousemove') { + clientX = e.clientX; + clientY = e.clientY; + } else if (e.type === 'touchmove') { + const touch = e.touches[0]; + clientX = touch.clientX; + clientY = touch.clientY; + } else { + return; // 如果不是鼠标或触摸事件,直接返回 + } + // 计算新的位置 - const newX = e.clientX - bonusDragOffset.x; - const newY = e.clientY - bonusDragOffset.y; + const newX = clientX - bonusDragOffset.x; + const newY = clientY - bonusDragOffset.y; // 确保元素不会被拖出视口 const windowWidth = window.innerWidth; @@ -1012,7 +1036,8 @@ const startDrumAnimation = () => { drum.style.setProperty('--drum-translate-y', isStrongBeat ? `${(animationConfig.beatTranslateY || -15) * (1 + (patternConfig.accentAnimation || 0) / 100)}px` : `${animationConfig.beatTranslateY || -15}px`); - drum.style.setProperty('--drum-rotate', `${animationConfig.beatRotate || 5}deg`); + drum.style.setProperty('--drum-rotate', `${animationConfig.beatRotate || 5}deg`); + drum.style.setProperty('--drum-brightness', isStrongBeat ? '1.4' : '1.3'); drum.style.setProperty('--drum-saturation', isStrongBeat ? '1.3' : '1.2'); }); @@ -1091,6 +1116,8 @@ onMounted(async () => { // 添加拖放相关的事件监听 document.addEventListener('mousemove', drag); document.addEventListener('mouseup', endDrag); + document.addEventListener('touchmove', drag); + document.addEventListener('touchend', endDrag); }); // 监听结束时间变化(在真实环境中,可能需要通过props或store来监听) @@ -1115,6 +1142,8 @@ onUnmounted(() => { // 移除拖放相关的事件监听 document.removeEventListener('mousemove', drag); document.removeEventListener('mouseup', endDrag); + document.removeEventListener('touchmove', drag); + document.removeEventListener('touchend', endDrag); // 清理音频资源 if (audioContext) { @@ -1327,6 +1356,13 @@ onUnmounted(() => { position: fixed; cursor: move; transition: transform 0.2s ease; + background: rgba(255, 255, 255, 0.95); + border-radius: 15px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); + + border: 2px solid rgba(255, 215, 0, 0.5); + padding: 15px; + z-index: 100; } /* 奖金图片容器样式 - Flex布局居中且保持一行 */ @@ -1342,14 +1378,13 @@ onUnmounted(() => { .award-image { width: auto; height: 120px; - /* border-radius: 8px; */ - /* box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); */ - /* transition: transform 0.2s ease, box-shadow 0.2s ease; */ + border-radius: 8px; + transition: transform 0.2s ease, box-shadow 0.2s ease; } .award-image:hover { transform: translateY(-5px); - /* box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15); */ + box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15); }