this page的导航栏中有三片叶子。每个叶子部分都是一个导航链接,由具有绝对定位和不同z索引的div类组成,这样我就可以在棕色的绿叶上淡出。
页面之间也有一个渐变过渡,它基于CSS tricks上的动态页面更改方法,它使用散列更改来更改页面。
您可以在this jsfiddle上看到与导航栏上的树叶淡化相关的所有代码(该脚本还包含页面之间过渡的代码)。
我正在努力的部分是如何引用当前页面的div类“.current”(其中包含淡入和淡出的绿叶)。我需要这样做,这样,当首次打开网站时,无论是在主页还是关于页面,当前页面的绿叶设置为不透明度:1,因为页面已加载(这是当用户点击页面加载它,但不是在页面首次加载时。)
我可以在CSS中为每个页面设置.current类的不透明度,但是使用hashchange方法,只更改#main-content的HTML,所以这不起作用。我认为我需要找到一种在我的javascript中设置它的方法,以某种方式引用当前页面/标签。
与此相关的是如何在.close div / link的单击处理程序中更改当前页面的绿叶的不透明度,即如果在主页处于活动状态时关闭联系表单,则主页为绿色leaf将淡入(因为它是当前页面),并且与about页面相同。同样,我似乎需要找到一种方法来引用点击处理程序中的当前页面/选项卡。
有人可以帮我这个吗?
谢谢,
尼克
答案 0 :(得分:1)
当有人导航到您的网站时,您会知道他们正在加载的#tag,或者是否有任何#tag。
现在,基本上在页面加载时你需要查看主题标签,如果有一个主题标签,如果它是正确的(因为它是你已经考虑过的实际页面),那么你只需加载该页面,就像你在那一刻,也突出了叶子。
您实际上可以在.current leaf
上简化整个事情加载信息时,“叶子”实际上只是“当前”。因此,当信息被加载并放置在$ wrapper中时,淡入并动画化;把你的.current打开。
评论,如果您需要澄清或工作示例:)
更新 - 快速解决方案
http://jsfiddle.net/6p2f6/1/
基本上我移动了改变.current叶子的东西到哈希变化
在底部,我检查用户是否使用哈希导航到页面,如果没有,则设置默认值。
它并不完美,但它是我现在所拥有的最好的时刻。希望它有所帮助!
如果您需要澄清或更多示例
,请再次发表评论更新 - 新代码:)
http://www.mediafire.com/?51vajskfeu923
有一些文件,所以我不能把它放在JSfiddle
中对,所以,我无法让整个淡入淡出的菜单工作,但我得到它显示/隐藏像正常的悬停。我可以稍后再看,但既然你知道怎么做,我假设你可以搞清楚。只需转到javascript文件并查找:
$this = $(this);
var currentHash = window.location.hash;
console.log('specialMenu this.each(this) = '+$this.attr('href'));
//append all images
$this.append('<img class="defaultImage" src="'+settings.defaultImage+'"/>')
.append('<img class="hoverImage" src="'+settings.hoverImage+'"/>')
.append('<img class="activeImage" src="'+settings.activeImage+'"/>');
//prepare positioning
$('.defaultImage').css({
'z-index':'1'
});
$('.activeImage').css({
'z-index':'2'
});
$('.hoverImage').css({
'z-index':'3'
});
//Make parent correct height
$this.height($this.find('img').height());
//check what hash value is loaded
if(currentHash == $this.attr('href')){
$this.find('img:not(.activeImage)').hide();
$this.find('img.activeImage').show();
}else{
$this.find('img:not(.defaultImage)').hide();
$this.find('img.defaultImage').show();
}
$(this).hover(function(){
currentHash = window.location.hash;
$(this).find('img:not(.hoverImage)').hide();
$(this).find('img.hoverImage').show();
},function(){
currentHash = window.location.hash;
if(currentHash == $(this).attr('href')){
$(this).find('img:not(.activeImage)').hide();
$(this).find('img.activeImage').show();
}else{
$(this).find('img:not(.defaultImage)').hide();
$(this).find('img.defaultImage').show();
}
});
});
},
现在在主页上进行设置,请查看以下代码:
$('#contentContainer').jdAjaxContent({
'defaultPage': 'home',
'pathToLoadGif' : 'ajaxloading.gif'
});
$("#destroy").click(function(){
console.log('destroy.click');
$(this).jdAjaxContent('destroy');
});
//had to put this in its own window load, not sure why; weird bug
$(window).load(function(){
console.log('specialMenu.click');
$('a[href^=#]').jdAjaxContent('specialMenu',
{
'defaultImage': 'MenuIcons-01.png',
'hoverImage' : 'MenuIcons-02.png',
'activeImage' : 'MenuIcons-03.png'
});
});
忽略破坏位,只是摆脱了插件;把它拿出来。
您对
$('#contentContainer').jdAjaxContent({
'defaultPage': 'home',
'pathToLoadGif' : 'ajaxloading.gif'
});
$('#contentContainer')是你的ajax加载到的容器
默认页面是默认页面ha
pageToLoadGif是通常显示的小加载gif的路径。
现在你还需要看看
$('a[href^=#]').jdAjaxContent('specialMenu',
{
'defaultImage': 'MenuIcons-01.png',
'hoverImage' : 'MenuIcons-02.png',
'activeImage' : 'MenuIcons-03.png'
});
这是你的小菜单的一点。 由于你有不同的图像,你需要分别做每个图像,如下所示:
$('a[href^=#]').each(function(){
$(this).jdAjaxContent('specialMenu',
{
'defaultImage': $(this).attr('defaultImage'),
'hoverImage' : '$(this).attr('hoverImage'),
'activeImage' : $(this).attr('activeImage')
});
});
然后你把defaultImage =“blah”放在你的所以它看起来像
ALSO
在所有'console.log'上找到替换为'//console.log',以便所有控制台内容都不会显示在您的实际网站上。
我希望这会有所帮助,我发现编写自己的ajax引擎非常有趣,如果您发现任何错误或需要更多帮助,只需发表评论或发送电子邮件至mr.jackdavis@gmail.com
答案 1 :(得分:0)
我认为你应该包装
$(window).trigger('hashchange');
在就绪事件函数
中$(document).ready(function() {
$(window).trigger('hashchange');
});