• Как реализовать запрет вертикального скролла при горизонтальном touchmove?

    @supertok
    Вот моя реализация на VUE, думаю переделать на чистый js будет нетрудно
    Идея в том что по горизонтали двигаем сами с помощью translateX по вертикали же запрещаем если горизонтальный свайп больше вертикального

    data () {
        return {
          isDesktop: true,
          slideIndex: 0,
          sliderContainerWidth: 0,
          touchStartX: null,
          touchMoveX: null,
          touchMoveY: null,
          translateX: 0,
          currTransformX: 0,
          isMouseDown: false,
        };
      },
     methods: {
      onTouchStart (event) {
          this.touchStartX = event.touches[0].clientX;
          this.touchStartY = event.touches[0].clientY;
        },
    
        onTouchMove (event) {
          this.touchMoveX = event.touches[0].clientX;
          this.touchMoveY = event.touches[0].clientY;
    
          const dx = Math.abs(this.touchMoveX - this.touchStartX);
          const dy = Math.abs(this.touchMoveY - this.touchStartY);
    
          if (dx > dy) {
            event.preventDefault(); // запрещаем вертикальную прокрутку, если свайп горизонтальный
            this.translateX = this.touchMoveX - this.touchStartX; // разница координат между началом свайпа и текущим состоянием пальца
            this.$refs.sliderWrapper.style.transform = `translateX(${this.currTransformX + this.translateX}px)`; // сдвигаем слайдер на нужное количество пикселей вправо или влево в зависимости от знака this.translateX
          }
        },
    }
    Ответ написан
    Комментировать