PHP结合Vue实现滚动底部加载效果


Posted in PHP onDecember 17, 2017

前言

最近的一个项目手机端分页跳转不理想,自己做了一个滚动加载的一个Demo,下面话不多说了,来一起看看详细的介绍吧。

实现思路

     1.获得滚动条到底部的距离 getScrollBottomHeight()

     2.绑定滚动事件handleScroll()handleScroll()判断滚动条到底部距离是否小于设置的bottomHight,并且增加一个loading属性,防止加载时滑动时多次触发,造成多次加载

     3.Ajax请求load.php,通过Page去查询获得当前页数(page+1)的内容

     4.将获取的内容,push 到 list中,完成后Vue 自动渲染新的列表,loading变为false

核心Dom结构

<body>
<div id="Content">
 <div>
  <ul>
   <li v-for="l in list">{{l.title}}</li>
   <li class="loading" v-if="loading">加载中</li>
  </ul>
 </div>
</div>
</body>

Javascript代码

<script>
 var v = new Vue({
  el: "#Content",
  data: {
   list: [{title: "使用思维导图,优雅的完成自己的代码"},
    {title: "左滑右滑的乐趣"},
    {title: "Spring Cloud(九)高可用的分布式配置中心 Spring Cloud Config 集成 Eureka 服务q"},
    {title: "【MYSQL】业务上碰到的SQL问题整理集合"},
    {title: "2018年,前端应该怎么学?"},
    {title: "前端 ajax 请求的优雅方案"},
    {title: "SegmentFault 技术周刊 Vol.39 - 什么!服务器炸了?"},
    {title: "Rokid 开发板试用,开启你的嵌入式开发之旅"},
    {title: "我脑中飘来飘去的css魔幻属性"},
    {title: "用python解决mysql视图导入导出依赖问题"},
    {title: "underscore 系列之防冲突与 Utility Functions"},
    {title: "基于手淘 flexible 的 Vue 组件:TextScroll -- 文字滚动"},
    {title: "基于‘BOSS直聘的招聘信息'分析企业到底需要什么样的PHP程序员"},
    {title: "原生js系列之无限循环轮播组件"},
    {title: "一篇文章了解HTML文档流(normal flow)"},
    {title: "面试官最爱的volatile关键字"},
    {title: "Spring Cloud(九)高可用的分布式配置中心 Spring Cloud Config 集成 Eureka 服务q"},
    {title: "【MYSQL】业务上碰到的SQL问题整理集合"},
    {title: "2018年,前端应该怎么学?"},
    {title: "前端 ajax 请求的优雅方案"},
    {title: "SegmentFault 技术周刊 Vol.39 - 什么!服务器炸了?"},
    {title: "Rokid 开发板试用,开启你的嵌入式开发之旅"},
    {title: "我脑中飘来飘去的css魔幻属性"},
    {title: "用python解决mysql视图导入导出依赖问题"},
    {title: "underscore 系列之防冲突与 Utility Functions"},
    {title: "基于手淘 flexible 的 Vue 组件:TextScroll -- 文字滚动"},
    {title: "基于‘BOSS直聘的招聘信息'分析企业到底需要什么样的PHP程序员"},
    {title: "原生js系列之无限循环轮播组件"},
    {title: "一篇文章了解HTML文档流(normal flow)"},
    {title: "面试官最爱的volatile关键字"},
    {title: "Rokid 开发板试用,开启你的嵌入式开发之旅"}],
   page: 5,//总页数
   nowPage: 1,//本页
   loading: false,//一步加载时的限制
   bottomHight: 50,//滚动条到某个位置才触发时间
  },
  methods: {
   handleScroll: function () {
    if (getScrollBottomHeight() <= v.bottomHight && v.nowPage < v.page && v.loading == false) {
     v.loading = true
     var url = "load.php"
     $.ajax({
      type: "GET",
      url: url,
      async: true,
      dataType: "json",
      success: function (data) {
       for (var i = 0; i < data.length; i++) {
        v.list.push(data[i])
       }
       v.nowPage++
       v.loading = false
      },
     })
    }
   }
  },

 })
 //添加滚动事件
 window.onload = function () {
  window.addEventListener('scroll', v.handleScroll)
 }
 //滚动条到底部的距离
 function getScrollBottomHeight() {
  return getPageHeight() - getScrollTop() - getWindowHeight();

 }
 //页面高度
 function getPageHeight() {
  return document.querySelector("html").scrollHeight
 }
 //滚动条顶 高度
 function getScrollTop() {
  var scrollTop = 0, bodyScrollTop = 0, documentScrollTop = 0;
  if (document.body) {
   bodyScrollTop = document.body.scrollTop;
  }
  if (document.documentElement) {
   documentScrollTop = document.documentElement.scrollTop;
  }
  scrollTop = (bodyScrollTop - documentScrollTop > 0) ? bodyScrollTop : documentScrollTop;
  return scrollTop;
 }
 function getWindowHeight() {
  var windowHeight = 0;
  if (document.compatMode == "CSS1Compat") {
   windowHeight = document.documentElement.clientHeight;
  } else {
   windowHeight = document.body.clientHeight;
  }
  return windowHeight;
 }
