gogogo
管理员
管理员
  • UID25
  • 粉丝0
  • 关注0
  • 发帖数1377
阅读:6750回复:1

vue-cli中vue-scroller的详细用法,上拉加载下拉刷新,vue-axios获取数据的详细过程

楼主#
更多 发布于:2018-12-02 20:27


vue目前是众所周知的流行框架大家都知道的,vue全家桶的成员是:vue-cli,vuex,vue-router,vue-axios(vue2.0)。然后它的第三方插件也有很多,比如:vue-scroller,vue-lazyload,vue-awesome-swiper等等的。


之前我已经给大家介绍过vue-lazyload的用法了,今天就给大家说一下vue-scroller的用法吧。

首先在命令行进行npm||cnpm||bower下载


npm install vue-scroller -D

:::!!! -D:就是      --save -dev

然后在你想要用scrolle的那个页面里将咱们刚才下载的东西引入


 import Vue from 'vue' import VueScroller from 'vue-scroller' Vue.use(VueScroller)


这个插件主要是标签<scroller>,谁需要进行上拉加载下拉刷新就给谁加。然后里面有:on-refresh="refresh"&&:on-infinite="infinite" || ref="domName"


:::!!! ref是获取dom元素的。
 this.$refs.myscroller.resize()//重置大小=>myscroller是上面ref定义的dom元素的名字
 this.$refs.myscroller.finishInfinite(2);//没有数据时的处理函数
 然后在methods对象里加入两个函数:infinite()&&refresh()




infinite(done) {
  if(this.noData) {
    setTimeout(()=>{
      this.$refs.myscroller.finishInfinite(2);
      })
    return;
    }
    let self = this;//this指向问题
    let start = this.moveList.length;

    setTimeout(() => {
    for(let i = start + 1; i < start + 10; i++) {
      self.moveList.push(i)
    }
    if(start > 30) {
      self.noData = "没有更多数据"
    }
    self.$refs.myscroller.resize();
      done()
    }, 1500)
 }

//done()表示这次异步加载数据完成,加载下一次
//因为这个是同步的,加了setTimeout就是异步加载数据;
//因为涉及到this指向问题,所以将他放在一个变量里。
refresh() {
    console.log('refresh')
  }







整体页面分布.png

index.vue//因为我在这个组件里需要scroller





































