javascript - 移除 DOM 元素时防止视口(viewport)移动

标签 javascript jquery html css scroll

我正在尝试实现一个 HTML 无限滚动器,其中在任何给定时间列表中只有少数 div 元素(以保持内存占用小)。

我在列表中添加了一个新的 div 元素,同时删除了第一个元素,因此 div 的总数保持不变。

不幸的是,视口(viewport)并没有保持静止,而是向后跳了一点(实际上是删除的 div 的高度)。 有没有办法在从列表中删除 div 的同时保持视口(viewport)静止?

我制作了一个小型的独立 HTML 页面(好吧,它仍然需要 JQuery 3.4.1),它暴露了问题:它首先添加 5 个 div,然后它不断添加一个新的,每 1 秒删除第一个

function getRandomColor() {
  var letters = '0123456789ABCDEF';
  var color = '#';
  for (var i = 0; i < 6; i++) {
    color += letters[Math.floor(Math.random() * 16)];
  }
  return color;
}

function removeit() {
  // remove first one
  var tiles = $(".tile");
  $(tiles[0]).remove();
}

function addit() {
  // append new one
  var jqueryTextElem = $('<div class="tile" style="height:100px;background-color:' + getRandomColor() + '"></div>');
  $("#inner-wrap").append(jqueryTextElem);
}

function loop() {
  removeit();

  addit();

  window.setTimeout(loop, 1000);
}

addit();
addit();
addit();
addit();
addit();

loop();
<div id="inner-wrap"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

最佳答案

可以临时给父元素加上position: fixed:

  1. 首先将position: fixed添加到父级;
  2. 然后删除该元素;
  3. 然后从父级中删除position: fixed

关于javascript - 移除 DOM 元素时防止视口(viewport)移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56378527/

相关文章:

javascript - 如何从 WinJS ListView 中删除悬停属性?

javascript - 来自 ng-repeat 的新动态变量在 ng-switch 外部不可见

javascript - window.location.href 在弹出窗口中不起作用

javascript - 为什么 m.module 不会导致我的视​​图在 Mithril 中重新渲染?

Javascript - 基于文本隐藏动态 Div

Jquery fadeOut 完整回调未运行,但 fadeIn 回调正在运行

javascript - 如何更改文本区域中的div?

jquery - CSS 菜单下拉定位

href 属性中带有 # 的链接的 jQuery 选择器

单击按钮时过滤下拉列表的 jQuery 和 Bootstrap 文本字段