我正在使用与Facebook和Google邮件一起使用的“锚点导航”创建一个网站。我有它工作但不完全。当我使用#contact
之类的内容加载页面时,除非我点击链接,否则它不会加载它。此外,是否有更好,更有效的方式来做我正在做的事情?我不是JS编程的最佳人选。
的JavaScript :
$.navigate = function() {
// a new link
if($anchor != document.location.hash){
// add a preloader
$("#content")
.empty()
.html('<p class="align-center"><img src="assets/images/loading.gif" /></p>');
// change the anchor saved for next time
$anchor = document.location.hash;
// get the variables ready for the get
var i = $anchor.substring(1).split("/");
var $page = i[0];
var $y = (i[1]) ? i[1] : false;
// get the file
$.get("callback.php", { x: $page, y: $y }, function(data){
$("#content")
.empty()
.html(data);
},"html");
}
};
$(function() {
var $anchor = "";
// change from the URI. This dont work.
if(document.location.hash){ $.navigate(); }
$("a","#nav")
.css({backgroundColor:"#f7f7f7"})
.each(function() {
$(this).attr("href","#" + $(this).attr("name"));
});
setInterval('$.navigate()', 300);
});
HTML:
<div id="nav">
<ul class="horizontal-nav">
<li><a href="http://streetmafia.co.uk/" name="index">Home</a></li>
<li><a href="http://streetmafia.co.uk/about" name="about">About</a></li>
<li><a href="http://streetmafia.co.uk/portfolio" name="portfolio">Portfolio</a></li>
<li><a href="http://streetmafia.co.uk/contact" name="contact">Contact</a></li>
</ul>
<div id="l-nav"></div>
<div id="r-nav"></div>
</div>
答案 0 :(得分:2)
尝试使用ReallysimpleHistory jquery插件。
答案 1 :(得分:1)
在ReallysimpleHistory插件上同上。 我不确定我是否完全理解你的代码,但我会把它分成两个函数:
在你的“$(function(){...”中,你先调用第二个函数(只需一次)。然后你将链接的click事件与第一个函数绑定。 您可以使用$(this).attr('name')来获取加载函数中的哈希值。
快速示例(未测试:P):
function ajaxLoad()
{
var anchor;
// Check to see if it's being called from an event
if ( $(this).length > 0 )
{
anchor = $(this).attr('name');
}
else
{
anchor = document.location.hash;
}
}
答案 2 :(得分:0)
您可能想要查看jQuery History项目: http://www.balupton.com/projects/jquery-history
它比其他功能更全面,更容易实现,加上支持如果太棒了。还有一个功能齐全的AJAX扩展,允许您轻松地将Ajax请求集成到您的状态/哈希,将您的网站转换为功能齐全的Web 2.0应用程序: http://www.balupton.com/projects/jquery-ajaxy
以下是使用jQuery History的示例(从演示站点获取):
// Bind a handler for ALL hash/state changes
$.History.bind(function(state){
// Update the current element to indicate which state we are now on
$current.text('Our current state is: ['+state+']');
// Update the page"s title with our current state on the end
document.title = document_title + ' | ' + state;
});
// Bind a handler for state: apricots
$.History.bind('/apricots',function(state){
// Update Menu
updateMenu(state);
// Show apricots tab, hide the other tabs
$tabs.hide();
$apricots.stop(true,true).fadeIn(200);
});
jQuery Ajaxy的一个例子(取自演示网站):
'page': {
selector: '.ajaxy-page',
matches: /^\/pages\/?/,
request: function(){
// Log what is happening
window.console.debug('$.Ajaxy.configure.Controllers.page.request', [this,arguments]);
// Adjust Menu
$menu.children('.active').removeClass('active');
// Hide Content
$content.stop(true,true).fadeOut(400);
// Return true
return true;
},
response: function(){
// Prepare
var Ajaxy = $.Ajaxy; var data = this.State.Response.data; var state = this.state;
// Log what is happening
window.console.debug('$.Ajaxy.configure.Controllers.page.response', [this,arguments], data, state);
// Adjust Menu
$menu.children(':has(a[href*="'+state+'"])').addClass('active').siblings('.active').removeClass('active');
// Show Content
var Action = this;
$content.html(data.content).fadeIn(400,function(){
Action.documentReady($content);
});
// Return true
return true;
如果您想获得查询字符串参数(所以yoursite/page.html#page1?a.b=1&a.c=2
),您可以使用:
$.History.bind(function(state){
var params = state.queryStringToJSON(); // would give you back {a:{b:1,c:2}}
}
请查看这些演示链接,了解它们的运行情况,以及所有安装和使用详情。