国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

如何封裝了一個(gè)vue移動(dòng)端下拉加載下一頁(yè)數(shù)據(jù)的組件

2019-11-19 12:19:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

簡(jiǎn)單封裝了一個(gè)vue下拉加載組件,分享一下,已放到github和前端資源庫(kù),歡迎下載!

組件代碼

<template> <div class="my-scroll" :class="[scrollState?'prohibit':'allow']" ref="myScroll" @scroll.passive="onScroll($event)" @touchmove="onScroll($event)" >  <!-- top -->  <div class="scroll-list">   <slot name='scrollList'></slot>   <div class="scroll-bottom">    <div v-if="state==1">     <i><img :src="Load"/></i>     <p>加載中</p>     </div>    <div v-if="state==2">加載完成</div>    <div v-if="state==3">沒(méi)有數(shù)據(jù)了</div>   </div>  </div> </div></template><script type="text/javascript">import Load from '@/assets/Load.gif'export default { name: 'myScroll', props: { 'onPull': { // 加載回調(diào)  type: Function,  require: true }, 'scrollState': {// 是否可滑動(dòng)  type: Boolean,  require: true }, loaded: {  type: Boolean,  default() {  return false  } } }, data() { return {  Load,  timeoutId: null,  state: 0,  myScroll: null } }, methods: { /*    * 加載中:1    * 加載完成:2    * 沒(méi)有更多:3    */ setState(index) { // 修改狀態(tài)  this.state = index  // console.log(this.state) }, onScroll(e) {  const _this = this  const scrollTop = document.documentElement.scrollTop || document.body.scrollTop  // console.log(window.innerHeight + scrollTop, this.myScroll.offsetHeight)  if (!this.loaded && window.innerHeight + scrollTop - 50 >= this.myScroll.offsetHeight) {  clearTimeout(this.timeoutId)  _this.timeoutId = setTimeout(() => {   _this.bottomCallback()  }, 100)  } }, bottomCallback() { // 加載回調(diào)  // console.log('回調(diào)', new Date().getTime())  if (this.state != 3) {  this.state = 1  this.onPull()  } } }, mounted() { this.myScroll = this.$refs.myScroll // 獲取滑條dom }}</script><style lang="scss" scoped> .allow{  overflow:hidden;  height: auto; } .prohibit{  max-width: 100%;  max-height: 100%;  height: 100%;  overflow:hidden;  overflow-y: scroll;  -webkit-overflow-scrolling: touch;  will-change: transform;  transition: all 450ms;  backface-visibility: hidden;  perspective: 1000; } .my-scroll{  position: relative;   color: #999;  .scroll-top{   text-align: center;   display:flex;   position:absolute;   top:0;   left:0;    width:100%;    overflow: hidden;  }  .scroll-list{   overflow:hidden;   min-height: 100%;  }  .scroll-bottom{   text-align: center;   line-height: .8rem;  div{    display:flex;     height:auto;    width:100%;    justify-content: center;    align-items:center;    flex-wrap: wrap;    i{     flex:1 0 100%;     display:block;     height: 0.4rem;    }    img{     width:0.6rem;    }    p{     flex:1 0 100%;    }   }  } }</style>

使用

<template> <div id="app">  <my-scroll class="scrolls" ref="myScroll" :on-pull="getList" :loaded="loaded" :scroll-state="scrollState">   <div slot="scrollList">   <div class="list" v-for="(item,index) in listData" :key="index">{{item.name}}</div>   </div>  </my-scroll> </div></template><script>import myScroll from "./components/vue-scroll.vue";import axios from 'axios'export default { name: "app", data(){ return{  scrollState: true, // 是否可以滑動(dòng)  loaded: false,  iPage: 1,  listData:[],  iPageSize: 10, } }, methods: { getList(){  this.$refs.myScroll.setState(1)  let _this = this  // ajax 請(qǐng)求  axios.get('https://easy-mock.com/mock/5b90f971ce624c454133ee2d/scoll/datalist').then(function (response) {   if (response.data.code == 200 && response.data.data.pagelist.length > 0 && !_this.loaded) {    if (_this.iPage == 1) {    _this.listData = response.data.data.pagelist    } else {    _this.listData.push(...response.data.data.pagelist)    }    _this.iPage++    _this.$refs.myScroll.setState(2)   } else {    if (_this.iPage == 1) {    _this.czListData = []    }    _this.loaded = true    _this.$refs.myScroll.setState(3)   }    })   .catch(function (error) {   console.log(error);   });  } }, mounted () { this.getList()  }, components: { myScroll }};</script><style scoped>#app { font-family: "Avenir", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px;}.scrolls{ font-size:.24rem;}.list{ height:.9rem; line-height: .9rem; margin-bottom:.1rem; border-bottom:1px solid #dedede; color:#999; font-size:.28rem;}</style>

組件已放到github,歡迎下載和star

可以直接在vue項(xiàng)目中運(yùn)行這個(gè)組件

github地址:https://github.com/confidence68/vue_mobile_scrollLoadpage

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 柘城县| 安康市| 耒阳市| 额尔古纳市| 原平市| 金湖县| 宁陵县| 石渠县| 图木舒克市| 上思县| 大石桥市| 依兰县| 当雄县| 平舆县| 浮山县| 曲阜市| 修水县| 龙岩市| 扶沟县| 鹤峰县| 拉萨市| 泸州市| 五华县| 高州市| 米林县| 宣恩县| 娄烦县| 安塞县| 启东市| 大余县| 张掖市| 马山县| 巴楚县| 西乌珠穆沁旗| 昌邑市| 康乐县| 昌平区| 阜平县| 韩城市| 栾川县| 平塘县|