原生ajax写的上拉加载

上拉加载的思路

1 上拉加载是要把屏幕拉到最底部的时候触发ajax事件请求数据

2.所有要获取屏幕的高度 文档的高度 和滚动的高度 下面的代码是已经做好了兼容的可以直接拿来用

Javascript:
alert(document.body.clientWidth);        //网页可见区域宽(body)
alert(document.body.clientHeight);       //网页可见区域高(body)
alert(document.body.offsetWidth);       //网页可见区域宽(body),包括border、margin等
alert(document.body.offsetHeight);      //网页可见区域宽(body),包括border、margin等
alert(document.body.scrollWidth);        //网页正文全文宽,包括有滚动条时的未见区域
alert(document.body.scrollHeight);       //网页正文全文高,包括有滚动条时的未见区域
alert(document.body.scrollTop);           //网页被卷去的Top(滚动条)
alert(document.body.scrollLeft);           //网页被卷去的Left(滚动条)
alert(window.screenTop);                     //浏览器距离Top
alert(window.screenLeft);                     //浏览器距离Left
alert(window.screen.height);                //屏幕分辨率的高
alert(window.screen.width);                 //屏幕分辨率的宽
alert(window.screen.availHeight);          //屏幕可用工作区的高
alert(window.screen.availWidth);           //屏幕可用工作区的宽

Jquery
alert($(window).height());                           //浏览器当前窗口可视区域高度
alert($(document).height());                        //浏览器当前窗口文档的高度
alert($(document.body).height());                //浏览器当前窗口文档body的高度
alert($(document.body).outerHeight(true));  //浏览器当前窗口文档body的总高度 包括border padding margin
alert($(window).width());                            //浏览器当前窗口可视区域宽度
alert($(document).width());                        //浏览器当前窗口文档对象宽度
alert($(document.body).width());                //浏览器当前窗口文档body的宽度
alert($(document.body).outerWidth(true));  //浏览器当前窗口文档body的总宽度 包括border padding margin

  

 //获取滚动条当前的位置
    function getScrollTop() {
        var scrollTop = 0;
        if (document.documentElement && document.documentElement.scrollTop) {
            scrollTop = document.documentElement.scrollTop;
        } else if (document.body) {
            scrollTop = document.body.scrollTop;
        }
        return scrollTop;
    }

    //获取当前可视范围的高度
    function getClientHeight() {
        var clientHeight = 0;
        if (document.body.clientHeight && document.documentElement.clientHeight) {
            clientHeight = Math.min(document.body.clientHeight, document.documentElement.clientHeight);
        } else {
            clientHeight = Math.max(document.body.clientHeight, document.documentElement.clientHeight);
        }
        return clientHeight;
    }

    //获取文档完整的高度
    function getScrollHeight() {
        return Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
    }
var upDown = function (opt) {
        opt = opt || {};
        var up = opt.up || function () {
        };
        window.onscroll = function () {
if (getScrollTop() + getClientHeight() == getScrollHeight()) { //距离顶部+当前高度 >=文档总高度 即代表滑动到底部
             if(is_scroll === true){ //当这个为true的时候调用up方法  ....is_scroll没看懂往下看
   up();
  }}
        }
    };

3.首先要默认加载第一页,在window.onload调用upDown这个方法

   window.onload = function () {
        getData();//页面加载完就显示了第一页
        upDown({
            up: getData
        });
    }

4.当页面滚到底部的时候触发up()这个方法,up调用getdata这个方法.下面就是怎么获取数据了

在全局定义两个变量 var is_scroll = true;var count = 0;

ajax的就不介绍了 可以看这个http://www.cnblogs.com/seanlxj/diary/2018/01/30/8385498.html

