Framewrok7 - 下拉刷新功能的实现(附样例)
作者:hangge | 2016-10-11 08:40
在移动应用开发中,列表的下拉刷新是一个很常见的功能。Framewrok7 本身就自带了一个下拉刷新组件,直接添加到页面上就可以轻松实现下拉刷新功能。而且不仅仅局限在表格上使用,其他需要下拉刷新的地方都可以使用。

(2)my-app.js
二、高级用法
1,修改下拉刷新的触发距离
上面的样例我们使用默认的触发距离(即下拉 44px 距离后开始执行刷新操作)。通过 data-ptr-distance 属性值我们可以自定义下拉的触发距离。
2,下拉刷新相关事件
上面样例我们监听了下拉组件的刷新事件(refresh)。其实整个下拉过程中,各个步骤状态都有相应的事件。
3,重置下拉刷新
前面样例中,我们数据刷新完毕后调用 myApp.pullToRefreshDone() 方法重置页面上所有下拉组件,将它们恢复到初始状态。
我们也可以单独指定需要重置的对象。
4,使用代码触发下拉刷新
我们也可以在 js 中使用代码来触发下拉刷新这个操作(触发后同样有下拉移动,进度条显示等效果)。
5,启用/停用下拉刷新功能
一、基础功能介绍
1,效果图
(1)下面给表格添加个下拉刷新功能,下拉时表格上方会有个向下的箭头。
(2)下拉到一定距离放开后,箭头图标变成环形进度条,表示开始加载数据。(这里直接使用本地生成的随机数据作为演示)
(3)数据加载完毕后,进度条消失。表格恢复到原来位置。

2,使用说明
(1)对于允许下拉刷新的 page-content 容器要添加 pull-to-refresh-content 样式。
(2)页面上还需添加个下拉刷新层(pull-to-refresh-layer),用于显示箭头以及 preloader 图标。
(3)数据加载完毕后,我们要手动调用 myApp.pullToRefreshDone()。隐藏下拉层,并将表格恢复原位。
3,样例代码
(1)index.html
<!DOCTYPE html>
<html>
<head>
<!-- meta标签设置-->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<!-- app标题 -->
<title>hangge.com</title>
<!-- 使用iOS CSS主题样式-->
<link rel="stylesheet" href="css/framework7.ios.min.css">
<!-- iOS related颜色样式 -->
<link rel="stylesheet" href="css/framework7.ios.colors.min.css">
<!-- 自定义样式-->
<link rel="stylesheet" href="css/my-app.css">
</head>
<body>
<!-- Status bar overlay for full screen mode (PhoneGap) -->
<div class="statusbar-overlay"></div>
<!-- 所有的Views视图 -->
<div class="views">
<!-- 主视图(需要有"view-main"样式) -->
<div class="view view-main">
<!-- 顶部导航栏 -->
<div class="navbar">
<div class="navbar-inner">
<!-- 标题元素(为了让页面切换时标题文字有滑动效果,添加sliding样式) -->
<div class="center sliding">hangge.com</div>
</div>
</div>
<!-- 页面容器(Pages container)由于我们使用了固定位置的navbar和toolbar,
所以这里添加额外样式(navbar-through和toolbar-through)-->
<div class="pages navbar-through toolbar-through">
<!-- 首页, "data-page" 里设置页面名字 -->
<div data-page="index" class="page">
<div id="articles" class="page-content pull-to-refresh-content">
<!-- 下拉刷新层 -->
<div class="pull-to-refresh-layer">
<div class="preloader"></div>
<div class="pull-to-refresh-arrow"></div>
</div>
<!-- 列表 -->
<div class="list-block">
<ul>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Framework7框架的js-->
<script type="text/javascript" src="js/framework7.min.js"></script>
<!-- 你的应用的js-->
<script type="text/javascript" src="js/my-app.js"></script>
</body>
</html>
(2)my-app.js
// 初始化 app
var myApp = new Framework7({
init: false //禁用App的自动初始化功能
});
// 为便于使用,自定义DOM库名字为$$
var $$ = Dom7;
// 添加首页视图
var mainView = myApp.addView('.view-main', {
// 让这个视图支持动态导航栏
dynamicNavbar: true,
});
//index页面初始化
myApp.onPageInit('index', function (page) {
//初始数据
refreshData();
//下拉刷新
$$('#articles').on('refresh', function (e) {
//为更好的看到效果,这里加个延时
setTimeout(refreshData,700);
});
});
//刷新数据
function refreshData() {
var itemHTML = "";
for(var i=0; i<5; i++){
itemHTML += '<li class="item-content">' +
' <div class="item-inner">' +
' <div class="item-title">测试数据'+Math.round(Math.random()*100)+'</div>' +
' </div>' +
'</li>';
}
//重新设置数据
$$('#articles').find('ul').html(itemHTML);
//刷新完毕后,重置下拉状态
myApp.pullToRefreshDone();
}
//初始化应用
myApp.init();
二、高级用法
1,修改下拉刷新的触发距离
上面的样例我们使用默认的触发距离(即下拉 44px 距离后开始执行刷新操作)。通过 data-ptr-distance 属性值我们可以自定义下拉的触发距离。
<div class="page">
<!-- Page content should have additional "pull-to-refresh-content" class -->
<div class="page-content pull-to-refresh-content" data-ptr-distance="55">
<!-- Default pull to refresh layer-->
<div class="pull-to-refresh-layer">
<div class="preloader"></div>
<div class="pull-to-refresh-arrow"></div>
</div>
<!-- usual content below -->
<div class="list-block">
...
</div>
</div>
</div>
2,下拉刷新相关事件
上面样例我们监听了下拉组件的刷新事件(refresh)。其实整个下拉过程中,各个步骤状态都有相应的事件。
| Event | Target | Description |
|---|---|---|
| pullstart | Pull To Refresh content<div class="pull-to-refresh-content"> | 开始下拉时触发 |
| pullmove | Pull To Refresh content<div class="pull-to-refresh-content"> | 下拉拖动时触发 |
| pullend | Pull To Refresh content<div class="pull-to-refresh-content"> | 松开后停止下拉时触发 |
| refresh | Pull To Refresh content<div class="pull-to-refresh-content"> | 进入“刷新”状态时触发 |
| refreshdone | Pull To Refresh content<div class="pull-to-refresh-content"> | 刷新完毕后触发,恢复原来状态 (在pullToRefreshDone方法执行后) |
3,重置下拉刷新
前面样例中,我们数据刷新完毕后调用 myApp.pullToRefreshDone() 方法重置页面上所有下拉组件,将它们恢复到初始状态。
我们也可以单独指定需要重置的对象。
myApp.pullToRefreshDone("#articles");
4,使用代码触发下拉刷新
我们也可以在 js 中使用代码来触发下拉刷新这个操作(触发后同样有下拉移动,进度条显示等效果)。
myApp.pullToRefreshTrigger('#articles');
5,启用/停用下拉刷新功能
//禁止下拉刷新功能
myApp.destroyPullToRefresh('#articles')
//重新启用下拉刷新功能
myApp.initPullToRefresh('#articles')
全部评论(0)