Framework7 - 无限滚动
描述
无限滚动允许您加载其他内容并在页面接近底部时执行所需的操作。
以下 HTML 布局显示无限滚动 −
<div class = "page"> <div class = "page-content infinite-scroll" data-distance = "100"> ... </div> </div>
上述布局包含以下类 −
page-content infinite-scroll − 它用于无限滚动容器。
data-distance −此属性允许您配置距离页面底部的距离(以 px 为单位)以触发无限滚动事件,其默认值为 50px。
如果您想在页面顶部使用无限滚动,则需要将额外的 "infinite-scroll-top" 类添加到 "page-content" −
<div class = "page">
<div class = "page-content infinite-scroll infinite-scroll-top">
...
</div>
</div>
无限滚动事件
infinite − 用于在页面滚动到底部指定距离时触发。它将成为 div class = "page-content infinite-scroll" 的目标。
有两种 App 方法可以与无限滚动容器一起使用 −
要将无限滚动事件侦听器添加到指定的 HTML 容器,请使用以下方法 −
myApp.attachInfiniteScroll(container)
您可以使用以下方法从指定的 HTML 容器中删除无限滚动事件侦听器 −
myApp.detachInfiniteScroll(container)
其中 parameters 是用作无限滚动容器的 HTMLElement 或 string 的必需选项。
示例
以下示例演示了无限滚动在加载附加内容时加载附加内容页面滚动到接近底部−
<!DOCTYPE html>
<html>
<head>
<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" />
<title>infinite_scroll</title>
<link rel = "stylesheet"
href = "https://cdnjs.cloudflare.com/ajax/libs/framework7/1.4.2/css/framework7.ios.min.css" />
<link rel = "stylesheet"
href = "https://cdnjs.cloudflare.com/ajax/libs/framework7/1.4.2/css/framework7.ios.colors.min.css" />
</head>
<body>
<div class = "views">
<div class = "view view-main">
<div class = "navbar">
<div class = "navbar-inner">
<div class = "left"> </div>
<div class = "center sliding">Infinite Scroll</div>
<div class = "right"> </div>
</div>
</div>
<div class = "pages navbar-through">
<div data-page = "home" class = "page">
<div class = "page-content infinite-scroll">
<div class = "list-block">
<ul>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 1</div>
</div>
</li>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 2</div>
</div>
</li>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 3</div>
</div>
</li>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 4</div>
</div>
</li>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 5</div>
</div>
</li>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 6</div>
</div>
</li>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 7</div>
</div>
</li>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 8</div>
</div>
</li>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 9</div>
</div>
</li>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 10</div>
</div>
</li>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 11</div>
</div>
</li>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 12</div>
</div>
</li>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 13</div>
</div>
</li>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 14</div>
</div>
</li>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 15</div>
</div>
</li>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 16</div>
</div>
</li>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 17</div>
</div>
</li>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 18</div>
</div>
</li>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 19</div>
</div>
</li>
<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">Item 20</div>
</div>
</li>
</ul>
</div>
<div class = "infinite-scroll-preloader">
<div class = "preloader"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<script type = "text/javascript"
src = "https://cdnjs.cloudflare.com/ajax/libs/framework7/1.4.2/js/framework7.min.js"></script>
<style>
.infinite-scroll-preloader {
margin-top:-20px;
margin-bottom:10px;
text-align:center;
}
.infinite-scroll-preloader .preloader {
width:34px;
height:34px;
}
</style>
<script>
var myApp = new Framework7();
var $$ = Dom7;
// 加载标志
var loading = false;
// 最后加载的索引
var lastIndex = $$('.list-block li').length;
// 加载的最大项目数
var maxItems = 60;
// 每次加载时附加项目
var itemsPerLoad = 20;
// 附加"infinite"事件处理程序
$$('.infinite-scroll').on('infinite', function () {
// 如果正在加载,则退出
if (loading) return;
// 设置加载标志
loading = true;
// 模拟 1s 加载
setTimeout(function () {
// 重置加载标志
loading = false;
if (lastIndex >= maxItems) {
// 没有其他内容需要加载,分离无限滚动事件以防止不必要的加载
myApp.detachInfiniteScroll($$('.infinite-scroll'));
// 删除预加载器
$$('.infinite-scroll-preloader').remove();
return;
}
// 生成新项目 HTML
var html = '';
for (var i = lastIndex + 1; i <= lastIndex + itemsPerLoad; i++) {
html += '<li class = "item-content">
<div class = "item-inner">
<div class = "item-title">
Item ' + i + '
</div>
</div>
</li>';
}
// 追加新项目
$$('.list-block ul').append(html);
// 更新最后加载的索引
lastIndex = $$('.list-block li').length;
}, 1000);
});
</script>
</body>
</html>
输出
让我们执行以下步骤来查看上述代码的工作原理 −
将上述 HTML 代码保存为服务器根文件夹中的 infinite_scroll.html 文件。
以 http://localhost/infinite_scroll.html 的形式打开此 HTML 文件,输出如下所示。
此示例允许在页面滚动到底部指定距离时加载其他内容。