<template>
<div class="index-wrapper">

    <scroller :on-infinite="infinite" ref="myscroller">
        <div class="index-header">
            <div class="positionbar">
                <div class="position-box">
                    <i class="icon iconfont icon-dingwei"></i>
                    <span class="text">
        东城区北京市政府
      </span>
                </div>
                <div class="weather-box">
                    <div class="du">
                        <h2>28℃</h2>
                        <p>多云天</p>
                    </div>
                    <img class="could" src="//fuss10.elemecdn.com/2/52/5383cfd55c8ba454449f63f54ce2apng.png?imageMogr/format/webp/thumbnail/!69x69r/gravity/Center/crop/69x69/" alt="">
                </div>
            </div>
            <div class="search-box">
                搜索商家、商品
            </div>
            <div class="swiper-box">
                <div class="swiper-container" id="line-slide">
                    <div class="swiper-wrapper">
                        <div class="swiper-slide" style="width:auto">煎饼</div>
                        <div class="swiper-slide" style="width:auto">虾饭先生</div>
                        <div class="swiper-slide" style="width:auto">蛋挞 </div>
                        <div class="swiper-slide" style="width:auto">立秋进补</div>
                        <div class="swiper-slide" style="width:auto">我的屏 </div>
                        <div class="swiper-slide" style="width:auto">鲜榨果汁</div>
                        <div class="swiper-slide" style="width:auto">石锅拌饭</div>
                        <div class="swiper-slide" style="width:auto">黄焖鸡</div>
                        <div class="swiper-slide" style="width:auto">虾</div>
                    </div>
                    <!-- 如果需要滚动条 -->
                    <div class="swiper-scrollbar"></div>
                </div>
            </div>

        </div>
        <div class="slide-box">
            <div class="swiper-container" id="button-menu">
                <div class="swiper-wrapper">
                    <div class="swiper-slide">
                        <ul class="btn-group">
                            <li>
                                <a href="javascript:;">
                                    <img src="//fuss10.elemecdn.com/b/7e/d1890cf73ae6f2adb97caa39de7fcjpeg.jpeg?imageMogr/format/webp/thumbnail/!90x90r/gravity/Center/crop/90x90/" alt="">
                                    <span>美食</span>
                                </a>
                            </li>
                            <li>
                                <a href="javascript:;">
                                    <img src="//fuss10.elemecdn.com/2/35/696aa5cf9820adada9b11a3d14bf5jpeg.jpeg?imageMogr/format/webp/thumbnail/!90x90r/gravity/Center/crop/90x90/" alt="">
                                    <span>甜品饮品</span>
                                </a>
                            </li>
                            <li>
                                <a href="javascript:;">
                                    <img src="//fuss10.elemecdn.com/0/da/f42235e6929a5cb0e7013115ce78djpeg.jpeg?imageMogr/format/webp/thumbnail/!90x90r/gravity/Center/crop/90x90/" alt="">
                                    <span>商超便利</span>
                                </a>
                            </li>
                            <li>
                                <a href="javascript:;">
                                    <img src="//fuss10.elemecdn.com/d/49/7757ff22e8ab28e7dfa5f7e2c2692jpeg.jpeg?imageMogr/format/webp/thumbnail/!90x90r/gravity/Center/crop/90x90/" alt="">
                                    <span>预定早餐</span>
                                </a>
                            </li>
                            <li>
                                <a href="javascript:;">
                                    <img src="//fuss10.elemecdn.com/c/db/d20d49e5029281b9b73db1c5ec6f9jpeg.jpeg?imageMogr/format/webp/thumbnail/!90x90r/gravity/Center/crop/90x90/" alt="">
                                    <span>果蔬生鲜</span>
                                </a>
                            </li>
                            <li>
                                <a href="javascript:;">
                                    <img src="//fuss10.elemecdn.com/a/fa/d41b04d520d445dc5de42dae9a384jpeg.jpeg?imageMogr/format/webp/thumbnail/!90x90r/gravity/Center/crop/90x90/" alt="">
                                    <span>新店特惠</span>
                                </a>
                            </li>
                            <li>
                                <a href="javascript:;">
                                    <img src="//fuss10.elemecdn.com/3/84/8e031bf7b3c036b4ec19edff16e46jpeg.jpeg?imageMogr/format/webp/thumbnail/!90x90r/gravity/Center/crop/90x90/" alt="">
                                    <span>准时达</span>
                                </a>
                            </li>
                            <li>
                                <a href="javascript:;">
                                    <img src="//fuss10.elemecdn.com/d/38/7bddb07503aea4b711236348e2632jpeg.jpeg?imageMogr/format/webp/thumbnail/!90x90r/gravity/Center/crop/90x90/" alt="">
                                    <span>午餐</span>
                                </a>
                            </li>
                        </ul>
                    </div>
                    <div class="swiper-slide">
                        <ul class="btn-group">
                            <li>
                                <a href="javascript:;">
                                    <img src="//fuss10.elemecdn.com/b/7f/432619fb21a40b05cd25d11eca02djpeg.jpeg?imageMogr/format/webp/thumbnail/!90x90r/gravity/Center/crop/90x90/" alt="">
                                    <span>汉堡薯条</span>
                                </a>
                            </li>
                            <li>
                                <a href="javascript:;">
                                    <img src="//fuss10.elemecdn.com/2/17/244241b514affc0f12f4168cf6628jpeg.jpeg?imageMogr/format/webp/thumbnail/!90x90r/gravity/Center/crop/90x90/" alt="">
                                    <span>包子粥店</span>
                                </a>
                            </li>
                            <li>
                                <a href="javascript:;">
                                    <img src="//fuss10.elemecdn.com/8/83/171fd98b85dee3b3f4243b7459b48jpeg.jpeg?imageMogr/format/webp/thumbnail/!90x90r/gravity/Center/crop/90x90/" alt="">
                                    <span>鲜花蛋糕</span>
                                </a>
                            </li>
                            <li>
                                <a href="javascript:;">
                                    <img src="//fuss10.elemecdn.com/3/c7/a9ef469a12e7a596b559145b87f09jpeg.jpeg?imageMogr/format/webp/thumbnail/!90x90r/gravity/Center/crop/90x90/" alt="">
                                    <span>麻辣烫</span>
                                </a>
                            </li>
                            <li>
                                <a href="javascript:;">
                                    <img src="//fuss10.elemecdn.com/a/8a/ec21096d528b7cfd23cdd894f01c6jpeg.jpeg?imageMogr/format/webp/thumbnail/!90x90r/gravity/Center/crop/90x90/" alt="">
                                    <span>地方菜系</span>
                                </a>
                            </li>
                            <li>
                                <a href="javascript:;">
                                    <img src="//fuss10.elemecdn.com/7/b6/235761e50d391445f021922b71789jpeg.jpeg?imageMogr/format/webp/thumbnail/!90x90r/gravity/Center/crop/90x90/" alt="">
                                    <span>披萨意面</span>
                                </a>
                            </li>
                            <li>
                                <a href="javascript:;">
                                    <img src="//fuss10.elemecdn.com/6/d2/de0683a49a0655c728b70fdb344d5jpeg.jpeg?imageMogr/format/webp/thumbnail/!90x90r/gravity/Center/crop/90x90/" alt="">
                                    <span>异国料理</span>
                                </a>
                            </li>
                        </ul>
                    </div>
                </div>
                <!-- 如果需要分页器 -->
                <div class="swiper-pagination"></div>
            </div>
        </div>
        <div class="shop-box">
            <ul>
                <li v-for="m in movieList">
                    <h4>pw_m</h4>
                </li>
            </ul>
        </div>
    </scroller>
    <footerbar></footerbar>
