更改滚动上的背景图像

时间:2019-02-24 作者:ZWPDev

我想创建一个背景图像效果,当用户滚动时会更改图像。我面临图像URL的问题,如何解决?如何从wordpress页面链接jquery中的图像url?

这是代码。url不正确,我不知道如何从js脚本正确链接它。

$(window).scroll(function(e){
    e.preventDefault();
    var scrollPos = $(window).scrollTop();
      if(scrollPos >= 100){
        $(\'#portfolio-cover\').css({\'backgroundImage\':\'url("assets/img/top-page2.jpg")\'});
      }
      else if(scrollPos >= 120){
        $(\'#portfolio-cover\').css({\'backgroundImage\':\'url("assets/img/top-page3.jpg")\'});
      }
      else if(scrollPos >= 150){
        $(\'#portfolio-cover\').css({\'backgroundImage\':\'url("assets/img/top-page4.jpg")\'});
      }
      else{
        $(\'#portfolio-cover\').css({\'backgroundImage\':\'url("assets/img/top-page1.jpg")\'});
      }
  });

2 个回复
SO网友:tmdesigned

假设资产文件夹位于主题目录中,则需要将主题目录(可以通过PHP获得)发送到JavaScript。(如果这是一个插件,而资产文件夹位于您的插件目录中,则可以使用类似的方法,但发送的确切代码会有所不同。)

在WordPress中,使用PHP可以找到样式表目录,它是主题的根目录(即使您使用的是子主题)。

$theme_dir = wp_get_stylesheet_directory_uri();
这将存储以下内容http://www.domain.com/wp-content/themes/yourtheme/

如果您的JavaScript直接位于页面模板上,您只需在获得PHP主题目录时直接将其写入JavaScript即可:

$(window).scroll(function(e){
    e.preventDefault();
    var scrollPos = $(window).scrollTop();
      if(scrollPos >= 100){
        $(\'#portfolio-cover\').css({\'backgroundImage\':\'url("<?php echo get_stylesheet_directory_uri(); ?>/assets/img/top-page2.jpg")\'});
      }
这不是最佳实践,因为您有一种语言将自己注入到另一种语言中,这也意味着您的JavaScript位于页面模板上,这样就不太容易重用,也不太干净。

如果JavaScript位于单独的文件中,即后台滚动。js,您必须首先通过WordPress排队系统正确加载它。然后你可以发送一个变量(比如你的主题目录)到它。

您将使用刚才创建的$theme\\u dir变量。

function wpse_329739_enqueue_scripts(){

    $theme_dir = get_stylesheet_directory_uri();

    wp_enqueue_script( \'background-scroll\', $theme_dir . "/assets/js/background-scroll.js" );

}
add_action( \'wp_enqueue_scripts\', \'wpse_329739_enqueue_scripts\' );
最后一部分是发送我们创建的变量,以便您的脚本可以使用它。为此,我们通过localize\\u脚本函数传递一个变量数组,即使这只是一个变量。

我们的代码变成:

function wpse_329739_enqueue_scripts(){

    $theme_dir = get_stylesheet_directory_uri();

    $variables = array(
        "theme_dir" => $theme_dir
    );

    wp_enqueue_script( \'background-scroll\', $theme_dir . "/assets/js/background-scroll.js" );
    
    wp_localize_script( \'background-scroll\', \'PHPVARS\', $variables );

}
add_action( \'wp_enqueue_scripts\', \'wpse_329739_enqueue_scripts\' );
因此,我们将变量(主题目录名称)包装到一个数组中,然后告诉WordPress将其作为JavaScript对象传递给我们的脚本。

在我们的脚本中,我们可以通过提供的名称(PHPVARS)访问它,即PHPVARS。theme\\u目录。

$(window).scroll(function(e){
    e.preventDefault();
    var scrollPos = $(window).scrollTop();
      if(scrollPos >= 100){
        $(\'#portfolio-cover\').css({\'backgroundImage\':\'url("\' + PHPVARS.theme_dir + \'/assets/img/top-page2.jpg")\'});
      }

SO网友:Fabrizio Mele

由于if条件格式不正确,您的代码将无法工作。现在,如果scrollPos 设置为200,第一个条件,scrollPos >= 100 将为true,因此代码流不会到达其他情况。要让它发挥作用,你必须对scrollPos 值检查:

$(window).scroll(function(e){
    e.preventDefault();
    var scrollPos = $(window).scrollTop();
      if(scrollPos >= 100 && scrollPos < 120){
        $(\'#portfolio-cover\').css({\'backgroundImage\':\'url("assets/img/top-page2.jpg")\'});
      }
      else if(scrollPos >= 120 && scrollPos < 150){
        $(\'#portfolio-cover\').css({\'backgroundImage\':\'url("assets/img/top-page3.jpg")\'});
      }
      else if(scrollPos >= 150){
        $(\'#portfolio-cover\').css({\'backgroundImage\':\'url("assets/img/top-page4.jpg")\'});
      }
      else{
        $(\'#portfolio-cover\').css({\'backgroundImage\':\'url("assets/img/top-page1.jpg")\'});
      }
  });

相关推荐

Reset counter with jQuery

在WordPress上,我用下拉菜单在帖子类别之间切换,并有一个“加载更多”按钮,将更多帖子加载到所选类别中。每次按下按钮,都会更新一个变量,因此WordPress知道是否加载该类别中的第2、3、4部分帖子。但是,当下拉列表发生更改时,计数器应该重置,我不知道怎么做。为了简化,如果您有:<select id=\"selection\"> <option value=\"foo\"></option> <option value=\"bar\