How to prevent pull-down-to-refresh of mobile chrome

后端 未结 4 1060
我在风中等你
我在风中等你 2020-12-09 15:15

I want to prevent pull-down-to-refresh of mobile chrome(especially iOS chrome). My web application has vertical panning event with device-width and device-height viewport, b

相关标签:
4条回答
  • 2020-12-09 15:29

    Try this.

    body {
      /* Disables pull-to-refresh but allows overscroll glow effects. */
      overscroll-behavior-y: contain;
    }
    

    It worked well for me. I had weird scrolling issues due to other javascript hacks. Read this article for more details.

    https://developers.google.com/web/updates/2017/11/overscroll-behavior

    0 讨论(0)
  • 2020-12-09 15:30

    The css-only answers posted here did not work for me. I ended up doing the following:

    (function() {
        var touchStartHandler,
            touchMoveHandler,
            touchPoint;
    
        // Only needed for touch events on chrome.
        if ((window.chrome || navigator.userAgent.match("CriOS"))
            && "ontouchstart" in document.documentElement) {
    
            touchStartHandler = function() {
                // Only need to handle single-touch cases
                touchPoint = event.touches.length === 1 ? event.touches[0].clientY : null;
            };
    
            touchMoveHandler = function(event) {
                var newTouchPoint;
    
                // Only need to handle single-touch cases
                if (event.touches.length !== 1) {
                    touchPoint = null;
    
                    return;
                }
    
                // We only need to defaultPrevent when scrolling up
                newTouchPoint = event.touches[0].clientY;
                if (newTouchPoint > touchPoint) {
                    event.preventDefault();
                }
                touchPoint = newTouchPoint;
            };
    
            document.addEventListener("touchstart", touchStartHandler, {
                passive: false
            });
    
            document.addEventListener("touchmove", touchMoveHandler, {
                passive: false
            });
    
        }
    })();
    
    0 讨论(0)
  • 2020-12-09 15:34

    Scroll behavior none works for me like this.

    body {
        overscroll-behavior: none 
    }
    
    0 讨论(0)
  • 2020-12-09 15:56

    For latest versions of Chrome:

    html,
    body {
        overscroll-behavior-y: contain;
    }
    

    Old solution:

    Since mobile Chrome >= 56 event listeners are passive by default and passive event listeners can't prevent defaults anymore. See here You have to use active event listeners instead like so:

    document.addEventListener('touchstart', touchstartHandler, {passive: false});
    document.addEventListener('touchmove', touchmoveHandler, {passive: false});
    
    0 讨论(0)
提交回复
热议问题