一款易用、高可定制的vue翻頁組件
在線體驗:pages.cixi518.com
使用
npm i vo-pages --save
vo-pages組件父元素必須設置固定高度並填寫屬性overflow: hidden;如:
height: 100vh;
overflow: hidden;
全局引入
// mian.js import VoPages from "vo-pages"; import "vo-pages/lib/vo-pages.css"; Vue.component('VoPages', VoPages)
局部引入
import VoPages from 'vo-pages'; import "vo-pages/lib/vo-pages.css"; components: { VoPages }
常規使用
<vo-pages :data="list" @pullingUp="pullingUp" @pullingDown="pullingDown" :loadedAll="loadedAll"> <ul class="article-list"> <li class="article" v-for="article in list" :key="article.id"> <slot></slot> <div class="left"> <img :src="article.image_uri" alt="thumb" /> </div> <div class="right"> <p>{{ article.title }}</p> <p>{{ article.author }}</p> </div> </li> </ul> </vo-pages>
API

config配置項
管道符后面的值是pullDownToLoadmore為ture時(下拉加載更多)的默認值

Events
- pullingUp:上拉超過
pullUpHandle的threshold觸發 - pullingDown: 下拉超過
pullDownHandle的threshold觸發
Slot
只有一個默認插槽,用來展示用戶數據
注意
- 數據不足一屏時且有下一頁時會自動請求下一頁數據
完整案例
html
<vo-pages :data="notice_list" @pullingUp="pullingUp" @pullingDown="pullingDown" :loadedAll="loadedAll"> <div class="news_item_wrap" v-for="(item, index) in notice_list" :key="index" @click="newsDetail(item.information_id)" > <div class="news_item_pic" v-lazy:background-image="item.poster" v-if="item.poster && item.poster != ''" style="background-size: cover;background-repeat: no-repeat;background-position: center top;" > </div> <div class="news_word_wrap"> <div class="news_title">{{item.title}}</div> <div class="news_bottom_wrap"> <span class="news_push_time">{{item.create_time}}</span> <van-tag class="news_tag_bottom" color="#FA4E4E" v-if="item.tag == '推薦'">推薦</van-tag> <img class="hot_tagNews" src="../../assets/newsHot.png" v-if="item.tag == '熱門'" alt=""> </div> </div> </div> </vo-pages>
js
/** * 初始化 */ initDate(str){ var json = { page: this.page }; const toast = Toast.loading({ duration: 0, // 持續展示 toast forbidClick: true, // 禁用背景點擊 loadingType: 'spinner', message: '拼命加載中' }); this.apiPost('/api/info/list',json) .then((res) => { Toast.clear(); if(res.ret == 0){ if(str == 'connect'){ // 數據連接在一起 this.notice_list = this.notice_list.concat(res.data.list); }else{ this.notice_list = res.data.list; } this.total_page = parseInt(res.data.total_page); if(res.data.current_page < this.total_page){ this.page = res.data.current_page + 1; this.loadedAll = false; }else{ this.page = res.data.current_page + 1; this.loadedAll = true; // 全部加載結束 } }else{ Toast.fail(res.res_info); } }, (err) => { console.log(err) }); }, /** * 上拉加載 */ pullingUp(){ setTimeout( () => { this.initDate('connect'); }, 300); }, /** * 下拉刷新 */ pullingDown(){ this.page = 1; setTimeout( () => { this.initDate(); }, 400); }
