要么是我遗漏了什么,要么是用错误的术语搜索,但我自己无法解决这个问题。正如标题中所描述的,点击navLink应该会回到主页,但也可以滑动切换幻灯片-2并使网站动画化。下面的代码会重新加载home,但回调要么被覆盖,要么只是在上下文中出错,因为切换和动画代码在其他上下文中工作。
将非常感谢您的帮助
function goHome(callback) {
window.location = $("#navLink").find("a").attr("href");
callback()
}
function changeHome(){
$("#slide-2 h2").next(".portNav").slideToggle(800);
$("html, body").animate({scrollTop:$(this).offset().top}, 'medium');
}
$("#navLink").click(function(event){
event.preventDefault();
goHome(changeHome)
});
您正在更改文档位置,加载一个新页面,javascript将再次加载,并且您的回调将永远不会在离开页面时执行。
这里有两个选项,可以实现您需要的
1-QueryString
您可以使用querystring来确定这个负载是来自您的链接还是普通链接像这样的东西:
$(function(){
$('#redirect').click(function(){
window.location = 'YOUR_HOME_DOCUMENT?lnk=1';
});
});
然后在homepage ready()函数中,检查是否存在该querystring(如果提供),然后根据需要设置动画。
示例:
1-首先,为了方便地读取Querystring变量,我总是使用以下jQuery插件。(我记不清我是从哪里得到这个代码的,但非常感谢最初的海报)。
$.extend({
getUrlVars: function () {
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for (var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
},
getUrlVar: function (name) {
if ($.getUrlVars()[name] == null) {
return "";
}
else {
return $.getUrlVars()[name];
}
}
});
然后,我可以做这样的事情:
$(function (){ // a short hand for $(document).ready(function) ;)
var comingFromMyLink = $.getUrlVar('lnk');
if(comingFromMyLink)
{
// do the required animation here
}
});
2-Cookie
我真的不建议在这种情况下使用此选项,但老实说,我想为您提供尽可能多的信息,您可以选择任何您认为合适的信息
你可以在cookie中保留一个标志或变量,并尝试将其放入你的主页
签出此示例:http://jquery-howto.blogspot.com/2010/09/jquery-cookies-getsetdelete-plugin.html
或此插件:http://archive.plugins.jquery.com/project/Cookie
就是这样,如果你还需要这种帮助,请告诉我,希望你能找到我的答案:)