私はまだ JavaScript を学んでおり、外部ファイル (test1.php、test2.php など) から各ページのコンテンツを読み込む ajax Web サイトを構築しています。動作するコードをまとめるのに数時間を費やしましたが、非常にぎこちなく感じます。それを合理化する方法に関する推奨事項はありますか?または、私がしていることは愚かであり、別の方法で行う必要がありますか?
JS:
$(document).ready(function() {
var hash = window.location.hash.substr(1);
var projectID = $('#topNav a').each(function(){
var projectID = $(this).attr('id');
if(hash==projectID){
var toLoad = hash+'.php .content';
$('.content').load(toLoad);
$(this).siblings().removeClass('active');
$(this).addClass('active');
}
});
$('#topNav a').click(function(){
var toLoad = $(this).attr('href')+' .content',
newId = $(this).attr('rel'),
oldHeight = $('#shell').css("height"),
viewportHeight = $(window).height()
if (!$(this).hasClass("active")) {
$(this).siblings().removeClass('active');
$(this).addClass('active');
$('<div/>', {
id: newId,
class: 'content'
}).css({ top: viewportHeight + "px", display: "none" }).appendTo('#shell').load(toLoad);
$('#' + newId).show(function() {
$(this).animate({ top: "0px", queue: false}, 600);
$('#shell > div:first').animate({ top: "-" + oldHeight, queue: false}, 600, function() {
$('#shell > div:first').remove()
});
});
var newHash = $(this).attr('id');
window.history.pushState(null, "", "#" + newHash);
}
return false;
});
window.addEventListener("popstate", function(e) {
var hash = window.location.hash.substr(1),
oldHeight = $('#shell').css("height"),
viewportHeight = $(window).height()
var projectID = $('#topNav a').each(function(){
var projectID = $(this).attr('id');
if(hash==projectID){
var toLoad = hash+'.php .content'
$(this).siblings().removeClass('active');
$(this).addClass('active');
$('<div/>', {
id: hash,
class: 'content'
}).css({ top: viewportHeight + "px", display: "none" }).appendTo('#shell').load(toLoad, function() {
$(this).show(function() {
$(this).animate({ top: "0px", queue: false}, 600);
$('#shell > div:first').animate({ top: "-" + oldHeight, queue: false}, 600, function() {
$('#shell > div:first').remove()
});
});
});
}
});
});
});
HTML:
<nav id="topNav">
<a href="test1.php" id="test1" rel="content1" class="active">Test 1</a>
<a href="test2.php" id="test2" rel="content2">Test 2</a>
<a href="test3.php" id="test3"rel="content3">Test 3</a>
</nav>
<div id="shell">
<div id="content1" class="content">
<p>Here is the first page</p>
</div>
</div>
CSS:
#topNav {
position: fixed; overflow: auto; top: 0; left: 0;
width: 100%; z-index: 100; background: #fff; height: 80px;
}
#topNav a { margin-right: 30px; color: #a9a9a9; }
#topNav a.active { color: #333; }
#shell { margin: 0px; padding: 0px; width: 100%; height: 100%; }
.content {
position: absolute; margin: 0px; padding-bottom: 0px;
width: 100%; height: 100%;
}
#content1 { background: #000; color: #fff; }
#content2 { background: red; }
#content3 { background: blue; }