Framework7 - Infinite Scroll
คำอธิบาย
Infinite Scroll ช่วยให้คุณสามารถโหลดเนื้อหาเพิ่มเติมและดำเนินการตามที่ต้องการเมื่อเพจอยู่ใกล้กับด้านล่างสุด
เค้าโครง 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 Scroll
infinite- ใช้เพื่อทริกเกอร์เมื่อเลื่อนหน้าไปถึงระยะทางที่ระบุไปด้านล่าง มันจะเป็นเป้าหมายโดยระดับ div = "หน้าเนื้อหาอนันต์เลื่อน"
มีสองวิธีของแอพที่สามารถใช้กับคอนเทนเนอร์เลื่อนที่ไม่มีที่สิ้นสุด -
ในการเพิ่มตัวรับฟังเหตุการณ์การเลื่อนแบบไม่สิ้นสุดลงในคอนเทนเนอร์ HTML ที่ระบุให้ใช้วิธีการต่อไปนี้ -
myApp.attachInfiniteScroll(container)
คุณสามารถลบตัวฟังเหตุการณ์เลื่อนไม่สิ้นสุดออกจากคอนเทนเนอร์ HTML ที่ระบุโดยใช้วิธีการต่อไปนี้ -
myApp.detachInfiniteScroll(container)
โดยที่พารามิเตอร์เป็นอ็อพชันที่จำเป็นซึ่งใช้เป็นHTMLElementหรือสตริงสำหรับคอนเทนเนอร์เลื่อนแบบไม่สิ้นสุด
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการเลื่อนแบบไม่สิ้นสุดที่โหลดเนื้อหาเพิ่มเติมเมื่อการเลื่อนหน้าอยู่ใกล้กับด้านล่างสุด -
<!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;
// Loading flag
var loading = false;
// Last loaded index
var lastIndex = $$('.list-block li').length;
// Max items to load
var maxItems = 60;
// Append items per load
var itemsPerLoad = 20;
// Attach 'infinite' event handler
$$('.infinite-scroll').on('infinite', function () {
// Exit, if loading in progress
if (loading) return;
// Set loading flag
loading = true;
// Emulate 1s loading
setTimeout(function () {
// Reset loading flag
loading = false;
if (lastIndex >= maxItems) {
// Nothing more to load, detach infinite scroll events to prevent unnecessary loadings
myApp.detachInfiniteScroll($$('.infinite-scroll'));
// Remove preloader
$$('.infinite-scroll-preloader').remove();
return;
}
// Generate new items 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>';
}
// Append new items
$$('.list-block ul').append(html);
// Update last loaded index
lastIndex = $$('.list-block li').length;
}, 1000);
});
</script>
</body>
</html>
เอาต์พุต
ให้เราทำตามขั้นตอนต่อไปนี้เพื่อดูว่าโค้ดข้างต้นทำงานอย่างไร -
บันทึกโค้ด HTML ที่ระบุข้างต้นเป็น infinite_scroll.html ไฟล์ในโฟลเดอร์รูทเซิร์ฟเวอร์ของคุณ
เปิดไฟล์ HTML นี้เป็น http: //localhost/infinite_scroll.html และผลลัพธ์จะแสดงดังที่แสดงด้านล่าง
ตัวอย่างนี้อนุญาตให้โหลดเนื้อหาเพิ่มเติมเมื่อการเลื่อนหน้าเว็บของคุณถึงระยะทางที่ระบุลงไปด้านล่าง