vue实现滑动到底部加载更多效果


Posted in Javascript onOctober 27, 2020

本文实例为大家分享了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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一实用的实现table排序的Javascript类库
Sep 12 Javascript
jQuery 处理网页内容的实现代码
Feb 15 Javascript
javascript学习笔记(七) js函数介绍
Jun 19 Javascript
JavaScript获取图片的原始尺寸以宽度为例
May 04 Javascript
js实现数组冒泡排序、快速排序原理
Mar 08 Javascript
基于jQuery实现仿微博发布框字数提示
Jul 27 Javascript
微信小程序进行微信支付的步骤昂述
Dec 01 Javascript
vue一步步实现alert功能
Jul 05 Javascript
用POSTMAN发送JSON格式的POST请求示例
Sep 04 Javascript
jQuery.validate.js表单验证插件的使用代码详解
Oct 22 jQuery
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
Aug 22 Javascript
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
vue实现页面滚动到底部刷新
Aug 16 #Javascript
vue-mugen-scroll组件实现pc端滚动刷新
Aug 16 #Javascript
JavaScript的查询机制LHS和RHS解析
Aug 16 #Javascript
jquery树形插件zTree高级使用详解
Aug 16 #jQuery
微信小程序云开发如何实现数据库自动备份实现
Aug 16 #Javascript
jQuery zTree树插件的使用教程
Aug 16 #jQuery
Vue 权限控制的两种方法(路由验证)
Aug 16 #Javascript
You might like
浅析php header 跳转
2013/06/17 PHP
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
推荐40个非常优秀的jQuery插件和教程【系列三】
2011/11/09 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
js 通过cookie实现刷新不变化树形菜单
2014/10/30 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
Nodejs进阶:核心模块net入门学习与实例讲解
2016/11/21 NodeJs
详解angular中的作用域及继承
2017/05/31 Javascript
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
2018/12/05 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
Python 登录网站详解及实例
2017/04/11 Python
virtualenv实现多个版本Python共存
2017/08/21 Python
python中的随机函数random的用法示例
2018/01/27 Python
对Python 文件夹遍历和文件查找的实例讲解
2018/04/26 Python
python RabbitMQ 使用详细介绍(小结)
2018/11/08 Python
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
耐克美国官网:Nike.com
2016/08/01 全球购物
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
德国滑雪和户外用品网上商店:XSPO
2019/10/30 全球购物
JNI的定义
2012/11/25 面试题
大学生求职简历的自我评价
2013/10/14 职场文书
员工拾金不昧表扬信
2014/01/09 职场文书
初中班主任经验交流材料
2014/05/16 职场文书
物流专业自荐信
2014/05/23 职场文书
领导班子四风问题对照检查材料
2014/09/27 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书
MySQL数据迁移相关总结
2021/04/29 MySQL
解决numpy和torch数据类型转化的问题
2021/05/23 Python
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js