【问题标题】:ScrollMagic responsive duration / endpoint for a sticky nav?滚动魔术响应持续时间/粘性导航的端点?
【发布时间】:2021-03-04 14:18:23
【问题描述】:

我正在使用 Scroll Magic 进行粘性侧导航。我希望侧导航在下一部分之前停止,但截至目前,持续时间端点显示低于我想要的位置约 200 像素。无论内容的高度如何,您如何设置自定义端点?我尝试在持续时间点的高度上添加一个负值,但是在某些高度较小的页面上它不起作用并溢出到下一部分。我的理想结果是粘性导航总是在 .center-tab-content 部分底部之前大约 15 像素处停止。

  if ($('.container--tab-navigation').length) {
      var pinPageNavController = new ScrollMagic.Controller(),
        pinPageScene = new ScrollMagic.Scene({
          triggerElement: '.l-side-nav',
          triggerHook: 'onLeave',
          duration: getHeightDuration,
        })
          .addIndicators({ name: '2 (duration: 0)' }) // add indicators (requires plugin)
          .addTo(pinPageNavController);

      pinPageScene.setPin('.l-side-nav', { pushFollowers: false });

      function getHeightDuration() {
        var heightDuration = Number($('.center-tab-content').height());
        return heightDuration;
      }
    }

【问题讨论】:

    标签: javascript jquery scrollmagic


    【解决方案1】:

    如果没有完整的代码很难判断,但场景的持续时间应该是到该点的高度。

    示例:https://codepen.io/alexpetergill/pen/GRNBZKB

    在上面的示例中,我们希望粘性导航停止在第 2 部分的底部,因此作为第二部分,我们可以获取部分的高度并将其乘以 2(假设您的部分的高度相同!)

    var scene = new ScrollMagic.Scene({
      triggerElement: '#nav',
      duration: $('section').outerHeight() * 2
    })
      .setPin('#nav', {pushFollowers: false})
      .addTo(controller);
    

    另外值得注意的是,您正在使用height() 方法进行计算,这可能是一个更大的问题,因为如果该部分有填充,这将无法计算您的想法。建议您使用outerHeight() 方法来确保它是该元素的完整高度。

    更新答案

    如前所述,如果您的部分高度可变,那么我建议计算所有先前部分和目标部分的高度。 (示例也更新了!)

    var scene = new ScrollMagic.Scene({
      triggerElement: '#nav',
      duration: getDuration()
    })
      .setPin('#nav', {pushFollowers: false})
      .addTo(controller);
    
    function getDuration() {
      var $section2 = $('.section-2')
      var $prevSections = $section2.prevAll('section')
      var outerHeight = 0;
      $prevSections.each(function() {
        outerHeight += $(this).outerHeight();
      });
      var duration = $section2.outerHeight() + outerHeight;
      return duration;
    }
    

    【讨论】:

    • 我很快就会添加一个codepen。是的,我应该提到我的部分的高度是可变的。所以在某些内容高度较小的部分,粘性导航会溢出到下一个部分。
    • 有道理!我已经更新了答案和示例以考虑这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 2016-07-31
    • 2019-03-08
    • 2017-03-14
    • 1970-01-01
    • 2015-05-06
    • 2016-10-17
    相关资源
    最近更新 更多