</div>

</template>
<script>
    import Vue from 'vue'
    import VueScroller from 'vue-scroller'
    import footerbar from '@/components/footerbar'
    import VueAwesomeSwiper from 'vue-awesome-swiper'
    Vue.use(VueScroller);
    export default {
        data() {
            return {
                noData: '',
            moveList: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
            }
        },
        components: {
            footerbar
        },
        mounted() {
            var mySwiper = new Swiper('#line-slide', {
                slidesPerView: 6,
                scrollbar: '.swiper-scrollbar',
                slidesPerView: 'auto'
            })
            var menuSwiper = new Swiper('#button-menu', {
                direction: 'horizontal',
                loop: true,
                // 如果需要分页器
                pagination: '.swiper-pagination',

                // 如果需要前进后退按钮
                nextButton: '.swiper-button-next',
                prevButton: '.swiper-button-prev',
            })
        },
        methods: {
            infinite(done) {
                console.log(this.noData)
                if(this.noData) {
                setTimeout(()=>{
                    this.$refs.myscroller.finishInfinite(2);
                })
                return;
                }
                let self = this;
                let start = this.moveList.length;

                setTimeout(() => {
                    for(let i = start + 1; i < start + 10; i++) {
                        self.moveList.push(i)
                    }
                    if(start > 30) {
                        self.noData = "没有更多数据"
                    }
                    self.$refs.myscroller.resize();
                    done()
                }, 1500)

            },
            refresh() {
                console.log('refresh')
            }

        }
    }
</script>

<style lang="less">
    @import '../../static/less/var.less';
    .index-wrapper {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        bottom: @base*100rem;
        background: #F5F5F5;
        .index-header {
            background: @mc;
            height: @base*204rem;
            padding: @base*20rem @base*28rem;
        }
        .positionbar {
            height: @base*69rem;
            display: flex;
            justify-content: space-between;
            color: #fff;
            .position-box {
                line-height: @base*69rem;
                width: @base*417rem;
            }
            .weather-box {
                width: @base*136rem;
                display: flex;
                .du {
                    /*border:1px solid;*/
                    width: @base*90rem;
                    height: @base*69rem;
                    h2 {
                        font-size: @base*18rem;
                        margin: 0;
                    }
                    p {
                        margin: 0;
                        padding: 0;
                        font-size: @base*14rem;
                    }
                }
                .could {
                    display: block;
                    width: @base*50rem;
                    height: @base*70rem;
                }
            }
        }
        .search-box {
            height: @base*70rem;
            margin: @base*15rem;
            padding: @base*1rem;
            color: @fc1;
            text-align: center;
            background: #fff;
            border-radius: 20px;
            line-height: @base*70rem;
            font-size: @base*20rem;
        }
        #line-slide {
            overflow: hidden;
            color: #fff;
            .swiper-slide {
                margin-right: @base*20rem;
                font-size: @base*20rem;
                text-align: center;
                a {
                    color: #fff;
                }
            }
        }
    }
    
    .slide-box {
        background: #fff;
        height: @base*354rem;
        .swiper-slide {
            height: @base*354rem;
        }
        .swiper-pagination-bullet-active {
            background: #000;
            opacity: 0.6;
        }
        ul {
            padding: @base*10rem 0;
            display: flex;
            flex-wrap: wrap;
            li {
                padding: @base*10rem 0;
                width: 25%;
                text-align: center;
                a {
                    display: inline-block;
                    text-align: center;
                    width: 100%;
                    height: 100%;
                    color: #666;
                    text-decoration: none;
                    img {
                        display: block;
                        margin-left: 25%;
                        width: 50%;
                        height: 50%;
                    }
                    span {
                        font-size: @base*16rem;
                    }
                }
            }
        }
    }
</style>
gogogo
管理员
管理员
  • UID25
  • 粉丝0
  • 关注0
  • 发帖数1377
沙发#
发布于:2018-12-02 20:28
游客


返回顶部