做爰高潮a片〈毛片〉,尤物av天堂一区二区在线观看,一本久久A久久精品VR综合,添女人荫蒂全部过程av

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

基于vue2實(shí)現(xiàn)上拉加載功能

來源:懂視網(wǎng) 責(zé)編:小OO 時(shí)間:2020-11-27 22:24:54
文檔

基于vue2實(shí)現(xiàn)上拉加載功能

本文實(shí)例為大家分享了vue2實(shí)現(xiàn)上拉加載展示的具體代碼,供大家參考,具體內(nèi)容如下:因?yàn)槲覀冺?xiàng)目中,還用了swiper。很多都是滑動(dòng)切換的,但是又得上拉加載,所以導(dǎo)致,很多UI框架,我們用了,都有不同的bug出現(xiàn),沒辦法,最后寫了一個(gè)。代碼如下(這個(gè)因?yàn)楹芏嗟胤綍?huì)用,所以建議放在components/common下面)。
推薦度:
導(dǎo)讀本文實(shí)例為大家分享了vue2實(shí)現(xiàn)上拉加載展示的具體代碼,供大家參考,具體內(nèi)容如下:因?yàn)槲覀冺?xiàng)目中,還用了swiper。很多都是滑動(dòng)切換的,但是又得上拉加載,所以導(dǎo)致,很多UI框架,我們用了,都有不同的bug出現(xiàn),沒辦法,最后寫了一個(gè)。代碼如下(這個(gè)因?yàn)楹芏嗟胤綍?huì)用,所以建議放在components/common下面)。

本文實(shí)例為大家分享了vue2實(shí)現(xiàn)上拉加載展示的具體代碼,供大家參考,具體內(nèi)容如下

因?yàn)槲覀冺?xiàng)目中,還用了swiper。很多都是滑動(dòng)切換的,但是又得上拉加載,所以導(dǎo)致,很多UI框架,我們用了,都有不同的bug出現(xiàn),沒辦法,最后寫了一個(gè)。代碼如下(這個(gè)因?yàn)楹芏嗟胤綍?huì)用,所以建議放在components/common下面):

<template>
 <div class="loadmore">
 <slot></slot>
 <slot name="bottom">
 </slot>
 </div>
</template>

<style>
 .loadmore{
 width:100%;
 }
</style>

