【问题标题】:Hyperlink click redirecting to home and slidetoggeling a div超链接单击重定向到主页并滑动 div
【发布时间】:2012-08-17 07:04:35
【问题描述】:

我是否遗漏了某些内容或使用错误的术语进行搜索,但我无法自己解决此问题。如标题中所述,单击 navLink 应该返回主页,但也可以滑动切换幻灯片 2 并为网站设置动画。以下代码重新加载主页,但回调被覆盖或在此上下文中完全错误,因为切换和动画代码在其他上下文中工作。

非常感谢您的帮助

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)
});

【问题讨论】:

  • 也许你的方式也可以,但我一直看到它写成:.click(function(e){e.preventDefault();...});
  • 刚刚用 'e' 测试过,没有任何改变。
  • 重要的是在函数调用中引用了event,在jQuery中是使用e还是event并不重要,只要在函数中使用一致即可,但是在上面的代码中,eventundefined
  • 是的..这就是我想要的。不会解决您的问题,而是会在您解决当前问题时引起另一个问题
  • @Philip:谢谢,介于两者之间,我曾在该函数中使用过该事件,但在尝试和错误过程中再次放弃了它。

标签: jquery hyperlink navigation


【解决方案1】:

您正在更改文档位置,加载新页面,javacript 将再次加载,并且您的回调将永远不会在您离开页面时执行。

【讨论】:

  • 是的,我也猜到了,但无论如何都应该在家执行...?
  • 仅当您有一些在页面加载时执行的滑动功能时。在您重定向到另一个页面的部分之后,上面的代码不会做任何事情。
  • 在任何页面加载(包括主页)上,正文首先隐藏然后淡入。但是无论如何通过放置回调打开页面加载上的 div 并不是我想做的。
  • 啊,经典的加载时淡入淡出技巧。没有什么说“我很特别,你会等待更长的时间只是为了阅读我的网站”。
  • 再一次,你的回调永远不会运行。您正在单击一个链接,并重定向到另一个页面。在您重定向到另一个页面的那一刻,所有功能、事件和用户所做的一切都将丢失,包括该回调函数。在文档位置更改后无需放置任何内容,因为它永远不会运行,并且由于它是由单击事件触发的,因此它也不会在页面加载时运行。您需要一个新功能,其中之一是“查看我的页面上有什么元素”或“读取 URL”功能来处理加载时褪色的内容。 @Blazemonger - 同意! this!=UX;
【解决方案2】:

您在这里有 2 个选项来满足您的需要

1- 查询字符串

您可以使用查询字符串来确定此负载是来自您的链接还是普通链接 像这样:

$(function(){
 $('#redirect').click(function(){
   window.location = 'YOUR_HOME_DOCUMENT?lnk=1';
 });
});

然后在您的主页 ready() 函数中,检查此查询字符串是否存在,如果提供,然后为您想要的任何内容设置动画。

示例:

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- Cookies

我真的不建议在这种情况下使用此选项,但老实说,我想为您提供尽可能多的信息,您可以选择任何您认为合适的选项。

您可以在 cookie 中保留标志或变量,并尝试将其放入您的主页

查看此示例:http://jquery-howto.blogspot.com/2010/09/jquery-cookies-getsetdelete-plugin.html

或者这个插件:http://archive.plugins.jquery.com/project/Cookie

就是这样,如果您仍然需要这种方式的帮助,请告诉我,希望我的回答对您有用:)

【讨论】:

  • 第一个选项看起来很完美。任何想法我可以在哪里阅读,包括如何检查查询字符串的存在?
  • 没错。唯一的方法是在 URL 的末尾添加一个查询字符串,然后在页面加载时检查该字符串是否存在。如果是,则执行您的代码,如果它没有像正常那样加载它。
  • 非常感谢你们两个,但现在是半夜。明天我会试着深入研究所有这些代码,看看能不能想出点什么。
  • 如果真的对你有帮助,别忘了“标记为答案”;)
  • @Mohammed ElSayed:是的,所以我已经考虑了这段代码。我认为它不会起作用,因为 navLink 位于页脚中。我不能在该函数中放置类似一个 Url 的内容,除非将“+1”更改为“-1”并使用“home”而不是问号。它将存储除“家”之外的每个网址。我是否走在正确的轨道上,第二段代码还会运行吗?
猜你喜欢
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
  • 2012-12-08
  • 2011-07-13
  • 1970-01-01
相关资源
最近更新 更多