javascript - 如何在滚动列表中选择可见元素

标签 javascript jquery html css

我需要在滚动列表中选择当前可见(和可见)的元素。在我的列表中,我有一个 table。示例:

<div class='list'>
<table>
    <tr>
        <td>item</td>
    </tr>
    <tr>
        <td>item</td>
    </tr>
    <tr>
        <td>item</td>
    </tr>
    <tr>
        <td>item</td>
    </tr>        
</table>

我只想选择那些现在对用户可见的元素(即在屏幕上,而不是在屏幕外)

enter image description here

在 JsFiddle 上:jsfiddle

最佳答案

调整了我的另一个 answer

Demo

查看代码中的内联注释。

$(document).ready(function() {
  // Get viewport height, gridTop and gridBottom
  var gridTop = 0,
    gridBottom = $('.list').outerHeight();

  $('.list').on('scroll', function() {
    // On each scroll check if `td` is in interested viewport
    $('.list td').each(function() {
      var thisTop = $(this).offset().top;

      // Check if this element is in the interested viewport
      if (thisTop >= gridTop && (thisTop + $(this).height()) <= gridBottom) {
        $(this).css('background', 'red');
      } else {
        $(this).css('background', 'gray');
      }
    });
  });
});
.list {
  height: 112px;
  width: 300px;
  display: block;
  overflow-y: scroll;
}
table tr td {
  width: 300px;
  height: 50px;
  background-color: gray;
  border: 1px solid #000;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<div class='list'>
  <table>
    <tr>
      <td>item</td>
    </tr>
    <tr>
      <td>item</td>
    </tr>
    <tr>
      <td>item</td>
    </tr>
    <tr>
      <td>item</td>
    </tr>
    <tr>
      <td>item</td>
    </tr>
    <tr>
      <td>item</td>
    </tr>
    <tr>
      <td>item</td>
    </tr>
    <tr>
      <td>item</td>
    </tr>
    <tr>
      <td>item</td>
    </tr>
    <tr>
      <td>item</td>
    </tr>
    <tr>
      <td>item</td>
    </tr>
    <tr>
      <td>item</td>
    </tr>
    <tr>
      <td>item</td>
    </tr>
    <tr>
      <td>item</td>
    </tr>
    <tr>
      <td>item</td>
    </tr>
    <tr>
      <td>item</td>
    </tr>
  </table>
</div>

关于javascript - 如何在滚动列表中选择可见元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32561703/

相关文章:

javascript - 如何过滤具有多个键和值的两个数组?

javascript - 返回并使用浏览器的后退按钮显示先前的值

c# - 将文本框中的信息发布到不同解决方案中的另一个文本框

php - 使脚本性能更高效

javascript - jqtree无法使用loadDataFromUrl函数加载数据

html - CSS 表格行背景色与表格背景色

css - 如何设置背景图片?

javascript - 删除 html 模板实例

javascript - 问题打印数组的元素

javascript - 使用 IIFE 并传入参数,我应该什么时候这样做? JavaScript