</script>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
php抓即时股票信息
Oct 09 PHP
用PHP和ACCESS写聊天室(十)
Oct 09 PHP
PHP校验ISBN码的函数代码
Jan 17 PHP
php高级编程-函数-郑阿奇
Jul 04 PHP
PHP运行模式的深入理解
Jun 03 PHP
php加密算法之实现可逆加密算法和解密分享
Jan 21 PHP
Codeigniter注册登录代码示例
Jun 12 PHP
PHP获取数组的键与值方法小结
Jun 13 PHP
分享PHP函数实现数字与文字分页代码
Jul 28 PHP
PHP中each与list用法分析
Jan 08 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
Oct 08 PHP
php7下的filesize函数
Sep 30 PHP
PHP7下协程的实现方法详解
Dec 17 #PHP
浅谈PHP实现大流量下抢购方案
Dec 15 #PHP
PHP实现数组的笛卡尔积运算示例
Dec 15 #PHP
PHP中OpenSSL加密问题整理
Dec 14 #PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
Dec 14 #PHP
THINKPHP3.2使用soap连接webservice的解决方法
Dec 13 #PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
Dec 13 #PHP
You might like
基于文本的留言簿
2006/10/09 PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
2014/04/09 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
PHP中error_reporting()用法详解
2015/08/31 PHP
PHP实现的分页类定义与用法示例
2017/07/05 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
基于IE下ul li 互相嵌套时的bug,排查,解决过程以及心得介绍
2013/05/07 Javascript
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
JavaScript实现的背景自动变色代码
2015/10/17 Javascript
个人网站留言页面(前端jQuery编写、后台php读写MySQL)
2016/05/03 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
2016/06/23 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
2016/08/10 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
详解使用create-react-app添加css modules、sasss和antd
2018/07/31 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
使用ThinkJs搭建微信中控服务的实现方法
2019/08/08 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
node.js通过url读取文件
2020/10/16 Javascript
Python创建日历实例
2014/08/21 Python
简单了解OpenCV是个什么东西
2017/11/10 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
聊聊python中的异常嵌套
2020/09/01 Python
html5使用canvas绘制文字特效
2014/12/15 HTML / CSS
利用HTML5 Canvas API绘制矩形的超级攻略
2016/03/21 HTML / CSS
日本食品网上商店:JaponShop.com
2017/11/28 全球购物
怎样自定义一个异常类
2016/09/27 面试题
成语的广告词
2014/03/19 职场文书
无偿献血倡议书
2014/04/14 职场文书
2015届本科毕业生自我鉴定
2014/09/27 职场文书
检讨书格式范文
2015/05/07 职场文书
郭明义观后感
2015/06/08 职场文书