Javascript 垂直滚动时禁用FlexSlider交互

Javascript 垂直滚动时禁用FlexSlider交互,javascript,jquery,css,touch,flexslider,Javascript,Jquery,Css,Touch,Flexslider,我在用电话。当用户开始在触摸设备上垂直滚动页面时,我想禁用与滑块的任何交互,特别是当用户开始在滑块上触摸并垂直滑动时。我该怎么做 到目前为止,我所尝试的: 当用户在滑块上水平滑动时,禁用页面的垂直滚动:jQuery(document).on('touchmove',function(event_u){event_u.preventDefault();})=>有效 使用if(\u scrollTop!==jQuery(window.scrollTop())方法=>检测垂直滚动 在滑块上方放置一层,

我在用电话。当用户开始在触摸设备上垂直滚动页面时,我想禁用与滑块的任何交互,特别是当用户开始在滑块上触摸并垂直滑动时。我该怎么做

到目前为止,我所尝试的:

  • 当用户在滑块上水平滑动时,禁用页面的垂直滚动:
    jQuery(document).on('touchmove',function(event_u){event_u.preventDefault();})
    =>有效

  • 使用
    if(\u scrollTop!==jQuery(window.scrollTop())
    方法=>检测垂直滚动

  • 在滑块上方放置一层,以防止垂直滚动时滑块上出现任何进一步的触摸事件:
    jQuery(“#flexslider touch blocker”).show().focus()
    =>不起作用
  • 层方法(步骤3)在从一开始就有
    display:block
    时起作用,因此触摸事件直接触发并被阻挡层捕获。但是,如果用户已经在滚动页面,并且我在用户指尖正下方打开了阻止层,那么触摸事件显然不会到达该层。为什么?注:为了回答问题的这一部分,我给了额外的互联网积分

    垂直滚动时,是否有其他方法禁用FlexSlider交互?可能在插件上使用纯css,可能使用
    overflow:hidden还是别的什么

    请不要建议使用其他插件或自己创建一个,因为我正在广泛使用FlexSlider功能


    更新:

    作为临时解决方案,我编辑了插件的源代码:

    function onTouchMove(e) {
        // START OF LIB EXTRANEOUS CODE
        if (jQuery(this).hasClass('disabled')) { return; }
        // END OF LIB EXTRANEOUS CODE
    

    无论如何,如果你能想出一个更好的主意,那就太好了。

    我也遇到了同样的问题,并从FlexSlider GitHub中找到了一个潜在的解决方案:

    根据这一建议,我在用户不滚动时删除了
    touchmove
    侦听器,从而使其正常工作:

    el.removeEventListener('touchmove', onTouchMove, false);
    
    因此,
    onTouchMove()
    类现在看起来如下所示:

    function onTouchMove(e) {
        dx = (vertical) ? startX - e.touches[0].pageY : startX - e.touches[0].pageX;
        scrolling = (vertical) ? (Math.abs(dx) < Math.abs(e.touches[0].pageX - startY)) : (Math.abs(dx) < Math.abs(e.touches[0].pageY - startY));
        if (!scrolling || Number(new Date()) - startT > 500) {
            e.preventDefault();
            if (!fade && slider.transitions) {
                if (!vars.animationLoop) {
                    dx = dx/((slider.currentSlide === 0 && dx < 0 || slider.currentSlide === slider.last && dx > 0) ? (Math.abs(dx)/cwidth+2) : 1);
                }
                slider.setProps(offset + dx, "setTouch");
            }
        } else {
            el.removeEventListener('touchmove', onTouchMove, false);
        }
    }
    
    函数onTouchMove(e){
    dx=(垂直)?startX-e.touchs[0]。pageY:startX-e.touchs[0]。pageX;
    滚动=(垂直)?(Math.abs(dx)500){
    e、 预防默认值();
    如果(!淡入淡出和滑动条.transitions){
    如果(!vars.animationLoop){
    dx=dx/((slider.currentSlide==0&&dx<0 | | slider.currentSlide==slider.last&&dx>0)?(Math.abs(dx)/cwidth+2):1);
    }
    slider.setProps(偏移量+dx,“setTouch”);
    }
    }否则{
    el.removeEventListener('touchmove',onTouchMove,false);
    }
    }
    
    谢谢贾斯汀。我仍然在寻找一个不改变插件代码的解决方案。在这个问题发布大约2个月后,Flexslider将这个修复提交到他们的主代码中。