javascript - 如何使用插件 jscrolpane 修复 thead?

标签 javascript jquery html css

谁知道问题出在哪里?我想结合tablejscrollpane,当我开始使用这个插件时,一切都坏了,无法修复thead。有人遇到过这个吗?如果删除类滚动 Pane ,则一切正常,只是没有滚动样式。 这对我来说似乎是不可能的。吃什么旁路可以吗?

$(document).ready(function () {
  window.onload = function(){
    var tableCont = document.querySelector('#table-cont')
    function scrollHandle (e){
      var scrollTop = this.scrollTop;
      this.querySelector('thead').style.transform = 'translateY(' + scrollTop + 'px)';
    }
    tableCont.addEventListener('scroll',scrollHandle)
  };
  
    $('.scroll-pane').jScrollPane({
        showArrows: false,
        contentWidth: '0px',
        autoReinitialise: true
    }).bind(
        'mousewheel',
        function(e)
        {
            e.preventDefault();
        }
    );
});
.table-cont{
  max-height: 170px;
  overflow: auto;
  background: #ddd;
  margin: 20px 10px;
  box-shadow: 0 0 1px 3px #ddd;
}
thead{
  background-color: #ddd;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/jScrollPane/2.2.0/style/jquery.jscrollpane.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.13/jquery.mousewheel.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jScrollPane/2.2.0/script/jquery.jscrollpane.js"></script>

<h1 >132 qwe 123qwe </h1>
  <div class='table-cont scroll-pane' id='table-cont'>
   <table class="table table-striped">
      <thead>
        <tr>
          <th>#</th>
          <th>First Name</th>
          <th>Last Name</th>
          <th>Username</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <th scope="row">1</th>
          <td>Mark</td>
          <td>Otto</td>
          <td>@mdo</td>
        </tr>
        <tr>
          <th scope="row">2</th>
          <td>Jacob</td>
          <td>Thornton</td>
          <td>@fat</td>
        </tr>
        <tr>
          <th scope="row">3</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">4</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">5</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">6</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">7</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">8</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">9</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">10</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">11</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">12</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">13</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
      </tbody>
    </table>
  </div>

最佳答案

通过一些 CSS 覆盖和调整,我们可以让它看起来就像是同一个表格。诀窍是,为头部和 body 使用单独的表格:

$(document).ready(function () {
  window.onload = function(){
    var tableCont = document.querySelector('#table-cont')
    function scrollHandle (e){
      var scrollTop = this.scrollTop;
      this.querySelector('thead').style.transform = 'translateY(' + scrollTop + 'px)';
    }
    tableCont.addEventListener('scroll',scrollHandle)
  };
  
    $('.scroll-pane').jScrollPane({
        showArrows: false,
        contentWidth: '0px',
        autoReinitialise: true
    }).bind(
        'mousewheel',
        function(e)
        {
            e.preventDefault();
        }
    );
});
.table-cont{
  max-height: 170px;
  overflow: auto;
  background: #ddd;
  margin: 20px 10px;
  box-shadow: 0 0 1px 3px #ddd;
}
.table-head{
    background-color: #ddd;
    margin-left: 9.5px;
    margin-bottom: -18px;
    width: 97%;
    display: block;
    box-shadow: 0 0 1px 3px #ddd;
}

table th, table td{
  min-width: 80px;
  text-align: left;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/jScrollPane/2.2.0/style/jquery.jscrollpane.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.13/jquery.mousewheel.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jScrollPane/2.2.0/script/jquery.jscrollpane.js"></script>

<h1 >132 qwe 123qwe </h1>

  <table class="table table-striped table-head">
      <thead>
        <tr>
          <th>#</th>
          <th>First Name</th>
          <th>Last Name</th>
          <th>Username</th>
        </tr>
      </thead>
    </table>
  <div class='table-cont scroll-pane' id='table-cont'>
   <table class="table table-striped">
      <tbody>
        <tr>
          <th scope="row">1</th>
          <td>Mark</td>
          <td>Otto</td>
          <td>@mdo</td>
        </tr>
        <tr>
          <th scope="row">2</th>
          <td>Jacob</td>
          <td>Thornton</td>
          <td>@fat</td>
        </tr>
        <tr>
          <th scope="row">3</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">4</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">5</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">6</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">7</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">8</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">9</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">10</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">11</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">12</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
        <tr>
          <th scope="row">13</th>
          <td>Larry</td>
          <td>the Bird</td>
          <td>@twitter</td>
        </tr>
      </tbody>
    </table>
  </div>

关于javascript - 如何使用插件 jscrolpane 修复 thead?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50454779/

相关文章:

javascript - 如何在rails应用程序中使用js.erb

jQuery 验证如何在输入的错误状态更改时获取通知

javascript - 十六进制到 RGB 转换器

html - 垂直对齐和实心行分隔符

javascript - 如何使用 laravel 重命名已存储在服务器中的文件?

javascript - 对其中包含字符串的数组进行排序

jquery - 为什么我的简单交叉淡入淡出不重复?

jquery slideToggle 在使用 bootstrap v4 时不起作用

javascript - AngularJS - 根据 ng-repeat 中的索引不同的 HTML

javascript - 用javascript生成菜单?