vue實(shí)現(xiàn)滑動(dòng)到底部加載更多效果
本文實(shí)例為大家分享了vue實(shí)現(xiàn)滑動(dòng)到底部加載更多的具體代碼,供大家參考,具體內(nèi)容如下
思路:
如果可視區(qū)的高度域dom元素的getBoundingClientRect().bottom高度相同說(shuō)明已經(jīng)到了底部,可以實(shí)現(xiàn)加載了
template:
<template> <div class="content"> <div class="logo"> <div> <img v-if="server[0].thUintroduceLogo" :src="setIp + server[0].thUintroduceLogo" alt=""> <img v-if="!server[0].thUintroduceLogo" src="../../../assets/images/shooping/u538.png" alt=""> </div> <div> <span>{{server[0].companyName}}</span> </div> <div @click="callCustomer()"> <img src="../../../assets/images/shooping/u37.png" alt=""> 致電客服 </div> </div> <div class="info"> <div class="swipe"> <mt-swipe ref="swipe" :auto="0" :showIndicators="false" @change="swipeChange"> <mt-swipe-item v-for="(item,index) in server[0].thUintroduceImg.split(',')" :key="index"> <div class="jcc"> <img :src="setIp + item" alt=""> </div> </mt-swipe-item> </mt-swipe> <span class="index">{{activeIndex}}/{{server[0].thUintroduceImg.split(',').length}}</span> </div> <div class="info1"> <p>{{server[0].thUintroduceText}}</p> <span @click="hidden()" v-if="show"> <i>......</i> 展開(kāi)</span> </div> </div> <div class="shopping"> <h4> <img src="../../../assets/images/shooping/u19.png" alt=""> <span>全部商品</span> </h4> <img src="../../../assets/images/shooping/split.jpg" alt=""> </div> <div> <div ref="my_pull" class="listUl"> <div v-for="item in server" :key="item.pId" class="itemLIST" @click="pushInfo(item)"> <div> <img :src="setIp + item.pImgeOne" alt=""> </div> <div> <h3>{{item.pTitle}}</h3> <p> <span>已售{{item.pSaleNums}}件</span> <span v-if="!isMemberId">價(jià)格登錄可見(jiàn)</span> <span v-if="isMemberId">¥{{item.uPrice}}</span> </p> </div> </div> <!-- <div v-for="item in 10" :key="item" style="height:100px">{{item}}</div> --> </div> </div> <div v-if="isbottom == -1" class="isbottom"> <i class="iconfont icon-jiazai1"></i> <span>加載中,請(qǐng)稍后</span> </div> <div v-if="isbottom == 1" class="isbottom"> <span>沒(méi)有更多數(shù)據(jù)了</span> </div> </div> </template>
script:
<script> import { Swipe, SwipeItem, Popup } from 'mint-ui' export default { data: () => ({ server: [], page: 1, clientHeight: 0, el: {}, isbottom: 0, show: true, activeIndex: 1 }), created() { this.getServer() }, beforeDestroy() { let title = document.querySelector("#title") title.style.background = "#6a7d8f"; let arr = document.querySelector(".is-left") arr.style.color = "#fff" }, computed: { isMemberId() { return this.$store.state.isMemberId } }, mounted() { this.clientHeight = document.documentElement.clientHeight this.$nextTick(() => { let title = document.querySelector("#title") title.style.background = "#fff"; let arr = document.querySelector(".is-left") arr.style.color = "#333" this.el = this.$refs.my_pull; window.addEventListener('scroll', this.handleScroll) }) }, methods: { callCustomer() { let msg = this.server[0].thServicePhone; $App.callCustomer(msg); }, swipeChange() { this.activeIndex = this.$refs.swipe.index + 1 }, hidden() { let el = document.querySelector(".info1") el.style.height = "auto" this.show = false }, pushInfo(item) { this.$store.dispatch("newshoppingInfo", item) console.log(this.$store.state.shoppingInfo); this.$router.push({ path: "/shooping/shoopingInfo", }) }, handleScroll() { let a = this.el.getBoundingClientRect().bottom; a = Math.ceil(a); if (a == this.clientHeight) { this.isbottom = -1 this.page++ this.getServer() } }, // 獲取后臺(tái)數(shù)據(jù) getServer() { $App.showWebActivity(); this.$http.post(this.root + 'agriculture/xxxxxxxxx', { key: this.zkey, code: this.zcode, page: this.page, rows: 4, townsid: sessionStorage.getItem("villageId"), pUid: sessionStorage.getItem("shoppingUid") }, { emulateJSON: true }).then((res) => { $App.dismissWebActivity() if (res.body.code == 100) { if (this.page == 1) { this.server = res.body.list.rows; } else { this.server = this.server.concat(res.body.list.rows) } if (res.body.list.rows.length >= 4) { this.isLast = false } else { this.isLast = true; this.isbottom = 1 window.removeEventListener('scroll', this.handleScroll) } } else { $App.toastWebActivity(res.body.message) console.log(res) } }, (err) => { $App.dismissWebActivity() }) }, }, } </script>
style:
<style lang="less" scoped> .content { .isbottom { display: flex; align-items: center; justify-content: center; padding: 15px 0; color: #999; i { font-size: 30px; animation: rotate 1s infinite; } span { color: #ccc; padding-left: 15px; } } .logo { background: #fff; padding-bottom: 15px; div { &:nth-child(1) { display: flex; justify-content: center; img { width: 60px; height: 60px; } } &:nth-child(2) { text-align: center; padding: 15px 15px; color: #609bf0; } &:nth-child(3) { display: flex; justify-content: center; align-items: center; color: #1296db; border: #1296db 1PX solid; width: 50%; margin: 0 auto; padding: 5px 0; font-size: 15px; img { width: 20px; height: 20px; margin-right: 8px; } } } } .info { background: #fff; margin-bottom: 10px; padding-bottom: 15px; .swipe { height: 300px; background: #eee; position: relative; .jcc { display: flex; justify-content: center; height: 300px; } img { // width: 100%; height: 100%; } .index { position: absolute; background: rgba(243, 244, 245, .8); padding: 5px 15px; bottom: 10px; right: 10px; border-radius: 50px; } } } .info1 { background: #fff; position: relative; padding: 15px 9px 0; height: 79px; overflow: hidden; p { line-height: 22px; text-indent: 2em; letter-spacing: 1.2px; } span { width: 75px; text-align: right; position: absolute; bottom: 0; right: 9px; color: #39c; background: #fff; i { color: #333; } } } .shopping { background: #fff; padding-top: 15px; h4 { display: flex; align-items: center; justify-content: center; padding-bottom: 10px; >img { width: 30px; height: 30px; margin-right: 10px; } span { color: #0f589e; font-weight: normal; } } img { display: block; width: 100%; height: 2px; } } .listUl { // display: flex; // flex-wrap: wrap; padding: 0 15px; top: 60px; height: calc(100% - 100px) !important; background: #fff; overflow: hidden; .itemLIST { // float: left; width: 50%; display: inline-block; padding-top: 15px; padding-bottom: 15px; &:nth-child(2n) { padding-right: 5px; } &:nth-child(2n -1) { padding-left: 5px; } img { // width: 100%; height: 100%; /* prettier-ignore */ // border: 1PX solid #eee; } div { &:first-child { overflow: hidden; height: 160px; display: flex; align-items: center; justify-content: center; } &:last-child { h3 { font-weight: normal; font-size: 16px; margin-top: 5px; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } p { font-size: 14px; margin-top: 5px; display: flex; align-items: center; justify-content: space-between; // padding: 0 15px; padding-right: 10px; span { display: block; &:first-child { color: #888; } &:last-child { color: red; font-size: 16px; } } } } } } } } </style>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Vue實(shí)現(xiàn)上拉加載下一頁(yè)效果的示例代碼
- vue前端頁(yè)面數(shù)據(jù)加載添加loading效果的實(shí)現(xiàn)
- vue實(shí)現(xiàn)頁(yè)面加載動(dòng)畫(huà)效果
- Vue ElementUI this.$confirm async await封裝方式
- vue+el使用this.$confirm,不能阻斷代碼往下執(zhí)行的解決
- Vue+Element-ui彈窗?this.$alert?is?not?a?function問(wèn)題
- Vue給?elementUI?中的?this.$confirm、this.$alert、?this.$prompt添加按鈕加載效果
相關(guān)文章
Vue3項(xiàng)目中reset.scss模板使用導(dǎo)入
這篇文章主要為大家介紹了Vue3項(xiàng)目中reset.scss模板使用導(dǎo)入示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09vue移動(dòng)端使用appClound拉起支付寶支付的實(shí)現(xiàn)方法
這篇文章主要介紹了vue移動(dòng)端使用appClound拉起支付寶支付的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11關(guān)于Vue實(shí)例創(chuàng)建的整體流程
這篇文章主要介紹了關(guān)于Vue實(shí)例創(chuàng)建的整體流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06vue 導(dǎo)航內(nèi)容設(shè)置選中狀態(tài)樣式的例子
今天小編就為大家分享一篇vue 導(dǎo)航內(nèi)容設(shè)置選中狀態(tài)樣式的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11在Vue3中使用BabylonJs開(kāi)發(fā)?3D的初體驗(yàn)
這篇文章主要介紹了在?Vue3?中使用?BabylonJs?開(kāi)發(fā)?3D?是什么體驗(yàn),在本文中,向您展示了如何創(chuàng)建?Vue?組件、Babylon?類(lèi)、在畫(huà)布上渲染場(chǎng)景以及創(chuàng)建?3D?網(wǎng)格,需要的朋友可以參考下2022-07-07Vue Getters和mapGetters的原理及使用示例詳解
Vuex的核心概念包括state、mutations、actions、getters和modules,今天,我們要深入探討其中一個(gè)關(guān)鍵部分:getters,以及它的相關(guān)輔助函數(shù)mapGetters,感興趣的朋友跟隨小編一起看看吧2024-08-08