<script>
 export default {
 name: 'loadmore',
 props: {
 maxDistance: {
 type: Number,
 default: 0
 },
 autoFill: {
 type: Boolean,
 default: true
 },
 distanceIndex: {
 type: Number,
 default: 2
 },
 bottomPullText: {
 type: String,
 default: '上拉刷新'
 },
 bottomDropText: {
 type: String,
 default: '釋放更新'
 },
 bottomLoadingText: {
 type: String,
 default: '加載中...'
 },
 bottomDistance: {
 type: Number,
 default: 70
 },
 bottomMethod: {
 type: Function
 },
 bottomAllLoaded: {
 type: Boolean,
 default: false
 },
 },
 data() {
 return {
 // 最下面出現(xiàn)的div的位移
 translate: 0,
 // 選擇滾動(dòng)事件的監(jiān)聽對(duì)象
 scrollEventTarget: null,
 containerFilled: false,
 bottomText: '',
 // class類名
 bottomDropped: false,
 // 獲取監(jiān)聽滾動(dòng)元素的scrollTop
 bottomReached: false,
 // 滑動(dòng)的方向 down---向下互動(dòng);up---向上滑動(dòng)
 direction: '',
 startY: 0,
 startScrollTop: 0,
 // 實(shí)時(shí)的clientY位置
 currentY: 0,
 topStatus: '',
 // 上拉加載的狀態(tài) '' pull: 上拉中
 bottomStatus: '',
 };
 },
 watch: {
 // 改變當(dāng)前加載在狀態(tài)
 bottomStatus(val) {
 this.$emit('bottom-status-change', val);
 switch (val) {
 case 'pull':
 this.bottomText = this.bottomPullText;
 break;
 case 'drop':
 this.bottomText = this.bottomDropText;
 break;
 case 'loading':
 this.bottomText = this.bottomLoadingText;
 break;
 }
 }
 },
 methods: {
 onBottomLoaded() {
 this.bottomStatus = 'pull';
 this.bottomDropped = false;
 this.$nextTick(() => {
 if (this.scrollEventTarget === window) {
 document.body.scrollTop += 50;
 } else {
 this.scrollEventTarget.scrollTop += 50;
 }
 this.translate = 0;
 });
 // 注釋
 if (!this.bottomAllLoaded && !this.containerFilled) {
 this.fillContainer();
 }
 },

 getScrollEventTarget(element) {
 let currentNode = element;
 while (currentNode && currentNode.tagName !== 'HTML' &&
 currentNode.tagName !== 'BODY' && currentNode.nodeType === 1) {
 let overflowY = document.defaultView.getComputedStyle(currentNode).overflowY;
 if (overflowY === 'scroll' || overflowY === 'auto') {
 return currentNode;
 }
 currentNode = currentNode.parentNode;
 }
 return window;
 },
 // 獲取scrollTop
 getScrollTop(element) {
 if (element === window) {
 return Math.max(window.pageYOffset || 0, document.documentElement.scrollTop);
 } else {
 return element.scrollTop;
 }
 },
 bindTouchEvents() {
 this.$el.addEventListener('touchstart', this.handleTouchStart);
 this.$el.addEventListener('touchmove', this.handleTouchMove);
 this.$el.addEventListener('touchend', this.handleTouchEnd);
 },
 init() {
 this.bottomStatus = 'pull';
 // 選擇滾動(dòng)事件的監(jiān)聽對(duì)象
 this.scrollEventTarget = this.getScrollEventTarget(this.$el);
 if (typeof this.bottomMethod === 'function') {
 // autoFill 屬性的實(shí)現(xiàn) 注釋
 this.fillContainer();
 // 綁定滑動(dòng)事件
 this.bindTouchEvents();
 }
 },
 // autoFill 屬性的實(shí)現(xiàn) 注釋
 fillContainer() {
 if (this.autoFill) {
 this.$nextTick(() => {
 if (this.scrollEventTarget === window) {
 this.containerFilled = this.$el.getBoundingClientRect().bottom >=
 document.documentElement.getBoundingClientRect().bottom;
 } else {
 this.containerFilled = this.$el.getBoundingClientRect().bottom >=
 this.scrollEventTarget.getBoundingClientRect().bottom;
 }
 if (!this.containerFilled) {
 this.bottomStatus = 'loading';
 this.bottomMethod();
 }
 });
 }
 },
 // 獲取監(jiān)聽滾動(dòng)元素的scrollTop
 checkBottomReached() {
 if (this.scrollEventTarget === window) {
 return document.body.scrollTop + document.documentElement.clientHeight >= document.body.scrollHeight;
 } else {
 // getBoundingClientRect用于獲得頁(yè)面中某個(gè)元素的左,上,右和下分別相對(duì)瀏覽器視窗的位置。 right是指元素右邊界距窗口最左邊的距離,bottom是指元素下邊界距窗口最上面的距離。
 return this.$el.getBoundingClientRect().bottom <= this.scrollEventTarget.getBoundingClientRect().bottom + 1;
 }
 },
 // ontouchstart 事件
 handleTouchStart(event) {
 // 獲取起點(diǎn)的y坐標(biāo)
 this.startY = event.touches[0].clientY;
 this.startScrollTop = this.getScrollTop(this.scrollEventTarget);
 this.bottomReached = false;
 if (this.bottomStatus !== 'loading') {
 this.bottomStatus = 'pull';
 this.bottomDropped = false;
 }
 },
 // ontouchmove事件
 handleTouchMove(event) {
 if (this.startY < this.$el.getBoundingClientRect().top && this.startY > this.$el.getBoundingClientRect().bottom) {
 // 沒有在需要滾動(dòng)的范圍內(nèi)滾動(dòng),不再監(jiān)聽scroll
 return;
 }
 // 實(shí)時(shí)的clientY位置
 this.currentY = event.touches[0].clientY;
 // distance 移動(dòng)位置和開始位置的差值 distanceIndex---
 let distance = (this.currentY - this.startY) / this.distanceIndex;
 // 根據(jù) distance 判斷滑動(dòng)的方向 并賦予變量 direction down---向下互動(dòng);up---向上滑動(dòng)
 this.direction = distance > 0 ? 'down' : 'up';
 if (this.direction === 'up') {
 // 獲取監(jiān)聽滾動(dòng)元素的scrollTop
 this.bottomReached = this.bottomReached || this.checkBottomReached();
 }
 if (typeof this.bottomMethod === 'function' && this.direction === 'up' &&
 this.bottomReached && this.bottomStatus !== 'loading' && !this.bottomAllLoaded) {
 // 有加載函數(shù),是向上拉,有滾動(dòng)距離,不是正在加載ajax,沒有加載到最后一頁(yè)
 event.preventDefault();
 event.stopPropagation();
 if (this.maxDistance > 0) {
 this.translate = Math.abs(distance) <= this.maxDistance
 ? this.getScrollTop(this.scrollEventTarget) - this.startScrollTop + distance : this.translate;
 } else {
 this.translate = this.getScrollTop(this.scrollEventTarget) - this.startScrollTop + distance;
 }
 if (this.translate > 0) {
 this.translate = 0;
 }
 this.bottomStatus = -this.translate >= this.bottomDistance ? 'drop' : 'pull';
 }
 },
 // ontouchend事件
 handleTouchEnd() {
 if (this.direction === 'up' && this.bottomReached && this.translate < 0) {
 this.bottomDropped = true;
 this.bottomReached = false;
 if (this.bottomStatus === 'drop') {
 this.translate = '-50';
 this.bottomStatus = 'loading';
 this.bottomMethod();
 } else {
 this.translate = '0';
 this.bottomStatus = 'pull';
 }
 }
 this.direction = '';
 }
 },
 mounted() {
 this.init();
 }
 };
