繁体   English   中英

Javascript阻止滚动跳

[英]Javascript stopping scroll from jumping

我有一个页面,您可以在其中单击以从页​​面顶部向下滑动元素。

我正在尝试创建一条规则,规定如果可见下推且屏幕滚动的距离超过下推的高度,则应再次将其隐藏。 意味着用户将必须按下按钮才能使其再次显示。

在我的HTML中,我有:

<div class="row" id="learn-more" style="display:none">
  <div class="small-12 columns" id="close">
    <p id="close-learn">
      <i class="fa fa-times pull-right fa-2x"></i>
    </p>
  </div>
  <div class="small-12 columns" id="learn-content">
    <h1>Content for Pushdown</h1>
  </div>
</div>

<div class="row" id="hero">
  <div class="small-12 columns small-centered">
    <p id="learn"><a class="transition">Learn More</a></p>
  </div>
</div>

在我的Javascript中,我有:

  // Open and close learn more section
  $("#learn").on("click", function() {
    $("#learn-more").slideDown();
  });

  $("#close-learn").on("click", function() {
    $("#learn-more").slideUp();
  });

  // Close learn-more based on scroll position
  $(window).on("scroll", function() {

    var scrollPosition = $(window).scrollTop();

    if ($("#learn-more").is(":visible") && scrollPosition > $("#learn-more").height()) {
      $("#learn-more").slideUp()
    } 
  });

所有这些都有效,但是当#learn-more元素向上滑动时,页面将向下跳转约500像素,这是#learn-more元素的高度。 当您单击“工作原理”按钮,然后滚动到下推元素下方时,我希望我的工作方式与Airbnb的新主页相同。

任何建议将不胜感激。

似乎发生这种情况是因为在调用slideUp()之后保留了$(window).scrollTop位置。 但是我们可以记住“学习更多”按钮相对于窗口顶部的可见位置,并且在隐藏文本块后返回该位置。 另外,我建议在这里使用hide()而不是slideUp()。

这是我建议滚动进行的操作:

 $(window).on("scroll", function(event) {
      var scrollPosition = $(window).scrollTop();
      var learnMore = $("#learn-more");
      if (learnMore.is(":visible") && scrollPosition > learnMore.height()) {
             var learnMoreButtonTop = $("#learn").offset().top - scrollPosition;
             learnMore.hide();
             $(window).scrollTop(learnMoreButtonTop);
        } 
  });

工作实例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM