使用jQuery或者原生js实现鼠标滚动加载页面新数据


Posted in Javascript onMarch 06, 2016

相信很多人都见过瀑布流图片布局,那些图片是动态加载出来的,效果很好,对服务器的压力相对来说也小了很多,用鼠标操作的时候相信都见过这样的效果:进入qq空间,向下拉动空间,到底部时,会动态加载剩余的说说或者是日志 ,今天我们就来看看他们的实现思路和js控制动态加载的代码。

下面的代码主要是控制滚动条下拉时的加载事件的,无论是加载图片还是加载记录数据  都可以。

加载jQuery库后我们可以这样使用:  

$(window).scroll(function () {
    var scrollTop = $(this).scrollTop();
    var scrollHeight = $(document).height();
    var windowHeight = $(this).height();
    if (scrollTop + windowHeight == scrollHeight) {

   //此处是滚动条到底部时候触发的事件,在这里写要加载的数据,或者是拉动滚动条的操作

//var page = Number($("#redgiftNextPage").attr('currentpage')) + 1;
//redgiftList(page);
//$("#redgiftNextPage").attr('currentpage', page + 1);

    }
  });

解析:

判断滚动条到底部,需要用到DOM的三个属性值,即scrollTop、clientHeight、scrollHeight。

  • scrollTop为滚动条在Y轴上的滚动距离。
  • clientHeight为内容可视区域的高度。
  • scrollHeight为内容可视区域的高度加上溢出(滚动)的距离。

从这个三个属性的介绍就可以看出来,滚动条到底部的条件即为scrollTop + clientHeight == scrollHeight。 

纯js我们可以这样做:

window.onscroll = function() { 
   var scrollTop = document.body.scrollTop; 
   var offsetHeight = document.body.offsetHeight; 
   var scrollHeight = document.body.scrollHeight; 
   if (scrollTop == scrollHeight - offsetHeight) { 
    page++; 
    loadList(page); 
   } 
  }; 
 
 
function loadList(page) { 
   page = page || 1; 
 
   if (isLoad) { 
    getJSON('/forum.php?mod=hot&page=' + page).then(function(data) { 
     if (data.code == 200) { 
      data = data.data; 
      if (data && Object.keys(data).length > 0) { 
       for (var k in data) { 
        var v = data[k]; 
        detailTemplate = detailTemplate.cloneNode(true); 
        var userInfoObj = detailTemplate.getElementsByClassName('user-info')[0]; 
        userInfoObj.getElementsByClassName('name')[0].innerText = v.author; 
        userInfoObj.getElementsByClassName('avatar')[0].src = v.avatar; 
        userInfoObj.getElementsByClassName('post-time')[0].innerHTML = v.lastpost; 
        detailTemplate.getElementsByClassName('title')[0].innerText = v.subject; 
        detailTemplate.getElementsByClassName('desc')[0].innerText = v.subject; 
        var extInfoObj = detailTemplate.getElementsByClassName('ext-info')[0]; 
        extInfoObj.getElementsByClassName('from')[0].innerText = v.fname; 
        extInfoObj.getElementsByClassName('view-time')[0].innerText = v.views; 
        postListObj.appendChild(detailTemplate); 
       } 
      } else { 
       isLoad = false; 
      } 
     } else { 
      isLoad = false; 
     } 
    }, function(status) { 
     console.log('Something went wrong, status is ' + status); 
    }); 
   } 
  }

 

Javascript 相关文章推荐
javascript 不间断的图片滚动并可点击
Jan 15 Javascript
JS保存、读取、换行、转Json报错处理方法
Jun 14 Javascript
Javascript对象属性方法汇总
Nov 21 Javascript
node.js中的fs.fsyncSync方法使用说明
Dec 15 Javascript
浅谈js中变量初始化
Feb 03 Javascript
JS组件Bootstrap Table使用方法详解
Feb 02 Javascript
值得分享的轻量级Bootstrap Table表格插件
May 30 Javascript
Javascript实现页面滚动时导航智能定位
May 06 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
Mar 24 Javascript
关于vue-router的那些事儿
May 23 Javascript
javascript 使用sleep函数的常见方法详解
Apr 26 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
Aug 12 Javascript
AngularJS页面访问时出现页面闪烁问题的解决
Mar 06 #Javascript
JavaScript模拟数组合并concat
Mar 06 #Javascript
JavaScript模拟push
Mar 06 #Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
Mar 06 #Javascript
Node.js模块封装及使用方法
Mar 06 #Javascript
JavaScript中三种异步上传文件方式
Mar 06 #Javascript
JavaScript中获取纯正的undefined的方法
Mar 06 #Javascript
You might like
模拟OICQ的实现思路和核心程序(一)
2006/10/09 PHP
怎样在PHP中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
PHP 应用程序的安全 -- 不能违反的四条安全规则
2006/11/26 PHP
php更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
一个经典实用的PHP图像处理类分享
2014/11/18 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
2013/11/25 Javascript
JS获取时间的方法
2015/01/21 Javascript
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
jQuery处理XML文件的几种方法
2016/06/14 Javascript
浅谈JavaScript的计时器对象
2016/12/26 Javascript
微信小程序 数组(增,删,改,查)等操作实例详解
2017/01/05 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
2017/03/08 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
2018/01/13 Javascript
JS实现的3des+base64加密解密算法完整示例
2018/05/18 Javascript
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
一步一步实现Vue的响应式(对象观测)
2019/09/02 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
JavaScript中常用的3种弹出提示框(alert、confirm、prompt)
2020/11/10 Javascript
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
[01:50:49]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第三场 1月24日
2021/03/11 DOTA
Python自定义主从分布式架构实例分析
2016/09/19 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
python实现本地批量ping多个IP的方法示例
2019/08/07 Python
Python使用matplotlib绘制三维参数曲线操作示例
2019/09/10 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
Python爬虫开发与项目实战
2020/12/16 Python
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
电子商务专业自荐信
2014/06/02 职场文书
安全保卫工作竞聘材料
2014/08/25 职场文书
幼儿园八一建军节活动方案
2014/08/27 职场文书
2015年科协工作总结
2015/05/19 职场文书
go结构体嵌套的切片数组操作
2021/04/28 Golang
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers