代码重构 - Javascript Infinite Scroll,如何重构这一段代码
迷茫
迷茫 2017-04-10 14:53:58
[JavaScript讨论组]

用途

当用户手机 scroll 的时候,自动加载分页中的内容。如何让下面这一段代码更优美

代码

javascript//网址:http://xxx.com/game/top-hot/p/1/
//需要先引入 jquery.min.js 库
    var pageAutoLoad = [];
    pageAutoLoad.page = 1 || 1;
    pageAutoLoad.pageTotal = 2 || 1;
    pageAutoLoad.nextUrl = "\/game\/top-hot\/p\/PAGE\/" || '';
    pageAutoLoad.selector = {
        content: '.list_game ul',
        page: '.page_load'
    }
javascript//全局公用部分
//文件位置 /public/js/init.js
$(function(){
    if (typeof pageAutoLoad != 'undefined') {
        $(window).scroll(function () {
            loadData();
        });
    }
});

var totalheight = 0;
function loadData() {
    totalheight = parseFloat($(window).height()) + parseFloat($(window).scrollTop());
    if ($(document).height() <= totalheight) {

        if (pageAutoLoad.page > pageAutoLoad.pageTotal) {
            return;
        }

        var nextPage = pageAutoLoad.page + 1;
        var nextUrl = pageAutoLoad.nextUrl.replace('PAGE', nextPage);

        $.ajax({
            url: nextUrl,
            type: 'GET',
            dataType: 'html',
            error: function () {
                $('.more-link').trigger('click');
            },
            success: function (html) {
                var htmlContent = $(html).find(pageAutoLoad.selector.content).html();
                var htmlPage = $(html).find(pageAutoLoad.selector.page).html();

                $(pageAutoLoad.selector.content).append(htmlContent);
                $(pageAutoLoad.selector.page).html(htmlPage);

                pageAutoLoad.page = nextPage;
            }
        });
    }
}

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
PHP中文网

重構如下:

主要是提取邏輯並抽象。

$.extend({
    InfiniteScroll: function(options) {
        var $window = $(window), $document = $(document);

        options = $.extend({
            onsuccess: function() {},
            onerror: function() {},
            onexhaust: function() {}
        }, options);

        function onscroll() {
            if ($document.height() <= $window.height() + $window.scrollTop() + 10)
                if (options.pageNum + 1 <= options.pageCount)
                    load();
                else
                    options.onexhaust(data);
        }
        function load() {
            var url = options.getUrl(options.pageNum + 1);

            $.ajax({
                url: url,
                type: 'GET',
                dataType: 'html',
                error: error,
                success: success
            });
        }
        function success(data) {
            options.onsuccess(data);
        }
        function error() {
            options.onerror();
        }

        return {
            onscroll: onscroll
        }
    }
});

$(function(){
    $(window).scroll($.InfiniteScroll({
        pageNum: 1,
        pageCount: 2,
        urlTemplate: '/game/top-hot/p/%PAGE%/',
        selector: {
            content: '.list_game ul',
            page: '.page_load'
        }, 
        getUrl: function(pageNum) {
            var url = this.urlTemplate.replace(/%PAGE%/g, pageNum);

            return url;
        },
        onsuccess: function(data) {
            var selector = this.selector,
                $data = $(data),
                content = $data.find(selector.content).html(),
                page = $data.find(selector.page).html();

            $(selector.content).append(content);
            $(selector.page).html(page);

            this.pageNum++;
        },
        onerror: function() {
            $('.more-link').trigger('click');
        }
    }).onscroll);
});
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号