无限滚动插件Infinite Scroll

最近一个项目需要用到无限滚动,调查了很多最后用了Infinite Scroll这个插件。

优点

ajax的函数是内部已经封装好,所有不需要单独的调用。

后台返回的形式既可以是静态html形式也可以说json  。

使用infinite-scroll

安装引用就不写了,可以去官网自己看。

1.主的HTML部分

<div class="container"> 

</div>
<div class="page-load-status">
    <div class="loader-ellips infinite-scroll-request"><!-- 在加载时显示 -->
        <span class="loader-ellips__dot"></span>
        <span class="loader-ellips__dot"></span>
        <span class="loader-ellips__dot"></span>
        <span class="loader-ellips__dot"></span>
    </div>
    <p class="infinite-scroll-last">End of content</p><!-- 最后一页加载完了显示 -->
    <p class="infinite-scroll-error">No more pages to load</p><!-- 加载错误的时候显示 -->
</div>

2.主的css部分

body {
  font-family: sans-serif;
  line-height: 1.4;
  font-size: 18px;
  margin: 0 auto;
}

.page-load-status {
  display: none;
  padding-top: 20px;
  border-top: 1px solid #DDD;
  text-align: center;
  color: #777;
}
.loader-ellips {
  font-size: 20px; /* change size here */
  position: relative;
  width: 4em;
  height: 1em;
  margin: 10px auto;
}

.loader-ellips__dot {
  display: block;
  width: 1em;
  height: 1em;
  border-radius: 0.5em;
  background: #555; /* change color here */
  position: absolute;
  animation-duration: 0.5s;
  animation-timing-function: ease;
  animation-iteration-count: infinite;
}

.loader-ellips__dot:nth-child(1),
.loader-ellips__dot:nth-child(2) {
  left: 0;
}
.loader-ellips__dot:nth-child(3) { left: 1.5em; }
.loader-ellips__dot:nth-child(4) { left: 3em; }

@keyframes reveal {
  from { transform: scale(0.001); }
  to { transform: scale(1); }
}

@keyframes slide {
  to { transform: translateX(1.5em) }
}

.loader-ellips__dot:nth-child(1) {
  animation-name: reveal;
}

.loader-ellips__dot:nth-child(2),
.loader-ellips__dot:nth-child(3) {
  animation-name: slide;
}

.loader-ellips__dot:nth-child(4) {
  animation-name: reveal;
  animation-direction: reverse;
}

3.页的HTML部分

<div class="container">
    <article class="post">
        <!-- 内容 --> 
    </article>
</div>

4.主的js部分,也是最主要的部分

var infScroll = new infinitescroll('.container', {
    path: function () { 
        var maxPage = 10; //最大页数
        if (this.loadCount < maxPage) {
            var pageNumber = this.loadCount + 1;
            return '/demo/image?page=' + pageNumber;
        }
    },
    append: '.post', // 把页面显示出来的方式,默认是false
//  responseType: 'text', // 设置页面请求返回的响应类型 text时是json
    prefill: true, //预填充 ,加上后append属性必须。
    status: '.page-load-status',
    hideNav: '.pagination',
    history: false, //更改浏览器历史记录和URL。
    scrollThreshold: 100//设置滚动条与滚动区域之间的距离,默认是400
})

5.几个常用的事件

// 页面请求加载下一页时触发。
infScroll.on('request', function (path) {

})

// 页面附加到容器前触发。
infScroll.on('load', function (response, path) {

});

// 页面附加到容器后触发。 append: '.post'有效。
infScroll.on('append', function (response, path, items) {

});

6.最后

其他的功能还有一些,主要还是需要去看官方文档。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Vue 中实现无限滚动可以使用 `InfiniteScroll` 插件。这个插件可以自动监听滚动事件,当滚动到底部时,会自动触发加载更多数据的方法。 首先,你需要在你的 Vue 项目中安装 `vue-infinite-scroll` 插件。可以使用以下命令进行安装: ``` npm install vue-infinite-scroll --save ``` 安装完成之后,在你的 Vue 组件中引入 `InfiniteScroll` 插件,并使用 `v-infinite-scroll` 指令实现无限滚动。 例如,在一个商品列表的组件中: ```html <template> <div class="product-list"> <div v-for="(product, index) in productList" :key="index">{{product.name}}</div> <div v-if="loading">加载中...</div> </div> </template> <script> import InfiniteScroll from 'vue-infinite-scroll' export default { name: 'ProductList', data() { return { productList: [], // 商品列表 pageNum: 1, // 当前页码 pageSize: 10, // 每页数量 loading: false, // 是否正在加载 } }, mounted() { // 初始化加载第一页数据 this.loadData() }, methods: { // 加载数据 loadData() { this.loading = true // 模拟异步请求数据 setTimeout(() => { // 获取数据 const data = this.getProducts(this.pageNum, this.pageSize) // 添加到商品列表中 this.productList = [...this.productList, ...data] // 加载完成 this.loading = false // 更新页码 this.pageNum++ }, 1000) }, // 获取商品数据 getProducts(pageNum, pageSize) { // 模拟请求数据 const productList = [] for (let i = 0; i < pageSize; i++) { const id = (pageNum - 1) * pageSize + i productList.push({ id, name: `商品${id}`, }) } return productList }, }, directives: { InfiniteScroll, }, } </script> ``` 上面的代码中,我们使用 `v-for` 指令渲染商品列表,并且使用 `v-if` 指令判断是否正在加载数据。 在 `mounted` 钩子函数中,我们首先加载第一页数据。 在 `loadData` 方法中,我们先将 `loading` 标记为 `true`,表示正在加载数据。然后使用 `setTimeout` 模拟异步请求数据,并在加载完成后将数据添加到 `productList` 中。最后将 `loading` 标记为 `false`,表示加载完成。同时,更新 `pageNum` 的值,以便下一次加载更多数据。 在组件中使用 `v-infinite-scroll` 指令,指定 `loadData` 方法。当滚动到底部时,`loadData` 方法会自动触发。 ```html <template> <div class="product-list" v-infinite-scroll="loadData"> <div v-for="(product, index) in productList" :key="index">{{product.name}}</div> <div v-if="loading">加载中...</div> </div> </template> ``` 这样,当用户滚动到页面底部时,就会自动加载更多数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值