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出现Cannot modify header information问题的解决方法大全
Apr 09 PHP
js下函数般调用正则的方法附代码
Jun 22 PHP
php5 apache 2.2 webservice 创建与配置(java)
Jan 27 PHP
php下利用curl判断远程文件是否存在的实现代码
Oct 08 PHP
测试PHP连接MYSQL成功与否的代码
Aug 16 PHP
PHP检测移动设备类mobile detection使用实例
Apr 14 PHP
php获取文件名后缀常用方法小结
Feb 24 PHP
php将字符串随机分割成不同长度数组的方法
Jun 01 PHP
php用户注册信息验证正则表达式
Nov 12 PHP
Yii使用Captcha验证码的方法
Dec 28 PHP
php+ajax+json 详解及实例代码
Dec 12 PHP
PHP中Trait及其应用详解
Feb 14 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
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
2012/04/09 PHP
自定义php类(查找/修改)xml文档
2013/03/26 PHP
在PHP中运行Linux命令并启动SSH服务的例子
2014/06/12 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
来自chinaz的ajax获取评论代码
2008/05/03 Javascript
javascript parseInt 函数分析(转)
2009/03/21 Javascript
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
基于jQuery的公告无限循环滚动实现代码
2012/05/11 Javascript
js判断鼠标同时离开两个div的思路及代码
2013/05/31 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
Js的Array数组对象详解
2016/02/22 Javascript
javascript中call apply 与 bind方法详解
2016/03/10 Javascript
JS实现的幻灯片切换显示效果
2016/09/07 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
vue环形进度条组件实例应用
2018/10/10 Javascript
详解Vue中CSS样式穿透问题
2019/09/12 Javascript
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
在vue中axios设置timeout超时的操作
2020/09/04 Javascript
Python的Tornado框架异步编程入门实例
2015/04/24 Python
python 表达式和语句及for、while循环练习实例
2017/07/07 Python
解决python3运行selenium下HTMLTestRunner报错的问题
2018/12/27 Python
利用selenium爬虫抓取数据的基础教程
2019/06/10 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
2020/06/15 Python
娱乐节目策划方案
2014/06/10 职场文书
党建目标管理责任书
2014/07/25 职场文书
反四风对照检查材料思想汇报
2014/09/16 职场文书
写给妈妈的感谢信
2015/01/22 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
2015年中秋放假通知范文
2015/08/18 职场文书
golang 实现时间戳和时间的转化
2021/05/07 Golang
JS前端轻量fabric.js系列之画布初始化
2022/08/05 Javascript