我正在开发一个网站,根据用户点击的菜单图标加载不同的网页。我和朋友写了这个javascript函数:
function loadPage(targetURL){
$.get( targetURL, function( data ) {
document.getElementById("placeholder").innerHTML=data;
window.scrollTo(0,0);
});
}
菜单图标的编码如下:
<img src="images/some_icon.png" title="Some Page" onclick="javascript:loadPage('pages/somePage.php')"/>
除非尝试跳转到特定的div id,否则效果很好。例如,
<img src="images/some_icon.png" title="Some Page" onclick="javascript:loadPage('pages/somePage#someLocationOnPage.php')"/>
取出.scrollTo(0,0)并不能解决问题。我将该行放入以确保在更改页面时页面一直向上滚动(否则,如果您位于页面中间并单击菜单图标,则新页面将显示在页面中间)。
我错过了什么?如何获得跳转到div id的链接?
答案 0 :(得分:0)
这两个网址没有什么不同。带书签的那个只获得相同的HTML代码。由于您没有告诉浏览器转到特定书签,因此它应显示相同的信息。 (当然,除非您的服务器为该链接发送不同的信息)
我猜你必须手动将视图移动到你想要的书签。
function loadPage(targetURL, targetID){
$.get( targetURL, function( data ) {
document.getElementById("placeholder").innerHTML=data;
if(targetID && $("#"+targetID).length != 0){
$(document).scrollTop($("#"+targetID).offset().top);
}
else {
window.scrollTo(0,0);
}
});
}
然后将目标的ID作为另一个参数。如果无法做到这一点,您还可以在网址中搜索#
并找到ID /或锚点。
答案 1 :(得分:0)
首先,您应该在代码中保留window.scrollTo(0,0)
,以便在每次点击菜单项时让页面保持最佳状态。
其次,如果点击正在调用的菜单图标
loadPage('pages/somePage#someLocationOnPage.php')
你的意图是打开'somePage'并滚动到元素id为'someLocationOnPage.php'的位置,然后你应该更新你的loadPage方法以检查'#'之后的部分。
function loadPage(targetURL){
$.get( targetURL, function( data ) {
document.getElementById("placeholder").innerHTML=data;
window.scrollTo(0,0);
// Grab url part after '#'
var name = targetURL.substr( href.indexOf('#') + 1 ), target = $('a[name='+ name +']'), target2 = $('#' + name);
// Determine of bookmark is available or not
target = (target.length)? target : target2;
// Scroll to the bookmark
$('html,body').animate({
scrollTop: target.offset().top
},400);
});
}