在滚动功能上动态更改徽标

时间:2017-07-05 作者:WeebleWobb

我正在将静态站点迁移到WP。目前,我有一个标题功能,可以使用JS在用户滚动时将反转的徽标更改为全色。See Function on scroll

Current JS for Scroll function:

$(window).scroll(function() {
    var top = $(window).scrollTop();

    //Clears navbar timing functions on initial scroll
    clearTimeout(timeout);

    //Conditional to make function run if header is scroll pased 100px
    if ((top > 100) && $(\'#mainNav\').is(\':hidden\')) {
        showNav();
        timeout = setTimeout(hideNav, 2000);
    } else if ((top > 100) && $(\'#mainNav\').is(\':visible\')) {
        showNav();
        $(\'#logo\').attr(\'src\', \'./assets/sg-logo-inverted.svg\');
        $(\'.nav-trigger-line\').css({\'background-color\':\'#fff\'});
    } else {
        $(\'header\').css({
            \'background-color\': \'transparent\'
        });
        $(\'#logo\').attr(\'src\', \'./assets/sg-logo-inverted.svg\');
        $(\'#logo\').css({\'width\': \'175px\'});
        $(\'.nav-trigger-line\').css({\'background-color\':\'#fff\'});
    }
});

Current HTML Markup:

<header class="fixed-top p-3">
    <!-- Logo and Burger -->
    <div class="container-fluid brand-wrap">
        <div class="row">
            <div class="col-6">
                <a href="index.html"><img id="logo" src="./assets/sg-logo-inverted.svg" class="img-fluid" alt="Synchrony Group"></a>
            </div>
            <div class="col-6 trigger-wrapper py-1">
                <div id="burger">
                    <div class="nav-trigger-line"></div>
                    <div class="nav-trigger-line"></div>
                    <div class="nav-trigger-line"></div>
                </div>
            </div>
        </div>
    </div>
</header>
我已经修改了标题中的标记。通过WP仪表板动态包含站点徽标的php文件:

Revised HTML Markup:

<header class="fixed-top p-3">
    <!-- Logo and Burger -->
    <div class="container-fluid brand-wrap">
        <div class="row">
            <?php if ( get_header_image() ) : ?>
                <div class="col-6">
                    <a href="<?php echo esc_url( home_url( \'/\' ) ); ?>" rel="home">
                        <img id="logo" src="<?php header_image(); ?>" class="img-fluid" alt="Synchrony Group">
                    </a>
                </div>
            <?php endif; ?>
            <div class="col-6 trigger-wrapper py-1">
                <div id="burger">
                    <div class="nav-trigger-line"></div>
                    <div class="nav-trigger-line"></div>
                    <div class="nav-trigger-line"></div>
                </div>
            </div>
        </div>
    </div>
</header>
滚动功能仍能工作,但无法替换图像,因为它在页面的特定目录中查找图像,而该目录不存在。

Question: 如何动态更改滚动上的徽标功能?这是由PHP而不是JS处理的吗。进行此操作的正确方法是什么?

2 个回复
最合适的回答,由SO网友:Emil Pedersen 整理而成

我假设您试图显示的文件位于您的主题文件夹中。

您可以使用get_template_directory_uri 获取当前激活主题的根文件夹的路径。

如果您希望支持儿童主题get_stylesheet_directory_uri() 如果子主题正在使用,将在当前激活的子主题文件夹中查找。

如果您必须将JavaScript保存在一个单独的文件中,那么您应该研究如何使用wp_localize_script(). 这很直截了当。

我通常传递一个变量,名为themeUrl 包含主题文件夹的URL,以及baseUrl 包含我的JavaScript的网站的基本URL。

SO网友:CHEWX

无需重写,您只需引用绝对url即可。

所以...src\', \'./wp-content/themes/YOUR_THEME_HERE/assets/sg-logo-inverted.svg\'

或者,更好的方法是wp_localize_script() 引用主题文件夹,然后可以通过JavaScript访问该文件夹。

结束