何ページも情報があるWebサイトなどで、いちいち次ページへのリンクをクリックしページ遷移するのが煩わしい場合がある。
ページをリロードせず、TwitterやFacebookのように一番下までスクロールしたとき、自動的に次ページを読み込み表示するWebページを作ってみた。
備忘録的なものということで、いきなりソースコード。
autopager.js
var pageCnt=-1;
var baseArea = "vArea";
var noEvent;
// 非同期通信でページを読み込む
function nextPage(){
document.getElementById(baseArea + (pageCnt+1)).innerHTML = "start";
var keywd = document.getElementById("keyword").value;
pageCnt++;
targetArea = baseArea + pageCnt;
document.getElementById("nextBtn").style.display="none";
try{
document.getElementById(targetArea).innerHTML = "<img src='img/loading.gif'>";
var xhr = new XMLHttpRequest();
xhr.open("GET" , "next.php?page=" + pageCnt + "&keyword=" + keywd , true);
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if(xhr.status != 0){
document.getElementById(targetArea).innerHTML = xhr.responseText;
document.getElementById("nextBtn").style.display="block";
noEvent = false;
}
}
};
xhr.send(null);
}catch(e){
document.getElementById(targetArea).innerHTML = "例外が発生しました。";
}
}
function search(){
pageCnt = 0;
noEvent = true;
nextPage();
}
index.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
<script src="js/jquery-3.2.1.slim.min.js"></script>
<script src="js/jquery.inview.min.js"></script>
<script src="js/autopager.js"></script>
<script>
$(function() {
$('.lowArea').on(
'inview', function(event, isInView, x, y) {
if (isInView) {
if(!noEvent){
nextPage();
}
}
}
);
});
</script>
</head>
<body>
<form action="javascript:search()">
<input type="text" id="keyword">
<input type="submit" value="検索">
</form>
<div id="vArea1"></div>
<div class="lowArea" id="lowArea">
<input type="button" id="nextBtn" onClick="nextPage()" value="続き" style="display:none">
</div>
</body>
</html>
next.php
<?php // ダミーの処理時間 sleep(2); $pNo = @$_GET['page']; $key = @$_GET['keyword']; echo "<div style='width:600px;height:400px;border:1px solid #B0B0B0;font-size:300%;background:#ccccff'>"; echo "[".$key."]の検索結果<br>".$pNo."ページ目</div>"; // 更に次のページ表示領域 echo "<div id='vArea".($pNo+1)."'> </div>"; ?>
jquery-3.2.1.slim.min.js
jquery.inview.min.js
については、別途ダウンロード。
今回は、次に読み込むダミーのページをPHP(next.php)で書いているので、ここを
任意の読み込みたいページに書き換えてもらえればOK。
で、ちなみに、これをもっと頑張って発展させたのが⇒「はしごショッピング」。







