關於使用Iscroll.js異步加載數據後不能滑動到最底端的問題解決方案

關於使用Iscroll.js異步加載數據後不能滑動到最底端,拉到最下邊又彈回去的問題困擾了我老半天,相信不少朋友都遇到了。我恰好不當心解決了,和你們分享一下。因爲各類忙,下邊就直接上代碼吧。javascript

(前提是你定義的iscroll.js正常狀況下已經能使頁面滑動,這個我就無論了)css

html關鍵代碼:html

<div class="middle" id="wrapper">java

  <div id="scroller">node

    ^^^^^^^^^^這裏是你的要加載的數據內容,本身完成(異步加載)。jquery

  </div>app

</div>異步

JS代碼:ide

<script type="text/javascript" src="~/Scripts/jquery.min.js"></script>函數

<script type="application/javascript" src="~/Scripts/iscroll.js"></script>

<script type="text/javascript">

var myscroll;
function loaded() {
    myScroll = new iScroll('wrapper', {
        fixedScrollbar: true, hideScrollbar: true, fadeScrollbar: true, mouseWheel: true, snap: true,
        onBeforeScrollStart: function (e) {
            var target = e.target;
            while (target.nodeType != 1) target = target.parentNode;
            if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA') {
                e.preventDefault();
            }
        },
        onBeforeScrollMove: function (e) {
            e.preventDefault();
        },
        onScrollEnd: function (e) {
            var resultH = $("#wrapper").height();
            $("#wrapper").css("height", resultH);
            setTimeout(function () {
                myScroll.refresh();
                myScroll.options.snap = true;
            }, 100);
        }
    },120);
}

window.addEventListener("load", loaded, true);
document.addEventListener('touchmove', function (e) { e.preventDefault(); }, true);
document.addEventListener('DOMContentLoaded', allowFormsInIscroll, false);

function allowFormsInIscroll() {
    [].slice.call(document.querySelectorAll('input, select, button')).forEach(function (el) {
        el.addEventListener(('ontouchstart' in window) ? 'touchstart' : 'mousedown', function (e) {
            e.stopPropagation();
        })
    })
}

</script>

 

原理不外乎加載完了後,從新計算一下高度,而後刷新Iscroll就能夠了。其它多餘的那些函數,你也別問我那是幹嗎用的,反正若是沒有的話,有的手機在填寫表單啥的時候會給你驚喜。

相關文章
相關標籤/搜索