var is_scroll = true;var count = 0;function getAjax() {
        var el, li;
        var xhr = new XMLHttpRequest();
        xhr.open(‘get‘, ‘page‘ + count + ‘.json‘);
        xhr.send();
        xhr.onreadystatechange = function () {
            var loadingEnd = document.getElementById(‘loadingEnd‘);
            var dropLoad = document.getElementById(‘dropLoad‘);
            if (xhr.readyState === 4 && xhr.status === 200) {
        
                var res = xhr.responseText;
                var data = JSON.parse(res);
                allData = allData.concat(data);//新的一页拼接到后面;
                if (data.length === 0) {  //当获取到的数据长度为0 说明没有count+是请求不到数据了                     is_scroll = true // 定义为true
                    loadingEnd.style.display = ‘block‘; //显示没有数据
                }
                el = document.querySelector("#wrapper ul");
                for (var k in data) { //遍历获取到的每一条数据
                    li = document.createElement(‘li‘); // 创建节点
                    li.innerHTML = "<div class=‘item-top‘><span class=‘item-title‘>" + data[k].name + "</span><span class=‘item-money‘>" + data[k].money + "</span></div><div class=‘item-time‘>" + data[k].time + "</div><div class=‘bottom-line‘></div>";
                    el.appendChild(li, el.childNodes[0]);
                }
                dropLoad.style.display = ‘block‘;//显示加载中
            } else {  //这个可有可无 是个假的 不管请求没有请求到都会有个加载中的动画
                setTimeout(function () {
                    dropLoad.style.display = ‘none‘;
                }, 500)
            }
        };
    }
  <style>
        .drop-load {
            text-align: center;
            height: 80px;
            line-height: 50px;
        }

        .drop-load .loading {
            display: inline-block;
            height: 15px;
            width: 15px;
            border-radius: 100%;
            margin: 6px;
            border: 2px solid #666;
            border-bottom-color: transparent;
            vertical-align: middle;
            -webkit-animation: rotate 0.75s linear infinite;
            animation: rotate 0.75s linear infinite;
        }

        @-webkit-keyframes rotate {
            0% {
                -webkit-transform: rotate(0deg);
            }
            50% {
                -webkit-transform: rotate(180deg);
            }
            100% {
                -webkit-transform: rotate(360deg);
            }
        }

        @keyframes rotate {
            0% {
                transform: rotate(0deg);
            }
            50% {
                transform: rotate(180deg);
            }
            100% {
                transform: rotate(360deg);
            }
        }

        .loadingEnd {
            font-size: 0.3rem;
            color: black;
            width: 100%;
            height: 40px;
            text-align: center;
        }

    </style>
<body>
<div>
    <ul>
    </ul>
</div>
<div id="dropLoad" class="drop-load" style="display: none">
    <span class="loading"></span>
    <span>加载中</span>
</div>
<div id="loadingEnd" class="loadingEnd" style="display: none">到底了</div>
</body>

原文地址:https://www.cnblogs.com/seanlxj/p/8418542.html

时间: 2024-11-12 17:37:46

原生ajax写的上拉加载的相关文章

wp8用LongListSelector做列表(可用QQ好友动态,微博列表各种地方),加入上拉加载

最近在做一个动态列表(想QQ空间那样),都没发现有现成的可以让我去捡,只能自己去搞了,发现用listbox实现有点困难,就换了LongListSelector,但是LongListSelector看到写的上拉加载不满意,就参考了几篇文章自己写了一个,来先看看做的效果 下面说说如何实现吧,xaml代码(LongListSelector样式的就不传了,只是调整他的UI): <local:ViewModel x:Key="viewmodel"/> <DataTemplate

原生js移动端touch事件实现上拉加载更多

大家都知道jQuery里没有touch事件,所以在移动端使用原生js实现上拉加载效果还是很不错的,闲话不多说,代码如下: 1 //获取要操作的元素 2 var objSection = document.getElementsByTagName("div")[0]; 3 //给元素绑定监听事件 个人习惯把监听事件写在一块 4 objSection.addEventListener("touchstart", touchStart, false); 5 objSect

自个儿写Android的下拉刷新/上拉加载控件

前段时间自己写了一个能够"通用"的,支持下拉刷新和上拉加载的自定义控件.可能现如今这已经不新鲜了,但有兴趣的朋友还是可以一起来看看的. 与通常的View配合使用(比如ImageView) 与ListView配合使用 与RecyclerView配合使用 与SrcollView配合使用 局部刷新(但想必这种需要实际应该还是不多的-.) 好啦,效果大概就是这样.如果您看后觉得有一点兴趣.那么,以下是相关的信息: GitHub地址: https://github.com/RawnHwang/S

