Trying to Load jQuery

时间:2020-04-30 作者:Anthony Valentine

我正在尝试加载jQuery,但似乎无法使其正常工作。

在此页面上:https://koehlerrice.com/about-3/ 我试图让图像在页面加载时从一种颜色淡入另一种颜色。现在为了保持简单,我正在尝试从#000到#fff

这就是我现在的处境

这是我的css:

.fading-start1 
{
    background-color: #000000!important; 
    transition: background-color 3s linear!important; 
    -moz-transition: background-color 3s linear!important; 
    -o-transition: background-color 3s linear!important; 
    -webkit-transition: background-color 3s linear!important; 
}

.fading-finish1
{
    background-color: #fff!important; 
}
这是我的函数,我相信它正在加载jQuery

function avtheme_scripts() {
    wp_enqueue_script( \'av-about-fade\', get_stylesheet_directory_uri() . \'/about-fade.js\', array( \'jquery\' ), \'1.0.0\', true );
}
add_action( \'wp_enqueue_scripts\', \'avtheme_scripts\' );
这是我的JS文件

(function( $ ) {
    \'use strict\';
    $( document ).ready( function() {
        if( $( \'.fading-start1\' ).length > 0 ) {
setTimeout( function() {
            $( \'.fading-start1\' ).addClass( \'fading-finish1\' );
        }, 3000 );        }
    } );
} )( jQuery );
在托尼的大量编辑和帮助下,我现在就在这里。我能看到它工作了好几次,但似乎前后不一致。就像我刷新页面、转到新浏览器或隐姓埋名一样,它的行为会有所不同。通常情况下,它只是在#000时衰减3秒,然后在#fff时再衰减3秒。

我尝试了下面提供的不同版本的代码。几个问题:

1: 这对RBBA有效吗?我真正的目标是从不透明的like中淡出。8至。95

2: 您提供的带有3秒延迟的新jQ函数是中的。js文件或函数中。php?我想我对要去哪里感到困惑。现在我把它们放在。js文件。

3: 虽然我知道0 jQ,但我尝试将您给我的两个函数合并为一个。这样行吗?一个带3秒计时器,另一个检查长度。这是可行的还是需要分开?如果是这样的话,他们是否都会加入。js文件,函数。php还是?

非常感谢。

1 个回复
最合适的回答,由SO网友:Tony Djukic 整理而成

将脚本从子主题排队时,必须使用get_stylesheet_directory_uri 而不是get_template_directory_uri(). 模板目录是父主题,样式表目录是由活动样式表使用的目录共享的目录。

在您的functions.php 文件,排队将是:

function avtheme_scripts() {
    wp_enqueue_script( \'av-about-fade\', get_stylesheet_directory_uri() . \'/js/about-fade.js\', array( \'jquery\' ), \'1.0.0\', true );
}
add_action( \'wp_enqueue_scripts\', \'avtheme_scripts\' );
这将为您正确地将脚本排队并使其可用。现在看看控制台为实际jQuery给出的错误-它表示找不到变量jquery. WordPress正在寻找jQuery 大写Q。

下面是如何将脚本组合在一起,这样就不必替换$ 具有jQuery 编写脚本时。下面的代码块将放入about-fade.js 文件

(function( $ ) {
    \'use strict\';
    $( document ).ready( function() {
      if( $( \'.fading-start1\' ).length > 0 ) {
        setTimeout( function() {
            $( \'.fading-start1\' ).addClass( \'fading-finish1\' );
        }, 3000 );
      }
    } );
    // Have never used beforeunload myself, so not sure how reliable it is.
    $( window ).on( \'beforeunload\', function() {
      $( \'.fading-start1\' ).removeClass( \'fading-finish1\' );
    } );
} )( jQuery );
当我编写大量jQuery时,有一件事曾经困扰过我,那就是我会遇到控制台错误,因为jQuery会尝试在不存在的元素上执行。例如,如果我有和元素like<div class="fading-start1"> 在主页上,但在网站的其他地方,我会看到错误,告诉我它找不到`\'。很明显,因为它不在那里。

因此,我现在通常要做的是,在对元素运行jQuery之前,通过检查元素的“长度”来检查元素是否存在,如果它大于零,jQuery将尝试在其上运行一些东西。如果它的长度(使用该选择器的元素数量)小于0,则它不存在。(长度这个名字有点奇怪,但它就是这个名字。)

那一条额外的指令让我的理智大大减退了。:-)

Addendum:

要在CSS中使用不透明度,只需将其添加到过渡:

.fading-start1 {
    background-color: #fff!important;
    opacity: 0.65; 
    transition: background-color 3s linear, opacity 3s linear!important;
    -moz-transition: background-color 3s linear, opacity 3s linear!important;
    -o-transition: background-color 3s linear, opacity 3s linear!important;
    -webkit-transition: background-color 3s linear, opacity 3s linear!important;
}