javascript - jQuery:如果元素不可见,则 scrollTop 不起作用

标签 javascript jquery css

scrollTop 函数工作正常,但前提是元素没有设置 display: none

我有一个主要元素 eWindow,在这个元素中还有许多其他元素,其中包含一些 JavaScript 代码、Ajax 调用等等。一切都完成后,我只想显示这个主要元素 eWindow。所以我会设置 display: block;

但是这个解决方案对我不起作用。如果我只是从我的样式表中删除 display: none,scrollTop 将开始正常工作。

最佳答案

请记住,visibility: hidden 会隐藏元素,占用布局中的空间。 display: none 从文档中删除元素,即使 HTML 位于源代码中也是如此。

我已经为您创建了一个示例,以了解发生了什么。显然,我对您的元素了解不多,所以请记住这一点 ( http://jsbin.com/jociy/1 )。

您不能滚动到 display:none 元素的原因是该元素在呈现的元素之间不占用任何空间 - 窗口上没有该元素实际存在的 X 或 Y 位置,因此没有滚动值到!

让我们看看下面的代码,它举例说明了这一点:

$(document).ready(function(){

 $('#scrollTo').on('click', function(){

    // get the element position
    var toPosition = $(".scrollTo").offset().top;

    // scroll to the element position
    $('html, body').animate({
      scrollTop: toPosition
    }, 'slow', function(){

      $(".scrollTo")
        .css("background-color", "")
        .css("background-color", "black");

      // let's remove the element after awhile
      setTimeout(function(){

        $(".scrollTo")
          .fadeOut(function(){

            $(this).css("display", "none");

            alert("If you click on 'Click to ScrollTo this time, it wont work as expected, because the element does not take any position between the rendered elements.'");

          });

      }, 3000);

    });

 });

});

一些 HTML 元素可以帮助您:

  <button id="scrollTo">Click to ScrollTo!</button>

  <div class="foo red">I'm red!</div>
  <div class="foo green">I'm green!</div>
  <div class="foo blue">I'm blue!</div>
  <div class="foo yellow">I'm yellow!</div>
  <div class="foo red">I'm red!</div>
  <div class="foo green">I'm green!</div>
  <div class="foo blue">I'm blue!</div>
  <div class="foo yellow">I'm yellow!</div>
  <div class="foo red">I'm red!</div>
  <div class="foo green">I'm green!</div>
  <div class="foo blue scrollTo">I'm blue!</div>
  <div class="foo yellow">I'm yellow!</div>
  <div class="foo red">I'm red!</div>
  <div class="foo green">I'm green!</div>
  <div class="foo blue">I'm blue!</div>
  <div class="foo yellow">I'm yellow!</div>
  <div class="foo red">I'm red!</div>
  <div class="foo green">I'm green!</div>
  <div class="foo blue">I'm blue!</div>
  <div class="foo yellow">I'm yellow!</div>
  <div class="foo green">I'm green!</div>
  <div class="foo blue scrollTo">I'm blue!</div>
  <div class="foo yellow">I'm yellow!</div>
  <div class="foo red">I'm red!</div>
  <div class="foo green">I'm green!</div>
  <div class="foo blue">I'm blue!</div>
  <div class="foo yellow">I'm yellow!</div>
  <div class="foo red">I'm red!</div>
  <div class="foo green">I'm green!</div>
  <div class="foo blue">I'm blue!</div>
  <div class="foo yellow">I'm yellow!</div>

示例 CSS 样式:

.foo {
  font-family: arial, sans-serif;
  margin: 10px;
  padding: 25px;
  opacity: 0.6;
}
.red {
  background-color: red;
  color: #fff;
}
.green {
  background-color: green;
  color: #fff;
}
.blue {
  background-color: blue;
  color: #fff;
}
.yellow {
  background-color: yellow;
  color: #000;
}

一个可能的解决方案,例如,将不透明度设置为 0,将高度设置为 0px!或者保持可见性:隐藏!或者,如果客户端出现 display:none,您可以在修改元素之前,获取所有 eWindow 元素位置并将其保存在一个集合中,以备将来引用!

希望这对您有所帮助!

关于javascript - jQuery:如果元素不可见,则 scrollTop 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23591009/

相关文章:

javascript - JQuery UI 可拖动来调整 div 大小

javascript - 暂停和恢复 HTML5 Canvas ?

jquery - 如何使用 POST 方法并使用 jquery ajax 将 xml 作为参数传递

html - bootstrap 4 导航栏 - 内容在崩溃时跳到品牌下方

css - 设置表格行之间线条的粗细

html - 如何将不同高度的 div 对齐?

javascript - 如果 SweetAlert 隐藏,则正在呈现

javascript - Ember 绑定(bind)属性未更新

jquery - 如何重新启用 JQuery .one click 处理程序

javascript - 每个内的 jQuery 仅将函数绑定(bind)到最终项目