Ghost博客系统默认提供的博文列表为传统的翻页方式(通过点击上一页、下一页等按钮来切换),随着移动客户端的发展,瀑布流式的滚动加载方式得到广泛应用,有效地提高了用户浏览信息的流畅度。下面详述如何通过Infinite Scroll来改造Ghost博文列表的翻页效果。

Infinite Scroll

Infinite Scroll顾名思义:无限滚动,也称为自动分页、滚动分页和无限分页,是基于jquery的一个插件。可以用来实现滚动页面的时候加载下一页的内容。

infinite-scroll项目地址

实现步骤

  • jquery.infinitescroll.min.js拷贝到你的主题目录下
  • 在循环获取posts列表的页面上引入jquery.infinitescroll.min.js文件

注意:jquery.infinitescroll.min.js必须在jquery引入之后

<script src="{{asset "js/jquery.infinitescroll.min.js"}}"></script>
  • 尝试一下最简配置,若我们的页面结构如下
{{#foreach posts}}<article class="{{post_class}}">{{!有封面的时候展示封面}}{{#if image}}<a class="post-pic hidden-xs" href="{{url}}" style="background-image: url({{image}});"></a>{{/if}}<header class="post-header"><h2 class="post-title"><a href="{{url}}">{{{title}}}</a></h2></header><section class="post-excerpt"><p>{{excerpt characters="140"}} <a class="read-more" href="{{url}}">»</a></p></section><footer class="post-meta">{{#if author.image}}<img class="author-thumb" src="{{author.image}}" alt="{{author.name}}" nopin="nopin" />{{/if}}{{author}}{{tags prefix=" <i class=\"fa fa-tags\"></i> "}}<time class="post-date" datetime="{{date format='YYYY-MM-DD'}}">{{date format="YYYY年MM月DD日"}}</time></footer></article>
{{/foreach}}<nav class="pagination" role="navigation">{{#if prev}}<a class="newer-posts" href="{{page_url prev}}">← 上一页</a>{{/if}}<span class="page-number">第 {{page}} 页 ⁄ 共 {{pages}} 页</span>{{#if next}}<a class="older-posts" href="{{page_url next}}">下一页 →</a>{{/if}}
</nav>
  • 我们可以通过如下代码将原来点击上一页、下一页的翻页模式变成滚动翻页
<script>$(document).ready(function (){$('#posts-content').infinitescroll({navSelector  : "nav.pagination",nextSelector : "nav.pagination a:last",itemSelector : "article"});});
</script>

使用解析

  • 通过id选择器$('#posts-content')选中post列表的循环展示区域,后续加载的内容会被append到这个节点之下
  • navSelector参数,用来选中翻页模块的html位置,如上配置即选中了nav标签class为pagination的元素,框架会将这部分内容隐藏(隐藏原来的翻页模块)
  • nextSelector参数,标出下一页的请求链接,框架根据此获取下一页的请求以发起ajax请求获取下一页的html内容
  • itemSelector参数,在发起了下一页请求之后,通过这个参数的配置来截取下一页html内容中post部分来填充到navSelector选中位置的最后

进阶配置

在完成了上面操作之后,还可以做一些进阶的配置,比如修改加载中的文字描述,没有内容之后的提示内容等等。

下面是本站使用的配置,供参考。

<script>$(document).ready(function (){$('#posts-content').infinitescroll({navSelector  : "nav.pagination",nextSelector : "nav.pagination a:last",itemSelector : "article",animate : false,bufferPx: 5,extraScrollPx: 50,loading: {speed: 'fast',selector: null,msgText: '加载中...',finishedMsg:'<div class="post-loading">没有更多了</div>'}});});
</script>

更多参数配置可参见:infinite-scroll

本博客主题项目地址

使用infinite-scroll实现Ghost博文列表的滚动加载相关推荐

  1. mint-ui 中 Infinite scroll 在tab-container中使用数据全部加载的问题

    项目中用到了Infinite scroll 这个组件,但是初始化的时候,getList总会请求两次, 网上查了部分资料,如 <ul class="mui-table-view &quo ...

  2. vue 滑动加载列表 php,通过原生vue添加滚动加载更多功能

    这篇文章主要介绍了通过原生vue添加滚动加载更多功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 vue中添加滚动加载更多,因为是单页面所以需要在 ...

  3. 【实现手机端上滑滚动加载列表】判断页面是否滚动到底部或者指定元素位置

    <script> export default {data() {return {pageIndex: 0,//页码pageSize: 10,//每次加载条数lock: false,//防 ...

  4. (仿头条APP项目)6.点击过的新闻列表文字变灰和下拉刷新与滚动加载新闻数据

    文章目录 一.点击过的新闻列表文字变灰 效果图 实现思路 导入ormlite数据库类依赖 利用ormlite创建数据库和表 创建数据库类MyDbHelper 创建数据库中的新闻实体类NewInfo 页 ...

  5. 列表异步线程加载图片

    手机客户端以列表形式展示数据是非常常见的一种方式.然而列表中要显示图片(比如:头像)就要采用异步线程加载的方式,这样做是为了防止加载图片数据的时候,花费时间过长,阻塞UI线程,从而达到保持App的流畅 ...

  6. 虚拟列表控件---加载大数据行

    平常所用到的列ListView/ListCtrl控件,都是只有行至几百行数据,直至今日,在项目中遇到了上10W量级数据条,终于感觉到普通加载的艰辛,遂到网上乱找一通,发现大同小异,转载了这篇比较详细的 ...

  7. 图片列表页面的加载优化

    起因 源于文件拍照的列表页预览图,由于图片过大,后端设计时又没有考虑到略缩图的设计,原图片加载时会有加载到一半图片截断的显示效果,为避免这种显示问题,决定使用默认图片填充和js隐式加载图片的方式. 方 ...

  8. h5结合vant框架,实现列表上拉加载下拉刷新

    最近在做h5移动页面开发,并且需要用移动端android和ios将h5嵌进去.在开发过程中,使用了vant这个框架: vant文档:https://youzan.github.io/vant/#/zh ...

  9. flutter实战4:新闻列表的懒加载和下拉手势刷新

    上一篇我们实现了新闻列表,但在网络不好的时候列表会白屏,因此为了提高使用体验,往列表中加入懒加载效果.其次,引入一个Flutter内置的手势控件,用于支持下拉刷新列表的效果如下图: Flutter将异 ...

最新文章

  1. 样式集(三)成功页面样式模板
  2. WCF之自定义信道工厂,信道监听器
  3. 数值分析 pdf_统计分析前,要做哪些数据准备工作?
  4. 森林病虫防治系统 (十一)
  5. form中onsubmit的使用
  6. ubuntu-E:Encountered a section with no Package: header的解决办法
  7. bootstrap带有下拉按钮的输入框_关于bootstrap--表单(下拉select、输入框input、文本域textare复选框checkbox和单选按钮radio)...
  8. mysql中dml操作_MySQL的DML语言操作实例
  9. 小写数字转大写_不得不说的Excel小技巧:设置单元格格式将小写金额转换成大写...
  10. 对象序列化和反序列化是怎么回事
  11. 离开职场3年的宝妈,是该重回职场,还是自己创业呢?
  12. 六年级下册百分数计算题_六年级数学上册期末试卷(附答案)
  13. php 学习笔记之搭建开发环境(mac版)
  14. 苹果 Mac 如何同时输出两个蓝牙喇叭或两副 AirPods 耳机?
  15. show tables mysql_MySQL_解析MYSQL显示表信息的方法,在用mysql时(show tables),有时候 - phpStudy...
  16. 简单二叉树的模型和解法(C++)
  17. Python常见问题解决办法汇总
  18. 蝴蝶键盘 Linux,Macbook蝴蝶键盘与普通键盘有什么不一样? 蝶式结构键盘解析
  19. 语义分割yolov5 v4.0 baseline快速复现 快速跑通 图像分割 图像分类 重新训练,训练结果,测试结果,实验图片-20210227
  20. 计算机专业的创意文案,抖音创意文案大全

热门文章

  1. Qt窗口在屏幕上居中显示
  2. php ajax 时间戳,获取时间戳 和 备用ajax案例
  3. linux进程故障如何修复,33.Linux开机过程及启动故障修复
  4. python期末考试编程题_智慧树知到_Python程序设计基础_期末考试答案
  5. 微信小程序-canvas绘制文字实现自动换行
  6. mysql查询职位大于3_4、MySQL查询(控制行)
  7. sql语句查询商品的一二三级分类都是一个字段怎么办_畅购商城(三):商品管理...
  8. java要从数据查出五百多万条数据_100w条数据 | 插入Mysql你要用多长时间?
  9. linux单cpu进程能并行吗,linux,cpu_如何知道运行多少个进程最有效率?,linux,cpu,并行,parallel-execution - phpStudy...
  10. 顺序表应用7:最大子段和之分治递归法