Ant Design предоставляет мощный набор компонентов для построения современных веб-интерфейсов, включая оптимизацию под устройства с сенсорным вводом. Работа с тачскрином требует понимания как особенностей самой библиотеки, так и нюансов событий touch в браузере.
В Ant Design компоненты автоматически поддерживают основные события
касания, такие как onClick, onFocus,
onChange. Однако для более сложных сценариев могут
потребоваться нативные события:
import React from 'react';
import { Button } from 'antd';
const TouchExample = () => {
const handleTouchStart = (e) => {
console.log('Касание началось', e.touches[0].clientX, e.touches[0].clientY);
};
const handleTouchEnd = (e) => {
console.log('Касание завершено');
};
return (
<Button
onTouchSt art={handleTouchStart}
onTouch End={handleTouchEnd}
type="primary"
>
Сенсорная кнопка
</Button>
);
};
Ключевые моменты:
onTouchStart — срабатывает при начале касания.onTouchMove — срабатывает при перемещении пальца по
экрану.onTouchEnd — фиксирует завершение касания.e.preventDefault() и
e.stopPropagation() для предотвращения нежелательного
скролла или срабатывания других событий.Для реализации свайпов можно комбинировать onTouchStart,
onTouchMove и onTouchEnd с вычислением
направления движения пальца:
let startX = 0;
let startY = 0;
const handleTouchStart = (e) => {
startX = e.touches[0].clientX;
startY = e.touches[0].clientY;
};
const handleTouchEnd = (e) => {
const endX = e.changedTouches[0].clientX;
const endY = e.changedTouches[0].clientY;
const deltaX = endX - startX;
const deltaY = endY - startY;
if (Math.abs(deltaX) > Math.abs(deltaY)) {
if (deltaX > 50) console.log('Свайп вправо');
else if (deltaX < -50) console.log('Свайп влево');
} else {
if (deltaY > 50) console.log('Свайп вниз');
else if (deltaY < -50) console.log('Свайп вверх');
}
};
Рекомендации:
react-use-gesture, совместимые с Ant Design.Некоторые компоненты уже имеют встроенную поддержку тачскрина:
onClick через
касание.Для улучшения UX на сенсорных устройствах стоит применять такие свойства:
touch-action: pan-y; или
touch-action: none; через стили, чтобы управлять прокруткой
и жестами.gestureHandling и draggable для
компонентов, поддерживающих перетаскивание (например,
Slider или Carousel).size="large" в Ant Design).Popover или Dropdown).fastclick или использовать современные
браузеры, которые корректно убирают 300ms задержку между касанием и
событием click.Иногда требуется реализовать свайпы, drag-and-drop или мультитач события для кастомных компонентов:
import React, { useRef } from 'react';
const DraggableCard = () => {
const cardRef = useRef(null);
const handleTouchMove = (e) => {
const touch = e.touches[0];
cardRef.current.style.transform = `translate(${touch.clientX}px, ${touch.clientY}px)`;
};
return (
<div
ref={cardRef}
onTouchM ove={handleTouchMove}
style={{ width: 100, height: 100, background: '#1890ff', borderRadius: 8 }}
/>
);
};
Советы:
transform или position
при завершении касания.onTouchMove могут вызывать лаги.requestAnimationFrame.click после touchend.-webkit-overflow-scrolling: touch;
помогает сгладить прокрутку в контейнерах с
overflow: scroll.onTouchStart, onTouchMove,
onTouchEnd с расчетом координат.touch-action и
user-select: none для предотвращения конфликтов с
системными жестами.Эффективная работа с тачскрином в Ant Design позволяет создавать интерфейсы, которые одинаково удобно использовать как на десктопе, так и на мобильных устройствах.