自个儿写Android的下拉刷新/上拉加载控件 (续)

本文算是对之前的一篇博文<自个儿写Android的下拉刷新/上拉加载控件>的续章,如果有兴趣了解更多的朋友可以先看一看之前的这篇博客. 事实上之所以会有之前的那篇博文的出现,是起因于前段时间自己在写一个练手的App时很快就遇到这种需求.其实我们可以发现类似这样下拉刷新.上拉加载的功能正在变得越来越普遍,可以说如今基本上绝大多数的应用里面都会使用到.当然,随着Android的发展,已经有不少现成的可以实现这种需求的"轮子"供我们使用了. 但转过头想一下想,既然本来就是自己练手

原生js实现上拉加载

原生js实现上拉加载:https://www.cnblogs.com/xinsir/p/10314694.html 原生js实现上拉加载其实超级简单,把原理整明白了你也会,再也不用去引一个mescroll啦~ 好了,废话不多说,开始进入正题:上拉加载是怎么去做的,原理就是监听滚动条滑到页面底部,然后就去做一次请求数据.那么只要我们对滚动监听即可. 现在,让我们来看代码: window.onscroll = function () { var scrollH = document.document

react + iscroll5 实现完美 下拉刷新,上拉加载

经过几天的反复折腾,总算做出一个体验还不错的列表页了,主要支持了下拉刷新,上拉加载两个功能. 一开始直接采用了react-iscroll插件,它是基于iscroll插件开发的组件.但是开发过程中,发现它内部封装的行为非常固化,限制了我对iscroll的控制能力,因此我转而直接基于iscroll插件实现. 网上也有一些基于浏览器原生滚动条实现的方案,找不到特别好的博客说明,而iscroll是基于Js模拟的滚动条(滚动条也是一个div哦),其兼容性更好,所以还是选择iscroll吧. 先体验效果 在

使用dragloader.js插件实现上拉加载/下拉刷新..

在写代码时候有个需求是,在触屏页面,为了加快页面加载速度,案件列表每页展示5条数据: 然后点击更多,展示下一页数据: 但是为了触屏更好的体验,改为往上滑动案件列表,加载下一页数据:就是要实现上拉加载/下拉刷新的效果: 我只用到了 上拉加载: 参考资料:http://blog.csdn.net/xb12369/article/details/39202711 下面是写的demo: html代码: <!DOCTYPE html> <html lang="en"> &

vue之better-scroll的封装,包含下拉刷新,上拉加载功能及UI(核心为借鉴,我仅仅是给轮子套上了外胎...)

先发原文作者.地址等信息.我把内容全部搬过来了,也可以去看原文.内容绝对是满满的干货,给原作者点赞!(我添加的内容在转载过来的后面,内容不多) 作者: ustbhuangyi 链接:http://www.imooc.com/article/18232 来源:慕课网 在我们日常的移动端项目开发中,处理滚动列表是再常见不过的需求了,以滴滴为例,可以是这样竖向滚动的列表,如图所示: 也可以是横向滚动的导航栏,如图所示: 可以打开"微信 -> 钱包->滴滴出行"体验效果. 我们在实

ListView上拉加载和下拉刷新多种实现方式

ListView上拉加载和下拉刷新多种实现方式 该篇为ListView下拉刷新和上拉加载实现的各种方法大合集.可能在具体的细节逻辑上处理不太到位,但基本上完成逻辑的实现.细节方面,个人可以根据自己的需求进行完善. 该博客将以四种思路来完成下拉刷新和上拉加载 自定义View实现上拉加载和下拉刷新 使用PullToRefresh 实现上拉加载和下拉刷新 使用Ultra-Pull-To-Refresh实现上拉加载和下拉刷新 使用SwipeToRefreshLayout实现上拉加载和下拉刷新 如果你对L