使用 fullpage.js 时如何根据 URL 哈希更改图像?

How can I change an image based on URL hash when using fullpage.js?

我目前正在使用 fullPage.js for a website I'm creating。请注意,当您滚动时,它如何将散列附加到 URL(即 #feature1)。我想根据该哈希更改图像或背景图像

这是我要初始化的 <body> 标签上方 fullPage.js

    $(document).ready(function() {
        $('#fullpage').fullpage({
            anchors: ['welcome', 'feature1', 'feature2', 'feature3', 'feature4', 'feature5', 'feature6'],
            sectionsColor: ['transparent', '#1BBC9B', '#7E8F7C', '#C63D0F', '#1BBC9B', '#7E8F7C'],
            navigation: true,
            navigationPosition: 'left',
        });
    });

我正在使用这个 javascript 来尝试更改图像,尽管我很确定 document.write 是错误的。

    $(document).ready(function() {
      // Which anchor is being used?
      switch(window.location.hash) {
         case "#feature1":
           document.write('<img class="screen" src="img/bg-feature-2.jpg">');
         break;
         case "#feature2":
           document.write('<img class="screen" src="img/bg-feature-1.jpg">');
         break;
      }
    });

如果我滚动到#feature1 或#feature2,它什么都不做。但是,如果我直接在浏览器中输入带有散列的 URL,它只会显示图像而不会显示其他任何内容。我该如何解决这个问题?

您正在查找 hashchange 活动 - 有 documentation over at Mozilla.

但基本上你是这样使用它的:

window.addEventListener("hashchange", function() {
  // called whenever the hash changes
  // put your switch / case here.
}, false);

您的 $(document).ready() 方法的问题在于,它仅在页面加载后 运行 一次(实际上,在文档准备好后)。而不是以后。 url 散列的变化并没有加载什么东西,它只是将您跳转到同一文档的不同 "fragment"。

您需要将您的页面绑定到 hashchange 事件:

$(function(){

  // Bind an event to window.onhashchange that, when the hash changes, gets the
  // hash and adds the class "selected" to any matching nav link.
  $(window).hashchange( function(){
    var hash = location.hash;

    // Change the image link using the following code:
    // $(".screen").attr("src", "img/bg-feature-2.jpg");
    switch(window.location.hash) {
      case "#feature1":
        $(".screen").attr("src", "img/bg-feature-2.jpg");
        break;
      case "#feature2":
        $(".screen").attr("src", "img/bg-feature-1.jpg");
        break;
    }
  })

  // Since the event is only triggered when the hash changes, we need to trigger
  // the event now, to handle the hash the page may have loaded with.
  $(window).hashchange();

});

我用了The hash is blank作为参考。

正如@Brian Ray 所指出的,您应该使用 fullpage.js 回调。

您可以对部分使用 afterLoadonLeave,对幻灯片使用 afterSlideLoadonSlideLoad

例如:

$('#fullpage').fullpage({
    anchors: ['firstPage', 'secondPage', 'thirdPage', 'fourthPage', 'lastPage'],

    afterLoad: function (anchorLink, index) {
        var loadedSection = $(this);

        //using anchorLink
        if (anchorLink == 'secondSlide') {
            alert("Section 2 ended loading");
        }
    }
});

虽然在你的情况下,我会直接在 CSS 中使用 css class 类型 fp-viewing-section-slide,fullpage.js 添加到body 元素。

查看 this video tutorial 解释如何使用它的地方。

例如:

body.fp-viewing-firstPage #myImage{
    background: url('demo.gif');
}

body.fp-viewing-secondPage #myImage{
    background: url('otherImage.gif');
}