• ios下使用overflow scroll情况下,到达最极端的情况时会拖动整个页面的解决办法


    今天开发ipad webapp时,遇到个问题就是在支持内部滚动(overflow:scroll)的页面中,在滚到到最极端(最上或者最下时),会拖动整个页面,带来不好的用户体验。

    方法一,从网上找到的:

    function preventOverScroll(scrollPane) {
    // See http://www.quirksmode.org/js/events_order.html
    var CAPTURE_PHASE = true; // happens first, outside to inside
    var BUBBLE_PHASE = false; // happens second, inside to outside
    
    // These variables will be captured by the closures below
    var allowScrollUp = true, allowScrollDown = true, lastY = 0;
    
    scrollPane.addEventListener
    (‘touchstart’,
    function (e) {
    
    // See http://www.w3.org/TR/cssom-view/#dom-element-scrolltop
    allowScrollUp = (this.scrollTop > 0);
    allowScrollDown = (this.scrollTop < this.scrollHeight – this.clientHeight);
    
    // Remember where the touch started
    lastY = e.pageY;
    },
    CAPTURE_PHASE);
    
    // If the touch is on the scroll pane, don’t let it get to the
    // body object which will cancel it
    scrollPane.addEventListener
    (‘touchmove’,
    function (e) {
    var up = (event.pageY > lastY);
    var down = !up;
    lastY = event.pageY;
    
    // Trying to start past scroller bounds
    if ((up && allowScrollUp) || (down && allowScrollDown)) {
    // Stop this event from propagating, lest
    // another object cancel it.
    e.stopPropagation();
    } else {
    // Cancel this event
    event.preventDefault();
    }
    },
    CAPTURE_PHASE);
    }
    

    方法二自己想出来的,因为我发现非最极端(非最上或者最下时)时,就不会拖动整个页面,那么问题就简单了:

           scrollPane.addEventListener('touchstart', function(){
                    if(this.scrollTop === 0){
                        //滚动到1
                        this.scrollTop =1;
                    }else if(this.scrollTop == this.scrollHeight - this.clientHeight){
                        //滚动到最低端-1
                        this.scrollTop =this.scrollHeight - this.clientHeight -1;
                    } 
                }, true);
    

      

      

  • 相关阅读:
    返回一个整数数组中最大子数组的和
    VMware安装CentOS7的详细过程
    Spark Streaming实时数据分析
    Spark SQL快速离线数据分析
    Spark-HBase集成错误之 java.lang.NoClassDefFoundError: org/htrace/Trace
    Spark2.X集群运行模式
    Spark on Yarn运行错误:Yarn application has already ended! It might have been killed or unable to launch application master
    基于IDEA环境下的Spark2.X程序开发
    Spark2.X环境准备、编译部署及运行
    Cloudera HUE大数据可视化分析
  • 原文地址:https://www.cnblogs.com/webzhangnan/p/3152679.html
Copyright © 2020-2023  润新知