【问题标题】:scrollIntoView not executed in touch event listenerscrollIntoView 未在触摸事件侦听器中执行
【发布时间】:2020-12-03 10:19:51
【问题描述】:

我正在尝试制作垂直滑动,它可以在带有滚轮事件的桌面上运行,但 scrollIntoView 方法不会在触摸事件侦听器中执行。

这里是代码

let startClientY, endClientY;
    page.addEventListener("touchstart", (event) => {
        startClientY = event.touches[0].pageY;
    }, false);

    page.addEventListener("touchmove", (event) => {
        endClientY = event.touches[0].pageY;
    }, false);

    page.addEventListener("touchend", (event) => {
        let diff = startClientY - endClientY;
        if (diff < -35) {
            if( i !== 0 ) {
                slides[i - 1].scrollIntoView({
                    behavior: "smooth", block: "start"
                });
                i--;
                console.log('scroll top'); // this code is executed as well
            }
        } else if (diff > 35) {
            if( i < slides.length -1) {
                slides[i + 1].scrollIntoView({
                    behavior: "smooth", block: "start"
                });
                i++;
                console.log('scroll down'); // this code is executed
            }
        }
        startClientY = undefined;
        endClientY = undefined;
    }, false);

奇怪的一点是条件里面的控制台日志被执行,而scrollIntoView方法在eventListeners之外起作用

我错过了什么?

【问题讨论】:

    标签: javascript scroll touch slide


    【解决方案1】:

    问题来自触摸事件侦听器中的 scrollIntoView 行为选项,我找到了另一种方法来实现我想要的。

    let slideHeight = page.offsetHeight;
    page.addEventListener("touchstart", function (event) {
    startClientY = event.touches[0].pageY;
    }, {
        capture: true,
        passive: true
    });
    
    page.addEventListener("touchmove", function (event) {
        endClientY = event.touches[0].pageY;
    }, {
        capture: true,
        passive: true
    });
    
    page.addEventListener("touchend", (event) => {
        let diff = startClientY - endClientY;
        if (diff < -35) {
            if (i !== 0) {
                page.scrollBy(0, -slideHeight);
                i--;
            }
        } else if (diff > 35) {
            if (i < slides.length - 1) {
                page.scrollBy(0, slideHeight);
                i++;
            }
        }
        startClientY = undefined;
        endClientY = undefined;
    }, {
        capture: true,
        passive: true
    });
    

    page 变量是我的幻灯片 希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 2020-09-06
      • 2013-05-19
      • 1970-01-01
      • 2020-12-09
      • 2021-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多