</script>

然后哪個(gè)頁(yè)面需要,在哪個(gè)頁(yè)面導(dǎo)入即可:import LoadMore from './../common/loadmore.vue';在需要引入他的頁(yè)面寫法如下:

<template>
 <section class="finan">
 <!-- 上拉加載更多 -->
 <load-more
 :bottom-method="loadBottom"
 :bottom-all-loaded="allLoaded"
 :bottomPullText='bottomText'
 :auto-fill="false"
 @bottom-status-change="handleBottomChange"
 ref="loadmore">
 <div>
 這里寫你需要的另外的模塊
 </div>
 <div v-show="loading" slot="bottom" class="loading"> 這個(gè)div是為讓上拉加載的時(shí)候顯示一張加載的gif圖
 <img src="./../../assets/main/uploading.gif">
 </div>
 </load-more>
 </section>
</template>

然后在此頁(yè)面的data里和methods設(shè)置如下:

 export default {
 name: 'FinancialGroup',
 props:{
 
 },
 data () {
 return {
 // 上拉加載數(shù)據(jù)
 scrollHeight: 0,
 scrollTop: 0,
 containerHeight: 0,
 loading: false,
 allLoaded: false,
 bottomText: '上拉加載更多...',
 bottomStatus: '',
 pageNo: 1,
 totalCount: '',
 }
 },
 methods: {
 /* 下拉加載 */
 _scroll: function(ev) {
 ev = ev || event;
 this.scrollHeight = this.$refs.innerScroll.scrollHeight;
 this.scrollTop = this.$refs.innerScroll.scrollTop;
 this.containerHeight = this.$refs.innerScroll.offsetHeight;
 },
 loadBottom: function() {
 this.loading = true;
 this.pageNo += 1; // 每次更迭加載的頁(yè)數(shù)
 if (this.pageNo == this.totalGetCount) {
 // 當(dāng)allLoaded = true時(shí)上拉加載停止
 this.loading = false;
 this.allLoaded = true;
 }
 api.commonApi(后臺(tái)接口,請(qǐng)求參數(shù)) 這個(gè)api是封裝的axios有不懂的可以看vue2+vuex+axios那篇文章
 .then(res => {
 setTimeout(() => {
 要使用的后臺(tái)返回的數(shù)據(jù)寫在setTimeout里面
 this.$nextTick(() => {
 this.loading = false;
 })
 }, 1000)
 });
 },
 handleBottomChange(status) {
 this.bottomStatus = status;
 },
 }

這樣就完成了。

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

基于vue2實(shí)現(xiàn)上拉加載功能

本文實(shí)例為大家分享了vue2實(shí)現(xiàn)上拉加載展示的具體代碼,供大家參考,具體內(nèi)容如下:因?yàn)槲覀冺?xiàng)目中,還用了swiper。很多都是滑動(dòng)切換的,但是又得上拉加載,所以導(dǎo)致,很多UI框架,我們用了,都有不同的bug出現(xiàn),沒辦法,最后寫了一個(gè)。代碼如下(這個(gè)因?yàn)楹芏嗟胤綍?huì)用,所以建議放在components/common下面)。
推薦度:
標(biāo)簽: VUE 實(shí)現(xiàn) 上拉
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 利津县| 徐州市| 崇义县| 铁力市| 加查县| 和龙市| 大方县| 长阳| 辉县市| 武隆县| 隆德县| 北票市| 龙南县| 青浦区| 龙江县| 苏尼特右旗| 定襄县| 溧阳市| 黔西| 鹤岗市| 阿图什市| 耒阳市| 竹山县| 公主岭市| 库伦旗| 称多县| 通渭县| 喜德县| 兴业县| 新泰市| 兴和县| 黑水县| 云和县| 乌鲁木齐县| 彭山县| 蛟河市| 库尔勒市| 弋阳县| 隆尧县| 鲁甸县| 胶州市|