Как упоминалось в заголовке, я столкнулся со странной ошибкой на Iphone: после первого пролистывания слайдер перестает работать и больше не регистрирует пролистывания. Я тестировал слайдер на нескольких устройствах и на всех устройствах Android, а также в Developer. Инструменты в Chrome все работают нормально.
document.addEventListener("DOMContentLoaded", function() {
const slider = document.querySelector('.slider');
const prevButton = document.querySelector('.prev-button');
const nextButton = document.querySelector('.next-button');
const slides = Array.from(slider.children);
const slideCount = slides.length;
let slideIndex = 0;
let startX = 0;
let endX = 0;
prevButton.addEventListener('click', () => {
slideIndex = (slideIndex - 1 + slideCount) % slideCount;
slide();
});
nextButton.addEventListener('click', () => {
slideIndex = (slideIndex + 1) % slideCount;
slide();
});
const slide = () => {
const slideOffset = -slideIndex * slider.clientWidth;
slider.style.transform = `translateX(${slideOffset}px)`;
};
slider.addEventListener('touchstart', touchStart);
slider.addEventListener('touchmove', touchMove);
slider.addEventListener('touchend', touchEnd);
function touchStart(e) {
startX = e.touches[0].clientX;
}
function touchMove(e) {
endX = e.touches[0].clientX;
e.preventDefault();
}
function touchEnd() {
const swipeThreshold = 50;
const swipeDistance = startX - endX;
if (swipeDistance > swipeThreshold) {
slideIndex = (slideIndex + 1) % slideCount;
} else if (swipeDistance < -swipeThreshold) {
slideIndex = (slideIndex - 1 + slideCount) % slideCount;
}
slide();
startX = 0;
endX = 0;
}
window.addEventListener('load', () => {
slide();
});
});



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Событие касания, скорее всего, будет отменено, поскольку приоритет имеет событие по умолчанию. Вы можете проверить это, добавив прослушиватель touchcancel и проверив, срабатывает ли он на iPhone.
Если это так, вам нужно установить свойство CSS touch-action родительского элемента в соответствии с ожидаемым поведением (в любом случае это, вероятно, хорошая идея). Если вы самостоятельно обрабатываете все сенсорные действия через JS, вы можете установить touch-action: none для родительского элемента.