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 相关文章推荐
PHP4实际应用经验篇(5)
Oct 09 PHP
用来给图片加水印的PHP类
Apr 09 PHP
PHP 危险函数解释 分析
Apr 22 PHP
PHP5.3.1 不再支持ISAPI
Jan 08 PHP
基于PHP选项与信息函数的使用详解
May 10 PHP
php实现使用正则将文本中的网址转换成链接标签
Dec 03 PHP
通过php添加xml文档内容的方法
Jan 23 PHP
php 类自动载入的方法
Jun 03 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
Sep 23 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
May 09 PHP
PHP实现JS中escape与unescape的方法
Jul 11 PHP
PHP迭代器和迭代的实现与使用方法分析
Apr 19 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
可快速识别放射性物质-国外大神教你diy一个开放式辐射探测器
2020/03/12 无线电
php mysql Errcode: 28 终极解决方法
2009/07/01 PHP
php preg_filter执行一个正则表达式搜索和替换
2012/02/27 PHP
php中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
php遍历文件夹和文件列表示例分享
2014/03/11 PHP
PHP中的output_buffering详细介绍
2014/09/27 PHP
php页面跳转session cookie丢失导致不能登录等问题的解决方法
2016/12/12 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
2018/09/16 PHP
两个DIV等高的JS的实现代码
2007/12/23 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
Javascript中string转date示例代码
2013/11/01 Javascript
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
javascript实现根据汉字获取简拼
2016/09/25 Javascript
微信小程序 教程之小程序配置
2016/10/17 Javascript
微信小程序调用PHP后台接口 解析纯html文本
2017/06/13 Javascript
使用vue-infinite-scroll实现无限滚动效果
2018/06/22 Javascript
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
详解JavaScript的变量
2019/04/04 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
JavaScript实现简单计算器功能
2019/12/19 Javascript
python实现实时监控文件的方法
2016/08/26 Python
Python内建模块struct实例详解
2018/02/02 Python
python中对数据进行各种排序的方法
2019/07/02 Python
python之生产者消费者模型实现详解
2019/07/27 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
用python写PDF转换器的实现
2020/10/29 Python
python 自动识别并连接串口的实现
2021/01/19 Python
英国知名小木屋定制网站:Tiger Sheds
2020/03/06 全球购物
个人近期表现材料
2014/02/11 职场文书
护理专业毕业生自荐书
2014/05/24 职场文书
python实现web邮箱扫描的示例(附源码)
2021/03/30 Python
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android