完全卡在将JQuery加载到WordPress网站中。

4
这可能看起来像一个简单的错误,但我却被卡住了。
我正在运行一个WordPress安装,并使用一个我找到的脚本来根据滚动隐藏标题。当页面在标签内时,这个脚本完美地工作,但是当我将它加载到WordPress主题中的一个单独文件中时,就不再起作用了。
wp_enqueue_script( 'greycanary-effects', get_template_directory_uri() . '/js/effects.js', array(), '20120206', true );

而这个脚本可以通过以下方式安装:

( function() {
    var didScroll;
    var lastScrollTop = 0;
    var delta = 5;
    var navbarHeight = $('.main-navigation').outerHeight();

    jQuery(window).scroll(function(event){
        didScroll = true;
    });

    setInterval(function() {
        if (didScroll) {
            hasScrolled();
            didScroll = false;
        }
    }, 250);

    function hasScrolled() {
        var st = $(this).scrollTop();

        // Make sure they scroll more than delta
        if(Math.abs(lastScrollTop - st) <= delta)
            return;

        // If they scrolled down and are past the navbar, add class .nav-up.
        // This is necessary so you never see what is "behind" the navbar.
        if (st > lastScrollTop && st > navbarHeight){
            // Scroll Down
            $('.main-navigation').removeClass('nav-down').addClass('nav-up');
        } else {
            // Scroll Up
            if(st + $(window).height() < $(document).height()) {
                $('.main-navigation').removeClass('nav-up').addClass('nav-down');
            }
        }

        lastScrollTop = st;
    };
});

有脚本错误吗? - rdans
你可能需要检查 Wordpress 加载的位置 - 它可能与你之前加载的位置不同。 - CalvT
WordPress正在将其加载到与之前几乎相同的页面区域中。它位于页面页脚。 - Michael Wood
这是测试网站的链接。http://michaelwood.ca/digital-marketing/ - Michael Wood
4个回答

2
您需要将所有的$引用替换为"jQuery",或者创建一个名为"$"的变量:

例如,请将以下内容放在您的function(){顶部:

(function(){
    $ = jQuery;
    ....

或者

( function() {
    var didScroll;
    var lastScrollTop = 0;
    var delta = 5;
    var navbarHeight = jQuery('.main-navigation').outerHeight();

    jQuery(window).scroll(function(event){
        didScroll = true;
    });

    setInterval(function() {
        if (didScroll) {
            hasScrolled();
            didScroll = false;
        }
    }, 250);

    function hasScrolled() {
        var st = jQuery(this).scrollTop();

        // Make sure they scroll more than delta
        if(Math.abs(lastScrollTop - st) <= delta)
            return;

        // If they scrolled down and are past the navbar, add class .nav-up.
        // This is necessary so you never see what is "behind" the navbar.
        if (st > lastScrollTop && st > navbarHeight){
            // Scroll Down
            jQuery('.main-navigation').removeClass('nav-down').addClass('nav-up');
        } else {
            // Scroll Up
            if(st + jQuery(window).height() < jQuery(document).height()) {
                jQuery('.main-navigation').removeClass('nav-up').addClass('nav-down');
            }
        }

        lastScrollTop = st;
    };
});

我已经修改了代码,但仍然没有成功。它目前作为第二个选项上线。 - Michael Wood

1
我认为您需要做的是相反的:

wp_enqueue_script( 'greycanary-effects', get_template_directory_uri() . '/js/effects.js', array( 'jquery' ), '20120206', true );

array( 'jquery' )告诉WordPress你的脚本依赖于jQuery,并且应在其后加载。

有关如何使用依赖项进行脚本排队的更多信息,请参见wp_enqueue_script

另外,如果要使用$,应按照以下方式执行。

( function( $ ) {
    // Use $ here instead of jQuery if you want
    ...
} )( jQuery );

1

在WordPress的jQuery中,你不能使用$符号,因为它们用来防止javascript冲突。请改用jQuery。 我看到你确实使用了jQuery,但在某些行中你使用了美元符号。


0

修复它,

这是一个关于将$替换为jQuery的问题。它在整个脚本中都被使用,需要在所有地方进行更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接