本文实例为大家分享了vue实现滑动到底部加载更多的具体代码,供大家参考,具体内容如下
思路:
如果可视区的高度域dom元素的getboundingclientrect().bottom高度相同说明已经到了底部,可以实现加载了
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> 展开</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">价格登录可见</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>加载中,请稍后</span>
</div>
<div v-if="isbottom == 1" class="isbottom">
<span>没有更多数据了</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()
}
},
// 获取后台数据
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>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
lu117666571