需求

  移动端使用angular实现上拉加载更多的条目,这个需求比较常见,网上的插件改动起来比较麻烦,不如自己写一个最适合,以前有同事写了一个,奈何bug太多,后来改分页了,我们产品说什么都让做,没办法,只能自己动手写一下,需要自定义指令,我的思路就是当页面第一次加载的时候我们先固定请求一部分数据进行显示,之后使用js探测垂直滚动条的滚动距离,当页面即将触底的时候发送第n+1请求,为防止在请求过程中重复请求加入了截流判断,其次在请求过程中页面最底部出现加载等待动画。如图所示

指令实现

// isBottom为防止滚动多次触发,用于截流。
// $scope.infinite_isCmp用于控制“正在加载……”的显示与隐藏,可以为这个标签添加css3动画,达到如图所示效果 XXXDirectives.directive("infiniteScroll", [function () {
return {
controller: "infiniteScroll_controller"
};
}]); XXXDirectives.controller("infiniteScroll_controller", ["$timeout",function ($timeout) { var isBottom = false;
$scope.infinite_isCmp = false; //将此处改为第一次请求数据
aa.require().success(function (data) {
$scope.data = data;
}); //获得元素
var wai = $window.document.getElementById("外层滚动容器wai");
var content = $window.document.getElementById("承载内容列表content"); //监听滚动
wai.onscroll = function () {
var scrollTop = wai.scrollTop,
viewHeight = wai.clientHeight,
height = content.offsetHeight; //判断是否滚动到底部
if (((scrollTop + viewHeight) >= height) && !isBottom)
{
isBottom = true;
console.log("到底了");
$scope.infinite_isCmp = true;
$scope.$apply();
$rootScope.requireCount+=10; //模拟请求延时,将第二次延时2s后
$timeout(function () {
aaa.require().success(function (data) {
$scope.model = data;
isBottom = false;
$scope.infinite_isCmp = false;
});
},2000);
}
}
}]);

html部分代码

<div id="wai">
<div id="content">
<infinite-scroll>
//循环li
<li ng-repeat=""></li>
//是否出现加载状态
<div ng-show="infinite_isCmp"></div>
</infinite-scroll>
</div>
</div>

原理

  监听最外层容器的滚动,当滚动条scrollTop加上容器视口的高度大于或等于内部承载内容的容器则代表需要开始加载,获取dom元素请大家自行修改。

结尾及使用

  将以上代码的第一次和第二次请求处分别填入要请求的地址,使用<infinite-scroll>标签包裹需要滚动的内容即可,如果需要底部加载动画的,请为infinite_isCmp增加class样式,程序有很多不完善的方面,代码解耦因为时间关系做的不到位,不过应对产品的催时间和完成效果是足够了。

常见开发需求之angular上拉加载更多的更多相关文章

  1. 移动端touch事件 || 上拉加载更多

    前言: 说多了都是泪,在进行项目开发时,在上拉加载更多实现分页效果的问题上,由于当时开发任务紧急,所以就百度找了各种移动端的上拉下拉 实现加载更多的插件.然后就留下了个坑:上拉加载的时候会由于用户错误 ...

  2. iOS开发 XML解析和下拉刷新,上拉加载更多

    iOS开发 XML解析和下拉刷新,上拉加载更多 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示 ...

  3. 微信小程序开发之 下拉刷新,上拉加载更多

    本文记载了如何在微信小程序里面实现下拉刷新,上拉加载更多 先开看一下界面 大致如此的界面吧. 这个Demo使用了微信的几个Api和事件,我先列出来. 1.wx.request (获取远程服务器的数据, ...

  4. Android 开发 上拉加载更多功能实现

    实现思维 开始之前先废话几句,Android系统没有提供上拉加载的控件,只提供了下拉刷新的SwipeRefreshLayout控件.这个控件我们就不废话,无法实现上拉刷新的功能.现在我们说说上拉加载更 ...

  5. 【小程序开发】上拉加载更多demo

    wxml: <scroll-view class='swiper-scroll' scroll-y="{{true}}" bindscrolltolower="lo ...

  6. 基于SwiperJs的H5/移动端下拉刷新上拉加载更多的效果

    最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...

  7. 基于SwiperJs的H5/移动端下拉刷新上拉加载更多

    最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...

  8. Andorid上拉加载更多的几种实现方式

    1.前言 Andriod中上拉加载更多的效果随处可见,因为一次性要展现的数据太多信息量太大的话,给用户的体验就很差(加载慢,界面卡顿.流量消耗大等),而加载更多可以控制每次加载条目的数量以达到快速加载 ...

  9. YCRefreshView-自定义支持上拉加载更多,下拉刷新。。。

    自定义支持上拉加载更多,下拉刷新,支持自由切换状态[加载中,加载成功,加载失败,没网络等状态]的控件,拓展功能[支持长按拖拽,侧滑删除]可以选择性添加 .具体使用方法,可以直接参考demo. 轻量级侧 ...

随机推荐

  1. Android进程整理

    一.概括 系统启动架构图: 上图在Android系统-开篇中有讲解,是从Android系统启动的角度来分析,本文是从进程/线程的视角来分析该问题. 1.1 父进程 在所有进程中,以父进程的姿态存在的进 ...

  2. bzoj 4318 OSU!

    期望dp. 考虑问题的简化版:一个数列有n个数,每位有pi的概率为1,否则为0.求以每一位结尾的全为1的后缀长度的期望. 递推就好了. l1[i]=(l1[i-1]+1)*p[i]+0*(1-p[i] ...

  3. SDL 1.2.15 issue

    SDL 1.2.15中,对于X11的函数,默认采用动态加载的方式 但相应的X11函数名在SDL中并没有重新命名(SDL2中都添加了前缀X11_) 这样在SDL与其他库混合静态编译链接时,X11的函数就 ...

  4. HTML2

    1. IIS是一个软件,在"客户端服务器"模型中,它是服务器端软件,它主要提供基于HTTP的文档服务,主要是WWW     的发送,以及FTP的文件下载服务. VS提供了" ...

  5. dos 固定ip命令

    dos 固定ip命令 ***************************************************************************************** ...

  6. 面试题目——《CC150》位操作

    面试题5.1:给定两个32位的整数N与M,以及表示比特位置的i与j.编写一个方法,将M插入N,使得M从N的第j位开始,到第i位结束.假定从j位到i位足以容纳M,也即若M=10011,那么j与i之间至少 ...

  7. jQuery知识点一 each()和toggleClass()

    jQuery的一些东东比较容易忘,所以在这里整理一下... ... 1. each (1) $(selector).each(function(index,element))         inde ...

  8. ASP.NET Session 详解

    阅读本文章之前的准备 阅读本文章前,需要读者对以下知识有所了解.否则,阅读过程中会在相应的内容上遇到不同程度的问题. 懂得ASP/ASP.NET编程 了解ASP/ASP.NET的Session模型 了 ...

  9. R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...

  10. JS自动缩放页面图片

    /** * 缩略图 * * @param bool isScaling 是否缩放 * @param int width 宽度 * @param int height 高度 * @param strin ...