This commit is contained in:
Professional 2025-05-24 01:34:33 +07:00
parent df7166891c
commit 3e15bcfba5

View File

@ -52,7 +52,6 @@
@touchstart="index === 0 ? startTouch($event) : null" @touchstart="index === 0 ? startTouch($event) : null"
@touchmove="index === 0 ? moveTouch($event) : null" @touchmove="index === 0 ? moveTouch($event) : null"
@touchend="index === 0 ? endTouch($event) : null" @touchend="index === 0 ? endTouch($event) : null"
@mousedown="index === 0 ? startDrag($event) : null"
> >
<!-- Photo Section --> <!-- Photo Section -->
<div class="card-photo-section"> <div class="card-photo-section">
@ -291,17 +290,20 @@ const prevPhoto = (userId) => {
// Обработчики touch событий // Обработчики touch событий
const startTouch = (event) => { const startTouch = (event) => {
isPanning.value = true; // Проверяем, что это действительно touch-событие, а не эмуляция мыши
touchStartX.value = event.touches[0].clientX; if (event.touches && event.touches.length === 1) {
touchStartY.value = event.touches[0].clientY; isPanning.value = true;
touchStartX.value = event.touches[0].clientX;
touchStartY.value = event.touches[0].clientY;
// Сбросить конечные точки // Сбросить конечные точки
touchEndX.value = 0; touchEndX.value = 0;
touchEndY.value = 0; touchEndY.value = 0;
}
}; };
const moveTouch = (event) => { const moveTouch = (event) => {
if (!isPanning.value || !touchStartX.value) return; if (!isPanning.value || !touchStartX.value || !event.touches || event.touches.length !== 1) return;
const currentX = event.touches[0].clientX; const currentX = event.touches[0].clientX;
const currentY = event.touches[0].clientY; const currentY = event.touches[0].clientY;
@ -313,8 +315,8 @@ const moveTouch = (event) => {
const diffX = currentX - touchStartX.value; const diffX = currentX - touchStartX.value;
const diffY = currentY - touchStartY.value; const diffY = currentY - touchStartY.value;
// Определяем направление свайпа для индикаторов // Определяем направление свайпа для индикаторов только при значительном движении
if (Math.abs(diffX) > Math.abs(diffY)) { if (Math.abs(diffX) > 10 && Math.abs(diffX) > Math.abs(diffY)) {
if (diffX > 20) { if (diffX > 20) {
swipeDirection.value = 'right'; swipeDirection.value = 'right';
} else if (diffX < -20) { } else if (diffX < -20) {
@ -341,6 +343,21 @@ const endTouch = (event) => {
if (!isPanning.value) return; if (!isPanning.value) return;
isPanning.value = false; isPanning.value = false;
// Проверяем, что у нас есть валидные координаты
if (!touchEndX.value || !touchStartX.value) {
// Если координаты отсутствуют, просто сбрасываем состояние
cardStyle.value = {
transform: 'none',
transition: 'transform 0.3s ease'
};
swipeDirection.value = null;
touchStartX.value = 0;
touchStartY.value = 0;
touchEndX.value = 0;
touchEndY.value = 0;
return;
}
const diffX = touchEndX.value - touchStartX.value; const diffX = touchEndX.value - touchStartX.value;
// Проверяем, достаточно ли было смещение для действия // Проверяем, достаточно ли было смещение для действия