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 相关文章推荐
提高网站性能之 如何对待JavaScript
Oct 31 Javascript
Jquery选择器 $实现原理
Dec 02 Javascript
iframe里的页面禁止右键事件的方法
Jun 10 Javascript
AngularJS bootstrap启动详解及实例代码
Sep 14 Javascript
原生JS 购物车及购物页面的cookie使用方法
Aug 21 Javascript
JavaScript实现计数器基础方法
Oct 10 Javascript
微信小程序自定义多选事件的实现代码
May 17 Javascript
Angular 实现输入框中显示文章标签的实例代码
Nov 07 Javascript
Node.js原生api搭建web服务器的方法步骤
Feb 15 Javascript
Vue插槽原理与用法详解
Mar 05 Javascript
JS实现骰子3D旋转效果
Oct 24 Javascript
vue-cli —— 如何局部修改Element样式
Oct 22 Javascript
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
在JavaScript中调用php程序
2009/03/09 PHP
解析PHP无限级分类方法及代码
2013/06/21 PHP
PHP函数in_array()使用详解
2014/08/20 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
2014/11/29 PHP
PHP版微信公众平台红包API
2015/04/02 PHP
php 判断页面或图片是否经过gzip压缩的方法
2017/04/05 PHP
thinkPHP5 tablib标签库自定义方法详解
2017/05/10 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
css把超出的部分显示为省略号的方法兼容火狐
2008/07/23 Javascript
JavaScript 打地鼠游戏代码说明
2010/10/12 Javascript
jQuery cdn使用介绍
2013/05/08 Javascript
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
AngularJS  ng-table插件设置排序
2016/09/21 Javascript
vue集成百度UEditor富文本编辑器使用教程
2018/09/21 Javascript
浅谈关于iview表单验证的问题
2018/09/29 Javascript
vue+elementUi图片上传组件使用详解
2019/08/20 Javascript
javascript实现拖拽碰撞检测
2020/03/12 Javascript
跟老齐学Python之一个免费的实验室
2014/09/14 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
Flask框架各种常见装饰器示例
2018/07/17 Python
Python实现的栈、队列、文件目录遍历操作示例
2019/05/06 Python
python从list列表中选出一个数和其对应的坐标方法
2019/07/20 Python
python或C++读取指定文件夹下的所有图片
2019/08/31 Python
Python ORM框架Peewee用法详解
2020/04/29 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
基于Python pyecharts实现多种图例代码解析
2020/08/10 Python
Python操作Excel的学习笔记
2021/02/18 Python
Sony C++笔试题
2013/03/10 面试题
教育学专业实习生的自我鉴定
2013/11/26 职场文书
校友会欢迎辞
2014/01/13 职场文书
最新大学生创业计划书写作攻略
2014/04/02 职场文书
委托代理人授权委托书范本
2014/09/24 职场文书
个人职业生涯规划之自我评估篇
2019/09/03 职场文书