使用jQuery对当前页面/标签的div类应用效果

pgvzfuti  于 2023-11-17  发布在  jQuery
关注(0)|答案(2)|浏览(156)

我在this page上的导航栏中有三个叶子,每个叶子部分都是一个导航链接,由具有绝对定位和不同z索引的div类组成,这样我就可以在棕色上淡入绿色叶子。
页面之间还有一个渐变过渡,它基于CSS tricks上的动态页面更改方法,使用hashchange来更改页面。
您可以在this jsfiddle上的导航栏上看到所有与树叶褪色相关的代码(该脚本还包含页面之间转换的代码)。
我正在努力解决的部分是如何为当前页面引用div类“.current”(它包含淡入淡出的绿色叶子)。我需要这样做,当网站第一次打开时,无论是在主页还是在关于页面上,当前页面的绿色叶子在页面加载时都被设置为不透明度:1(这是当用户点击页面加载时发生的情况,但不是当页面第一次加载时发生的情况)。
我可以在每个页面的CSS中为.current类设置不透明度,但是使用hashchange方法,只有#main-content的HTML被改变,所以这不起作用。我想我需要在我的JavaScript中找到一种方法来设置它,以某种方式引用当前页面/标签。
与此相关的是我如何在.close div/link的click处理程序中更改当前页面的绿色叶子的不透明度,即如果联系人表单在主页处于活动状态时关闭,则主页的绿色叶子将淡入(因为它是当前页面),关于页面也是如此。同样,看起来我需要找到一种在点击处理程序中引用当前页面/选项卡的方法。
有人能帮我吗?
谢谢你,
尼克

cetgtptt

cetgtptt1#

哇,这是令人困惑的,这似乎是你的复杂情况。你不需要特定的页面CSS或类似的东西。你只需要设置。当前类在不同的时间。
当有人导航到您的网站时,您将知道他们正在加载什么#标签,或者是否没有任何#标签。
现在,基本上在页面加载时,您需要查看hashtag,如果有一个,如果它是正确的(因为它是您已经考虑的实际页面),那么您只需像现在一样加载该页面,但也要突出显示叶子。

实际上,你可以在.current叶子上简化整个过程

真正的“leaf”只有在你加载信息的时候才是“current”。所以当信息被加载并放置在你的$wrapper中时,淡入和动画;然后把你的.current放在上面。

更新-快速解决方案

http://jsfiddle.net/6p2f6/1/
基本上,我把修改.current leaves的东西移到了hash change中,在底部,我让它检查用户是否使用hash导航到了一个页面,如果没有,它就设置了一个默认值。这并不完美,但这是我目前所能做的最好的事情。

更新-新代码:)

http://www.mediafire.com/?51vajskfeu923
有几个文件,所以我不能把它扔在一个JS小提琴
好吧,我不能让整个渐变菜单工作,但我得到了它显示/隐藏像一个正常的悬停。我可以看看它以后,但既然你知道如何做到这一点,我假设你可以弄清楚。只要去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')是您的容器加载到
默认页面是默认页面
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”放在你的,所以它看起来像<a href="#blah”defaultImage=“blah”./>

在所有的' console.log'上查找替换到'//console.log',这样所有的控制台内容就不会出现在你的实际网站上。

  • 我发现编写自己的apache引擎非常有趣。*
5kgi1eie

5kgi1eie2#

我觉得你应该把

$(window).trigger('hashchange');

字符串
在ready事件函数中

$(document).ready(function() {
    $(window).trigger('hashchange');
});

相关问题