上拉加载,下拉刷新

2019-04-16  本文已影响0人  洛禾sunshime

上拉加载


image.png
image.png

下拉刷新


image.png
image.png

组件代码:

<template>
    <div class="pullto" :style="'height:'+bodyheight+'px'">
        <!--上拉-->
        <div v-if="statement==1">
            <pull-to class="pullbock"
                     :is-bottom-bounce="true"
                     :style="'height:'+bodyheight+'px'"
                     :bottom-load-method="refresh"
                     @bottom-state-change="change"
                     @bottom-pull="bottompull">
                <slot name="listblock"></slot>
                <div class="extra"></div>
                <div class="topblock" slot="bottom-block">
                    <div class="icondiv">
                        <div :class="type=='pull'?'iconfont icon-down1 iconspan':
                                (type=='loading'?'iconfont icon-loading iconspan rotate':
                                (type=='loading-fail'?'iconfont icon-erroring iconspan':
                                (type=='loading-done'?'iconfont iconspan':'')))"></div>
                    </div>
                    <span>{{state}}</span>
                </div>
            </pull-to>
        </div>

        <!--下拉-->
        <div v-if="statement==2">
            <pull-to class="pullbock"
                     :is-top-bounce="true"
                     :style="'height:'+bodyheight+'px'"
                     :top-load-method="refreshtop"
                     @top-state-change="changetop"
                     @top-pull="toppull">
                <slot name="listblock2"></slot>
                <div class="extra"></div>
                <div class="topblock" slot="top-block">
                    <div class="icondiv">
                        <div :class="toptype=='pull'?'iconfont icon-fangxiangjiantou-copy-copy-copy iconspan':
                                (toptype=='loading'?'iconfont icon-loading iconspan rotate':
                                (toptype=='loading-fail'?'iconfont icon-erroring iconspan':''))"></div>
                    </div>
                    <span>{{topstate}}</span>
                </div>
            </pull-to>
        </div>

        <!--上拉+下拉-->
        <div v-if="statement==3">
            <div class="opacityZati"
                 style="height:100vh;width:100%;opacity:0;z-index:1000;position:fixed;top:0;left:0; background:red"
                 v-if="isBlock"></div>
            <pull-to class="pullbock"
                     :is-bottom-bounce="true"
                     :is-top-bounce="true"
                     :style="'height:'+bodyheight+'px'"
                     :bottom-load-method="refresh"
                     :top-load-method="refreshtop"
                     @bottom-state-change="change"
                     @top-state-change="changetop"
                     @bottom-pull="bottompull"
                     @top-pull="toppull">
                <slot name="listblock3"></slot>
                <div class="extra"></div>
                <div class="topblock" slot="bottom-block">
                    <!--icon-success-->
                    <div class="icondiv">
                        <div :class="type=='pull'?'iconfont icon-down1 iconspan':
                                (type=='loading'?'iconfont icon-loading iconspan rotate':
                                (type=='loading-fail'?'iconfont icon-erroring iconspan':
                                (type=='loading-done'?'iconfont iconspan':'')))"></div>
                    </div>
                    <span>{{state}}</span>
                </div>
                <div class="topblock" slot="top-block">
                    <div class="icondiv">
                        <div :class="toptype=='pull'?'iconfont icon-fangxiangjiantou-copy-copy-copy iconspan':
                                (toptype=='loading'?'iconfont icon-loading iconspan rotate':
                                (toptype=='loading-fail'?'iconfont icon-erroring iconspan':
                                (toptype=='loading-done'?'iconfont icon-success iconspan':'')))"></div>
                    </div>
                    <span>{{topstate}}</span>
                </div>
            </pull-to>
        </div>
        <!--无-->
        <div v-if="statement==4">
            <pull-to class="pullbock"
                     :is-top-bounce="false"
                     :style="'height:'+bodyheight+'px'"
                     :top-load-method="refreshtop"
                     @top-state-change="changetop"
                     @top-pull="toppull">
                <slot name="listblock4"></slot>
                <div class="extra"></div>
            </pull-to>
        </div>
    </div>
</template>
<script>
  import PullTo from 'vue-pull-to';
  export default {
    name: 'example',
    data() {
        return {
            dataList: [1, 2, 3, 4, 5, 6, 7, 8],
            topConfig: {
                pullText: '上拉加载更多数据', // 下拉时显示的文字
                triggerText: '释放更新', // 下拉到触发距离时显示的文字
                loadingText: '加载中', // 加载中的文字
                doneText: '加载完成', // 加载完成的文字
                failText: '加载失败', // 加载失败的文字
                loadedStayTime: 400, // 加载完后停留的时间ms
                stayDistance: 250, // 触发刷新后停留的距离
                triggerDistance: 70 // 下拉刷新触发的距离
            },
            state: '上拉加载更多数据',
            typing: 'pull',
            topstate: '下拉刷新数据',

            statement: 1,
            className1: '',
            className2: '',
            isBlock: false,
        }
    },
    props: {
        type: String,
        toptype: String,
        bodyheight: Number,

        stating: Number,               //1.默认只有下拉,2.默认只有上拉,3.上拉下拉都有
    },
    components: {
        PullTo
    },
    methods: {
        refresh(loaded) {
            let _this = this;
            let timer = setTimeout(() => {
                _this.$emit('nextpage');
                loaded(_this.type);
                clearTimeout(timer);
            }, 1000);
        },
        refreshtop(loaded) {
            let _this = this;
            _this.isBlock = true;
            _this.$emit('refresh');
            let timer = setTimeout(() => {
                loaded(_this.toptype);
                _this.isBlock = false;
                clearTimeout(timer);
            }, 1000);
        },
        change(value) {             //pull,trigger,loading,loaded-done
            // console.log('======change value=======>',value)
        },
        changetop(value) {          //pull,trigger,loading,loaded-done
            console.log('======change top=======>', value)
        },
        toppull(value) {
        },
        bottompull(value) {
        },
        typetoState() {
            let _this = this;
            if (_this.type == 'pull') {
                _this.state = '上拉加载更多数据';
            }
            else if (_this.type == 'trigger') {
                _this.state = '释放加载更多数据';
            }
            else if (_this.type == 'loading') {
                _this.state = '加载中...';

            }
            else if (_this.type == 'loading-done') {
                _this.state = '已经到底了';
            }
            else if (_this.type == 'loading-fail') {
                _this.state = '加载失败';
            }
            else {
                console.log('上拉的其他情况');
            }
        },
        toptoState() {
            let _this = this;
            if (_this.toptype == 'pull') {
                _this.topstate = '下拉刷新数据';
            }
            else if (_this.toptype == 'trigger') {
                _this.topstate = '释放刷新数据';
            }
            else if (_this.toptype == 'loading') {
                _this.topstate = '刷新中...';
            }
            else if (_this.toptype == 'loading-done') {
                _this.topstate = '刷新成功';
            }
            else if (_this.toptype == 'loading-fail') {
                _this.topstate = '刷新失败';
            }
            else {
                console.log('下拉的其他情况');
            }
        },
    },
    watch: {
        type(val, oldval) {
            this.typetoState();
        },
        toptype(val, oldval) {
            this.toptoState();
        },
        stating(val, oldval) {
            this.statement = this.stating;
            console.log('---------------------stating------------------>', this.stating);
        }
    },
    mounted() {
        this.typetoState();
        this.toptoState();
        if (this.stating) {
            this.statement = this.stating;
        }
    }
}

</script>
<style lang="less" scoped>
    @import './style.css';
</style>

上一篇下一篇

猜你喜欢

热点阅读