vue2.0和mintui-infiniteScroll 结合实现无线滚动加载


 <template lang="html">
  <div class="main">
     <div class='list-box'>
      <ul v-infinite-scroll="loadMore"
          infinite-scroll-disabled="loading"
          infinite-scroll-immediate-check="true"
          infinite-scroll-distance="40">
        <li v-for="(item ,index) in list" :key="index">
              {{item.title}}
        </li>
      </ul>
       <!--显示加载中状态-->
      <div class="loading-box" v-if="loading">
          <mt-spinner type="fading-circle" class="loading-more"  color="#0188fd"></mt-spinner>	                   		                  
      </div>			 
      <div class="no-more" v-if="noMore">亲,已经到底了哦!</div> 		
    </div>  
  </div>
</template>
 <script>
  import { InfiniteScroll , Spinner } from 'mint-ui';
  export default {
    components: {
			'mt-spinner':Spinner,
		},
    data() {
      return {
		list: [], 
        pagesNum: 1,//总页数
		loading: false, // 加载中转圈
	    noMore: false, // 是否还有更多
        endTime: "",        
        page: {
          access_token: this.$route.query.access_token,
          planId: this.$route.query.id,
          pageNumber: 1,
          pageSize: 20,
        }
      }
    },
    created() {
      this.initData();
    },
    mounted() {

    },
    methods: {
      initData: function(type) {  
        this.loading = true
		axios.get("xxx", {
				params: this.page
			})
			.then((data) => {
				if (type === 'loadMore') {
				  this.list = this.list.concat(data.data.data.list);
				} else {      
				  this.list = data.data.data.list;
									  
				}

		// 设置分页
		this.pagesNum = data.data.data.pages; //总页数	                                            
		this.loading = false;          
	   
			})
			.catch(function(err) {
				console.log(err);
			})

	  },
      loadMore:function() {
		this.page.pageNumber += 1 // 增加分页
		this.loading = true // 加载中
		if(this.page.pageNumber <= this.pagesNum){
			//加载数据
			setTimeout(()=>{
				this.initData('loadMore')
			},200)
		   
		 
		}else{ 
			this.noMore = true // 显示没有更多了
			this.loading = false // 关闭加载中
			return false
		}
	   
	   
	 }
    }

  }
</script>
<style>
  .list-box {
        max-height:calc(100% - 1.8rem); //必须有高度
        overflow-y: auto;
        -webkit-overflow-scrolling: touch;
		}
  .list-box ul{
      width:100%;
   }
  .list-box ul li{
       width: 100%;
	   height: 0.55rem;
	   @include flexbox();
	   @include justify-content(space-between);
	   border-bottom: 1px solid #e4e4e4;
  }
</style>

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
可以使用 Element UI 中的 v-infinite-scroll 指令来实现鼠标滚轮滚动带多列文字有标题的文字栏。v-infinite-scroll 可以在滚动到指定元素底部时触发指定的回调函数,因此可以用于实现滚动加载。 以下是示例代码: ```html <template> <div class="text-column" v-infinite-scroll="loadMore" infinite-scroll-disabled="loading"> <div class="title">{{ title }}</div> <div class="text-container"> <div class="column" v-for="text in textList" :key="text">{{ text }}</div> </div> <div v-if="loading" class="loading">Loading...</div> </div> </template> <script> export default { data() { return { title: "My Text Column", textList: [ "Column 1 Text 1", "Column 1 Text 2", "Column 1 Text 3", "Column 1 Text 4", "Column 1 Text 5", "Column 2 Text 1", "Column 2 Text 2", "Column 2 Text 3", "Column 2 Text 4", "Column 2 Text 5", "Column 3 Text 1", "Column 3 Text 2", "Column 3 Text 3", "Column 3 Text 4", "Column 3 Text 5" ], loading: false }; }, methods: { loadMore() { // 模拟异步加载数据 this.loading = true; setTimeout(() => { this.textList = this.textList.concat([ "Column 1 Text 6", "Column 2 Text 6", "Column 3 Text 6" ]); this.loading = false; }, 1000); } } }; </script> <style> .text-column { display: flex; flex-direction: column; align-items: center; overflow-y: scroll; height: 300px; } .title { font-size: 24px; font-weight: bold; margin-bottom: 10px; } .text-container { display: flex; flex-wrap: wrap; justify-content: space-between; width: 100%; } .column { width: calc(33.33% - 10px); margin-bottom: 20px; padding: 10px; border: 1px solid #ccc; box-sizing: border-box; } .loading { margin-top: 20px; font-size: 16px; color: #999; } </style> ``` 在上面的代码中,我们使用了 Element UI 的 v-infinite-scroll 指令,并将其应用于包含多列文本和标题的 div 元素上。我们还设置了 infinite-scroll-disabled 属性,以防止在加载更多数据时重复触发回调函数。 当用户滚动到底部时,loadMore 方法将被调用,并模拟异步加载更多数据。在加载数据时,我们将 loading 设置为 true,以显示加载动画。当数据加载完成时,我们将新数据添加到 textList 中,并将 loading 设置为 false,以隐藏加载动画。 通过这种方式,我们就可以使用 Element UI 的 v-infinite-scroll 指令来实现一个带有多列文本和标题的滚动文字栏,并支持鼠标滚轮滚动滚动加载
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值