Skip to content

Commit f79a234

Browse files
committed
add page loader;
1 parent 80241c6 commit f79a234

File tree

3 files changed

+74
-8
lines changed

3 files changed

+74
-8
lines changed

src/css/base.css

+11
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,17 @@
5050
margin: 12px 15px;
5151
}
5252

53+
.picaweb .next-page-loader {
54+
display: none;
55+
padding: 10px;
56+
margin-bottom: 20%;
57+
}
58+
59+
.picaweb .prev-page-loader {
60+
display: none;
61+
padding: 20px 0;
62+
}
63+
5364
@media (min-width: 768px) {
5465
.picaweb .thumbnail-fixed-height > img {
5566
max-height: 80%;

src/index.tpl

+4-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
</head>
1313
<body>
1414
<div class="container-fluid picaweb">
15+
<div class="prev-page-loader text-center" id="prev-page-loader"><i class="glyphicon glyphicon-arrow-down"></i> load prev</div>
1516
<nav class="navbar navbar-default" role="navigation">
1617
<div class="container-fluid">
1718
<button type="button" class="navbar-toggle collapsed" id="navbar-toggle">
@@ -34,12 +35,13 @@
3435
</div>
3536
</nav>
3637
<div class="container-fluid bare" id="main-container"></div>
38+
<div class="next-page-loader text-center" id="next-page-loader"><i class="glyphicon glyphicon-arrow-up"></i> load next</div>
3739
</div>
3840
<script type="text/x-dot-template" id="category-board">
3941
<div class="row">
4042
{%~ it :item:index %}
4143
<div class="col-xs-12 col-sm-6 col-md-3" data-id="{%! item.id %}">
42-
<a href="#/category/{%! item.id %}/comic/page/{%! item.page || 1 %}" class="block-link">
44+
<a href="#/category/{%! item.id %}/comic/page/{%! item.page || 1 %}!total={%= Math.ceil(item.all_comics / 20) %}" class="block-link">
4345
<div class="thumbnail">
4446
<img src="{%! false == localStorage.https ? item.cover_image : item.cover_image.replace('http://', 'https://') %}" alt="{%! item.name %}" />
4547
<div class="caption">
@@ -118,7 +120,7 @@
118120
<div>
119121
{% for (var i = 1; i <= it.ep_count; i++) { %}
120122
<div class="col-xs-12 col-sm-2 col-md-2" data-ep="{%= i %}">
121-
<a href="#/comic/{%! it.comic.id %}/ep/{%= i %}!dir={%! it.comic.img_directory %}&total={%= it.comic.total_page %}" class="block-link">
123+
<a href="#/comic/{%! it.comic.id %}/ep/{%= i %}!dir={%! it.comic.img_directory %}&pageCount={%= it.comic.total_page %}&total={%! it.ep_count %}" class="block-link">
122124
<div class="panel panel-default">
123125
<div class="panel-body text-center">
124126
{%= i %}

src/js/logic/main.js

+59-6
Original file line numberDiff line numberDiff line change
@@ -148,10 +148,10 @@
148148
});
149149
}
150150

151-
function getEpisode(comicId, episode, dir, total, callback) {
152-
if (dir && total) {
151+
function getEpisode(comicId, episode, dir, pageCount, total, callback) {
152+
if (dir && total && 1 == total) {
153153
var picList = [];
154-
for (var i = 1; i <= total; i++) {
154+
for (var i = 1; i <= pageCount; i++) {
155155
picList.push({
156156
url: picUrlPrefix + dir + '/' + episode + '/' + i + '.jpg',
157157
alt_url: i < 10 ? picUrlPrefix + dir + '/' + episode + '/0' + i + '.jpg' : null
@@ -240,6 +240,55 @@
240240
console.log(e);
241241
});
242242

243+
// NOTE: load next/prev page
244+
// TOOD: handle touch event
245+
var $window = $(window),
246+
$document = $(document),
247+
$prevPageLoader = $('#prev-page-loader'),
248+
$nextPageLoader = $('#next-page-loader');
249+
$window.scroll(function() {
250+
var hash = location.hash.split('!'),
251+
fragParamString = hash[1],
252+
windowScrollTop,
253+
matches,
254+
fragParams,
255+
currnetPage;
256+
hash = hash[0];
257+
matches = hash.match(/^(.*?\/)(\d+)$/);
258+
if (!matches) {
259+
return;
260+
}
261+
windowScrollTop = $window.scrollTop();
262+
if (windowScrollTop + $window.height() == $document.height()) {
263+
if ($nextPageLoader.is(':visible')) {
264+
fragParams = getFragParams();
265+
currnetPage = parseInt(matches[2], 10);
266+
if (fragParams.total == currnetPage) {
267+
return;
268+
}
269+
location.hash = matches[1] + (currnetPage + 1) + '!' + (fragParamString ? fragParamString : '');
270+
$nextPageLoader.hide();
271+
$('html, body').animate({scrollTop: '1px'}, 500, 'swing');
272+
} else {
273+
$nextPageLoader.show();
274+
}
275+
}
276+
if (0 == windowScrollTop) {
277+
if ($prevPageLoader.is(':visible')) {
278+
currnetPage = parseInt(matches[2], 10);
279+
if (currnetPage == 1) {
280+
return;
281+
}
282+
location.hash = matches[1] + (currnetPage - 1) + '!' + (fragParamString ? fragParamString : '');
283+
$prevPageLoader.hide();
284+
} else {
285+
$prevPageLoader.show();
286+
$window.scrollTop(1);
287+
}
288+
289+
}
290+
});
291+
243292
/* routes */
244293
// index
245294
$.routes.add('/$', 'index', function() {
@@ -277,12 +326,16 @@
277326
$.routes.add('/comic/{id:int}/ep/{ep:int}', 'comicPicList', function() {
278327
console.log(this);
279328
var fragParams = getFragParams();
280-
getEpisode(this.id, this.ep, fragParams.dir, fragParams.total, function(data) {
329+
getEpisode(this.id, this.ep, fragParams.dir, fragParams.pageCount, fragParams.total, function(data) {
281330
renderContent(data, 'pic-list');
282331
// NOTE: hotfix for uncertain leading-zero
283332
$('img').on('error', function(e) {
284-
var ele = $(e.target);
285-
ele.prop('src', ele.data('url'));
333+
var ele = $(e.target),
334+
altUrl = ele.data('url'),
335+
currentUrl = ele.prop('src');
336+
if (altUrl && altUrl != currentUrl) {
337+
ele.prop('src', altUrl);
338+
}
286339
});
287340
});
288341
});

0 commit comments

Comments
 (0)