How to disable rubber band in iOS web apps?

前端 未结 8 1642
夕颜
夕颜 2020-12-01 00:50

This:

$(\'body\').on(\'touchmove\', function(e) { e.preventDefault(); });

Works, but will disable scrolling throughout the whole page, whic

8条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-01 01:49

    I wrote, in my opinion, the best solution for this problem. It will disable scrolling in general unless the element has y scrolling.

    /********************************************************************************
     * Disable rubber band (c)2013 - Mark van Wijnen | www.CrystalMinds.nl
     ********************************************************************************/
    $(function(){
        var scrollY = 0;
    
        $(document).on('touchstart', function( e ){
            scrollY = e.originalEvent.touches.item(0).clientY;
        });
    
        $(document).on('touchmove', function( e ){
            var scrollPos       = e.target.scrollTop;
            var scrollDelta     = scrollY - e.originalEvent.touches.item(0).clientY;
            var scrollBottom    = scrollPos + $(e.target).height();
            scrollY             = e.originalEvent.touches.item(0).clientY;
    
            if ( $(e.target).css( 'overflow-y' ) != 'scroll' || ( scrollDelta < 0 && scrollPos == 0 ) || ( scrollDelta > 0 && scrollBottom == e.target.scrollHeight ) ) 
                e.preventDefault();
        });
    });
    

提交回复
热议问题