Thực hiện bất kỳ loại phân tích cú pháp HTML/DOM nào sẽ đưa bạn lên tường, tôi nghĩ và có nghĩa là bạn đang bắt đầu phát triển công cụ bố cục HTML của mình một cách hiệu quả.
Bạn nên sử dụng các chức năng cột CSS3. Về cơ bản, hãy hiển thị nội dung của bạn trong cột có chiều rộng và chiều cao cố định. Điều này sẽ trở thành trang của bạn. Sau đó, chuyển vị trí nội dung của bạn sang trái để di chuyển giữa các trang và bọc nó vào một vùng chứa sẽ ẩn các phần tử tràn.
HTML của chúng tôi về cơ bản sẽ là:
<body>
<div id="container">
<div id="content">
CONTENT GOES HERE
<span id="endMarker"></span>
</div>
</div>
<div>
<button id="previous">Previous</button>
<span id="page">Page N of M</span>
<button id="next">Next</button>
</div>
</body>
CSS cơ bản của chúng tôi là:
#container {
width: 240px;
overflow: hidden;
background-color: yellow;
}
#content {
position: relative;
height: 30em;
-moz-column-width: 240px;
-webkit-column-width: 240px;
column-width: 240px;
-moz-column-gap: 10px;
-webkit-column-gap: 10px;
column-gap: 10px;
}
Bây giờ chúng ta sẽ thiết lập thuộc tính CSS left
cho # content để chuyển đổi giữa các trang, trong bội số của - 250px.
Chúng tôi chỉ tìm ra số lượng cột mà nội dung của chúng tôi cần và chúng tôi đã phân trang. How to get css3 multi-column count in Javascript gợi ý: chúng ta sẽ tìm thấy nó từ vị trí bên trái của #endMarker
.
Đây là ví dụ làm việc http://lateral.co.za/pages.html, với chương đầu tiên của Moby Dick. Nó hoạt động trong Chrome và trên Android, nhưng không phải trong Firefox - tôi nghĩ vì sự khác biệt trong việc triển khai cột CSS. Vì chúng tôi quan tâm đến Android ở đây, mã là tốt.
Các bộ phận quan trọng là:
- Các thiết lập CSS như trên.
- Việc bổ sung một
<span id="endMarker"></span>
sau khi nội dung (nhưng trong #content
div)
- Việc bổ sung một nút
#previous
và #next
, và một khoảng #page
, tất cả các bên ngoài #container
.
javascript này sau jQuery tải:
var _column = 0;
var _columnCount = 0;
var _columnWidth = 240;
var _columnGap = 10;
$(function() {
_columnCount = Math.floor($('#endMarker').position().left/(_columnWidth + _columnGap));
setColumn = function(i) {
_column = i;
document.getElementById('content').style.left = -1 * _column * (_columnWidth + _columnGap);
$('#page').html('Page ' + (_column+1) + ' of ' + (_columnCount+1));
}
$('#next').click(function() {
if (_column==_columnCount) return;
setColumn(_column+1);
});
$('#previous').click(function() {
if (0==_column) return;
setColumn(_column-1);
});
setColumn(0);
});
Vậy là xong.
Có chỗ cho công việc. Người ta có thể muốn suy nghĩ về số lượng cột tính toán, tôi sắp xếp hút nó từ bài SO tham chiếu, nhưng chưa thực sự nghĩ rằng nó ... Chiều rộng của container dường như ảnh hưởng đến chiều rộng cột của nội dung, không hoàn toàn hợp lý với tôi.
Nhưng ít nhất mọi thứ dường như hoạt động mà không phải thực hiện bất kỳ phân tích cú pháp HTML nào và bố cục riêng, ít nhất là trong Chrome và trên Android.
Bạn có thể chia sẻ cách bạn giải quyết vấn đề này không? Cảm ơn. – Ravi