常见开发需求之angular上拉加载更多
需求
移动端使用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上拉加载更多的更多相关文章
- 移动端touch事件 || 上拉加载更多
前言: 说多了都是泪,在进行项目开发时,在上拉加载更多实现分页效果的问题上,由于当时开发任务紧急,所以就百度找了各种移动端的上拉下拉 实现加载更多的插件.然后就留下了个坑:上拉加载的时候会由于用户错误 ...
- iOS开发 XML解析和下拉刷新,上拉加载更多
iOS开发 XML解析和下拉刷新,上拉加载更多 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示 ...
- 微信小程序开发之 下拉刷新,上拉加载更多
本文记载了如何在微信小程序里面实现下拉刷新,上拉加载更多 先开看一下界面 大致如此的界面吧. 这个Demo使用了微信的几个Api和事件,我先列出来. 1.wx.request (获取远程服务器的数据, ...
- Android 开发 上拉加载更多功能实现
实现思维 开始之前先废话几句,Android系统没有提供上拉加载的控件,只提供了下拉刷新的SwipeRefreshLayout控件.这个控件我们就不废话,无法实现上拉刷新的功能.现在我们说说上拉加载更 ...
- 【小程序开发】上拉加载更多demo
wxml: <scroll-view class='swiper-scroll' scroll-y="{{true}}" bindscrolltolower="lo ...
- 基于SwiperJs的H5/移动端下拉刷新上拉加载更多的效果
最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...
- 基于SwiperJs的H5/移动端下拉刷新上拉加载更多
最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...
- Andorid上拉加载更多的几种实现方式
1.前言 Andriod中上拉加载更多的效果随处可见,因为一次性要展现的数据太多信息量太大的话,给用户的体验就很差(加载慢,界面卡顿.流量消耗大等),而加载更多可以控制每次加载条目的数量以达到快速加载 ...
- YCRefreshView-自定义支持上拉加载更多,下拉刷新。。。
自定义支持上拉加载更多,下拉刷新,支持自由切换状态[加载中,加载成功,加载失败,没网络等状态]的控件,拓展功能[支持长按拖拽,侧滑删除]可以选择性添加 .具体使用方法,可以直接参考demo. 轻量级侧 ...
随机推荐
- zend studio(Eclipse)和PyDev搭建Python开发环境
原文是用Eclipse作开发环境,由于我已经装了zs,而zs也是基于Eclipse的,一试之下发现可以用,呵呵省事了.原文:http://www.cnblogs.com/Realh/archive/2 ...
- 【poj1739】 Tony's Tour
http://poj.org/problem?id=1739 (题目链接) 题意 给出一个n*m的地图,有些是障碍.问从左下角走遍所有非障碍格子一次且仅一次最终到达右下角的路径方案数. Solutio ...
- AutoVFL(适配)
1.添加约束(系统) a.一个约束(上下左右) +(instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)att ...
- centos7下 安装mysql
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-rele ...
- 搬家到cnblogs
从openshift搬到LOFTER再到点点然后来cnblogs,晃悠一大圈,主要是没时间学习很多东西,再加上cnblogs的搜索收录情况比较好一点(百 度搜索).另外听闻百度空间bye-bye了,以 ...
- Gravatar注册
今天在学习falsk时需要用到头像扩展,需要使用gravatar到网上查了查好像没有被墙,就试着用qq邮箱注册了一个账号,结果等了好长时间也没有等到激活邮箱,就百度了一下发现了一个技巧,原来这封邮件被 ...
- php提供更快的文件下载
在微博上偶然看到一篇介绍php更快下载文件的方法,其实就是利用web服务器的xsendfile特性,鸟哥的博客中只说了apache的实现方式,我找到了介绍nginx实现方式的文章,整理一下! let' ...
- python 3编码
python 3和2很大区别就是python本身改为默认用unicode编码. 字符串不再区分"abc"和u"abc", 字符串"abc"默 ...
- Coursera-Getting and Cleaning Data-Week2-课程笔记
Coursera-Getting and Cleaning Data-Week2 Saturday, January 17, 2015 课程概述 week2主要是介绍从各个来源读取数据.包括MySql ...
- PHP 获取中国时间,即上海时区时间
/** * 获取中国时间,即上海时区时间 * @param <type> $format * @return <type> */ function getChinaTime($ ...