首页 » 收集 » 正文内容
Typecho文章列表无限滚动加载的方法
寻梦xunm| 458| 收集
1年前
超过578天 温馨提示
本文最后更新于2023年02月20日,已超过578天没有更新,若内容或图片失效,请留言反馈。

方法一

这里介绍一个jQuery插件:Infinite AJAX Scroll,通过这个插件能快速实现无限滚动翻页。因为是jQuery所以到处都能用,这里我们以Typecho作为例子。

第一步接入Infinite AJAX Scroll
下载Infinite AJAX Scroll,放到对应主题的js文件夹中。因为是jQuery插件,我们还要先连上jQuery。打开header.php页面,插入如下代码:

<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script src="<?php $this->options->themeUrl('js/jquery-ias.js'); ?>"></script>

第二步为Typecho加上分页
如果看官网文档的话,它会告诉你分页代码用带有数字列表的<?php $this->pageNav(); ?>。如果你用的是这个代码,请务必换成<?php $this->pageLink('下一页','next'); ?>。

步骤三调整代码
把下面这段代码插在步骤一代码的后面即可,然后我们要做一些调整。

<script type="text/javascript">
var ias = jQuery.ias({
container:  '#posts',    //大容器
item:       '.post',    //循环容器
pagination: '#pagination',    //分页容器
next:       '.next'    //下一页的class
});
 ias.extension(new IASTriggerExtension({
        text: '加载更多', //此选项为需要点击时的文字
        offset: 2, //load多少页后显示加载更多按钮
    }));
ias.extension(new IASSpinnerExtension());    //加载时的图片
ias.extension(new IASNoneLeftExtension({text: "已经没有文章了"}));    //到底后显示的文字
</script>

我们需要把容器对应的id和class填上,
item指的是循环列表的容器,就是列表中的文章最外层div的id或者class
container是整个大容器,就是包裹文章列表的div的id或者class
pagination是分页所在的容器,就是包裹分页按钮的div的id或者class
next是下一页对应的class,就是分页按钮超链接的class
如果没有id或者class,就自己加一个。为了更方便理解,我偷了个图,基本就是这样的

步骤四重载函数
因为文章可能含有缩略图,而缩略图可能会用到惰性加载的js,所以ajax加载文章后,缩略图可能加载异常,这时我们需要在步骤三的代码最后加上一条

ias.on('rendered', function(items) {
//你的重载函数
})

常见的惰性加载需要重载的函数
Lazyload

    $("img.lazy").lazyload({effect:"fadeIn"}); //这里是你调用Lazyload的代码
blazy

;(function() {
            // Initialize 
            var bLazy = new Blazy();
        })();

方法二

纯属记着自己看的,功能这东西就跟搭积木一样,缺什么装什么。“程序基本上不是写出来的,而是粘贴过来,重新排列组合一番,再敲上几个语句补充修正一下,就算大功告成。”张戈博客里的一句话,我觉得我就这样折腾的。

首先找到index.php,然后把主题默认的分页导航的容器换成下面的容器。

<!-- typecho用这个 -->
<?php $this->pageLink('点击查看更多','next'); ?>

<!-- wordpress用这个 -->
<?php next_posts_link(__('点击查看更多')); ?>

然后找到你主题的footer.php,把下面的js代码丢前面进去就可以了。

<script type="text/javascript">
//点击加载更多
jQuery(document).ready(function($) {
    //点击下一页的链接(即那个a标签)
    $('.next').click(function() {
        $this = $(this);
        $this.addClass('loading').text('正在努力加载'); //给a标签加载一个loading的class属性,用来添加加载效果
        var href = $this.attr('href'); //获取下一页的链接地址
        if (href != undefined) { //如果地址存在
            $.ajax({ //发起ajax请求
                url: href,
                //请求的地址就是下一页的链接
                type: 'get',
                //请求类型是get
                error: function(request) {
                    //如果发生错误怎么处理
                },
                success: function(data) { //请求成功
                    $this.removeClass('loading').text('点击查看更多'); //移除loading属性
                    var $res = $(data).find('.post'); //从数据中挑出文章数据,请根据实际情况更改
                    $('#content').append($res.fadeIn(500)); //将数据加载加进posts-loop的标签中。
                    var newhref = $(data).find('.next').attr('href'); //找出新的下一页链接
                    if (newhref != undefined) {
                        $('.next').attr('href', newhref);
                    } else {
                        $('.next').remove(); //如果没有下一页了,隐藏
                    }
                }
            });
        }
        return false;
    });
});
</script>

css美化按钮:这里就不写了。每个主题风格都不一样,还是自己自定义吧。

来自:https://www.lanmit.com/179.html
参考:
http://www.19871222.com/infinite-ajax-scroll.html
https://salongweb.com/infinite-ajax-scroll.html

0 赞 or 打赏
喜欢就打赏一点
微信 支付宝
隐私
Q Q:1340326824
邮箱:vipshiyi@qq.com
QQ群:422720328

我的音乐

微博客-专为自己编写开发的源码