• 一款易用、高可定制的vue翻页组件 vo-pages


    一款易用、高可定制的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:上拉超过pullUpHandlethreshold触发
    • pullingDown: 下拉超过pullDownHandlethreshold触发

    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);
                }

    原文地址:https://juejin.im/post/5d81da4551882556ba55e50e

  • 相关阅读:
    Rx 键值观察KVO的使用
    js总结(6.1)获取DOM的各个属性 补充部分
    js总结(8)轮播小总结
    js总结 (7)事件
    js总结 (书本)《JavaScript DOM编程艺术 第2版》笔记
    js总结 (6) DOM操作 节点元素 遍历树
    css 补充之 checked应用 制作选中效果,以及z-index和position-fixed transfrom 之间层级关系
    js总结 (4)JavaScript高级程序设计
    js总结 (5)原型 原型链,,,继承的问题
    Css权威指南总结
  • 原文地址:https://www.cnblogs.com/haonanZhang/p/11635198.html
Copyright © 2020-2023  润新知