表格顶部和底部的水平滚动条

IT技术 javascript jquery html css
2021-01-14 19:37:18

table我的页面上有一个很大的所以我决定在表格底部放一个水平滚动条。但我希望这个滚动条也位于桌子的顶部。

我在模板中的内容是这样的:

<div style="overflow:auto; width:100%; height:130%">
<table id="data" style="width:100%">...</table>
</div>

这只能在 HTML 和 CSS 中实现吗?

6个回答

要模拟元素顶部的第二个水平滚动条,请在div具有水平滚动的元素上方放置一个“虚拟” ,刚好足够滚动条。然后为虚拟元素和真实元素附加“滚动”事件的处理程序,以便在移动任一滚动条时使另一个元素同步。虚拟元素看起来像真实元素上方的第二个水平滚动条。

有关现场示例,请参阅此小提琴

这是代码

HTML:

<div class="wrapper1">
  <div class="div1"></div>
</div>
<div class="wrapper2">
  <div class="div2">
    <!-- Content Here -->
  </div>
</div>

CSS:

.wrapper1, .wrapper2 {
  width: 300px;
  overflow-x: scroll;
  overflow-y:hidden;
}

.wrapper1 {height: 20px; }
.wrapper2 {height: 200px; }

.div1 {
  width:1000px;
  height: 20px;
}

.div2 {
  width:1000px;
  height: 200px;
  background-color: #88FF88;
  overflow: auto;
}

JS:

$(function(){
  $(".wrapper1").scroll(function(){
    $(".wrapper2").scrollLeft($(".wrapper1").scrollLeft());
  });
  $(".wrapper2").scroll(function(){
    $(".wrapper1").scrollLeft($(".wrapper2").scrollLeft());
  });
});
是的,我让它工作了,我只将 <script type="text/javascript" src="path"></script> 添加到 <head>。所以每次我添加 jquery 时,我都必须添加@fudgey 添加的那个?抱歉,javascript 和 jquery 对我来说仍然是中文
2021-03-11 19:37:18
@CodyGuldner:如何将 div 设置为自动占据其中表格的宽度?我不想手动指定 div2 的宽度,但希望它自动采用它包含的表格的宽度。
2021-03-13 19:37:18
@StanleyH:如何将 div 设置为自动占据其中表格的宽度?我不想手动指定 div2 的宽度,但希望它自动采用它包含的表格的宽度。
2021-03-19 19:37:18
你让它工作了吗?更多关于 jQuery 的信息,请参见api.jquery.com/scrollLeft (当然,你可以在没有 jQuery 的情况下通过直接附加 onscroll 处理程序来实现。)为了让没有 JS 的用户优雅降级,你可以通过 JS 将虚拟 div 添加到 DOM .
2021-04-06 19:37:18
.wrapper1 scroll() 调用.wrapper2 scroll(),然后.wrapper2 scroll() 调用.wrapper1 scroll(),然后.wrapper1 scroll() 又调用.wrapper2 scroll(),然后....hrm,这不是无限循环?
2021-04-09 19:37:18

尝试使用jquery.doubleScroll插件

jQuery :

$(document).ready(function(){
  $('#double-scroll').doubleScroll();
});

CSS :

#double-scroll{
  width: 400px;
}

HTML :

<div id="double-scroll">
  <table id="very-wide-element">
    <tbody>
      <tr>
        <td></td>
      </tr>
    </tbody>
  </table>
</div>
链接指向一个未维护的 GitHub,在 read me 中有损坏的链接。没试过实际的js。
2021-04-03 19:37:18
请参阅github.com/avianey/jqDoubleScroll以获取不需要 jQueryUI 的 Pawel 出色插件版本。
2021-04-04 19:37:18

没有 JQuery (2017)

因为您可能不需要 JQuery,这里有一个基于 @StanleyH 答案的可用 Vanilla JS 版本:

var wrapper1 = document.getElementById('wrapper1');
var wrapper2 = document.getElementById('wrapper2');
wrapper1.onscroll = function() {
  wrapper2.scrollLeft = wrapper1.scrollLeft;
};
wrapper2.onscroll = function() {
  wrapper1.scrollLeft = wrapper2.scrollLeft;
};
#wrapper1, #wrapper2{width: 300px; border: none 0px RED;
overflow-x: scroll; overflow-y:hidden;}
#wrapper1{height: 20px; }
#wrapper2{height: 100px; }
#div1 {width:1000px; height: 20px; }
#div2 {width:1000px; height: 100px; background-color: #88FF88;
overflow: auto;}
<div id="wrapper1">
    <div id="div1">
    </div>
</div>
<div id="wrapper2">
    <div id="div2">
    aaaa bbbb cccc dddd aaaa bbbb cccc 
    dddd aaaa bbbb cccc dddd aaaa bbbb 
    cccc dddd aaaa bbbb cccc dddd aaaa 
    bbbb cccc dddd aaaa bbbb cccc dddd
    </div>
</div>

是的!它与@StanleyH 的原始答案具有相同的警告
2021-03-28 19:37:18
在您不知道宽度的情况下,这实际上不是响应式/动态的
2021-04-08 19:37:18

有一种方法可以实现这一点,我在这里没有看到任何人提到。

通过将父容器旋转180 度并将子容器再次旋转180 度,滚动条将显示在顶部

.parent {
  transform: rotateX(180deg);
  overflow-x: auto;
} 
.child {
  transform: rotateX(180deg);
}

有关参考,请参阅w3c 存储库中的问题

如果您只有水平滚动,这是一个非常好的解决方案,但如果您也有垂直滚动,则垂直滚动向后(向上拖动以向下滚动等)。
2021-04-06 19:37:18

首先,很好的答案,@StanleyH。如果有人想知道如何制作具有动态宽度的双滚动容器:

css

.wrapper1, .wrapper2 { width: 100%; overflow-x: scroll; overflow-y: hidden; }
.wrapper1 { height: 20px; }
.div1 { height: 20px; }
.div2 { overflow: none; }

js

$(function () {
    $('.wrapper1').on('scroll', function (e) {
        $('.wrapper2').scrollLeft($('.wrapper1').scrollLeft());
    }); 
    $('.wrapper2').on('scroll', function (e) {
        $('.wrapper1').scrollLeft($('.wrapper2').scrollLeft());
    });
});
$(window).on('load', function (e) {
    $('.div1').width($('table').width());
    $('.div2').width($('table').width());
});

html

<div class="wrapper1">
    <div class="div1"></div>
</div>
<div class="wrapper2">
    <div class="div2">
        <table>
            <tbody>
                <tr>
                    <td>table cell</td>
                    <td>table cell</td>
                    <!-- ... -->
                    <td>table cell</td>
                    <td>table cell</td>
                </tr>
            </tbody>
        </table>
    </div>
</div>

演示

http://jsfiddle.net/simo/67xSL/

此答案不会在顶部创建滚动条。
2021-03-17 19:37:18
没有溢出这样的东西:无;应该是溢出:可见;
2021-03-28 19:37:18
为了澄清起见,我还必须将代码更改为 scrollWidth,以便我自己的代码在“div2”div 中的内容宽度由于位于那里的服务器端动态内容而可变的情况下工作。
2021-03-31 19:37:18
使用$('.div1').width( $('.div1')[0].scrollWidth)获得的内容,当你没有特别使用如表容器有用的真正动宽度。@simo 很棒的努力伙伴。
2021-04-10 19:37:18