【问题标题】:How to synchronize two scrollbars for divs如何同步 div 的两个滚动条
【发布时间】:2012-08-15 20:45:02
【问题描述】:

我有这个文件比较代码:http://jsfiddle.net/CrN6X/

现在它可以满足我的需要:

  1. 一个只能垂直滚动的大 div
  2. 仅水平滚动的两个较小的潜水

这样我可以很容易地比较我的文件,但我有一个问题:只有当我一直向下滚动时才能访问底部滚动条。

我怎样才能让它们浮动或将滚动条移动到另一个 div,总是可以看到,这样我就不需要一直向下滚动另一个 div 到底部访问它们?

【问题讨论】:

    标签: javascript css


    【解决方案1】:

    这里的 javascript 是您真正需要的,但我添加了 html,以便您可以看到它的实际效果。

    $("#div1").scroll(function () { 
      $("#div2").scrollTop($("#div1").scrollTop());
      $("#div2").scrollLeft($("#div1").scrollLeft());
    });
    $("#div2").scroll(function () { 
      $("#div1").scrollTop($("#div2").scrollTop());
      $("#div1").scrollLeft($("#div2").scrollLeft());
    });
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
    
    <div id="div1" style="float:left;overflow:auto;height:100px;width:200px;">
      <p>lulz</p>
      <p>lulz</p>
      <p>lulz</p>
      <p>lulz</p>
    </div>
    
    <div id="div2" style="float:right;overflow:auto;height:100px;width:200px;">
      <p>lulz</p>
      <p>lulz</p>
      <p>lulz</p>
      <p>lulz</p>
    </div>

    【讨论】:

    • hmm...据我所知,该脚本只能让我同时滚动两个 div(这很好),但我如何在大 div 下方获得滚动条?跨度>
    • 如果有内容可以水平滚动,那么它将水平滚动。您的代码在 JS fiddle 中没有 JS,这就是它不起作用的原因。获取该代码,在您的计算机上放入一个 html 文档,将 JS 保留在其中并编辑 CSS,它会为您工作。
    • 好的,我让它在这里工作:jsfiddle.net/CrN6X/3 但仍然在努力让它在我的代码中工作:)
    • 这似乎是您对这个项目所需要的,两个下栏都显示并且滚动匹配?如果你想隐藏左侧 div 的垂直滚动条,你应该遵循:stackoverflow.com/questions/1326570/…
    • 这是一个 jsfiddle,虽然稍作修改:jsfiddle.net/zoldello/okeeaf41
    【解决方案2】:

    为避免使用鼠标滚轮滚动时出现滚动滞后效应,我们需要禁用第二个滚动事件触发器。在下面检查我的方法:

      var ignoreScrollEvents = false
      function syncScroll(element1, element2) {
        element1.scroll(function (e) {
          var ignore = ignoreScrollEvents
          ignoreScrollEvents = false
          if (ignore) return
    
          ignoreScrollEvents = true
          element2.scrollTop(element1.scrollTop())
        })
      }
      syncScroll($("#div1"), $("#div2"))
      syncScroll($("#div2"), $("#div1"))
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
    
    <div id="div1" style="float:left;overflow:auto;height:100px;width:200px;">
      <p>lulz</p>
      <p>lulz</p>
      <p>lulz</p>
      <p>lulz</p>
    </div>
    
    <div id="div2" style="float:right;overflow:auto;height:100px;width:200px;">
      <p>lulz</p>
      <p>lulz</p>
      <p>lulz</p>
      <p>lulz</p>
    </div>

    【讨论】:

      【解决方案3】:

      不,滚动条位于较小的 div 中。这些滚动条被锁定在 div 的底部,因此无法使用。

      您可以做的是在您的大 div 制作两个 javascript 滚动条并完全禁用默认滚动条。然后你的滚动条总是可见的。如果您想加倍努力,这还允许您耦合滚动条,以便左右窗口滚动到相同的位置,以便更好地进行比较。

      【讨论】:

      • 这听起来正是我想要的。你能提供一个关于教程的链接或展示我如何做到这一点的东西吗?我的意思是底部的一个大滚动条可以滚动两个 div 将是完美的。
      • @DainisAbols 似乎有人打败了我 ;-) Checkout Ryans 对实施的回答。如果您发现它有用,请随时支持我的答案;-)
      • @DainisAbols 那另一半会是什么?
      • 现在一切正常,两个滚动条同步。非常感谢 m8。
      猜你喜欢
      • 1970-01-01
      • 2012-03-03
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 2014-07-23
      • 2018-09-05
      • 2021-04-10
      • 1970-01-01
      相关资源
      最近更新 更多