为了账号安全,请及时绑定邮箱和手机立即绑定

如何同步两个div的滚动位置?

/ 猿问

如何同步两个div的滚动位置?

波斯汪 2019-11-12 14:59:29

我想将2个div的大小设置为特定的宽度(即500px)。一个在另一个之上水平排列。

顶部框应隐藏其滚动条,底部框应显示滚动条,并且当用户滚动时,我希望顶部框的偏移量更改为底部框的值。因此,当底部DIV水平滚动时,似乎顶部DIV也同时滚动。

我很高兴在Jquery中做到这一点,如果它使过程更容易。


查看完整描述

3 回答

?
慕仰1329654

$('#bottom').on('scroll', function () {

    $('#top').scrollTop($(this).scrollTop());

});

在这里,我们用尽.scrollTop()了所有的价值,scrollTop使用滚动条从元素中获取值,并scrollTop为另一个元素设置来同步其滚动位置:http : //api.jquery.com/scrollTop


假设您的底部元素的ID为bottom,顶部元素的ID为top。


您可以top使用CSS 隐藏元素的滚动条:


#top {

    overflow : hidden;

}

这是一个演示:http : //jsfiddle.net/sgcer/1884/


我想我从来没有真正有理由这样做,但是它看起来很酷。


查看完整回答
反对 回复 2019-11-12
?
慕雪9262066

我知道这是一个旧线程,但这也许会对某人有所帮助。如果需要同步双向滚动,仅处理两个容器的滚动事件并设置滚动值是不够的,因为这样滚动事件进入了循环并且滚动不流畅(尝试垂直滚动)。鼠标滚轮,Hightom提供的示例)。


这是如何检查是否已经同步滚动的示例:


var isSyncingLeftScroll = false;

var isSyncingRightScroll = false;

var leftDiv = document.getElementById('left');

var rightDiv = document.getElementById('right');


leftDiv.onscroll = function() {

  if (!isSyncingLeftScroll) {

    isSyncingRightScroll = true;

    rightDiv.scrollTop = this.scrollTop;

  }

  isSyncingLeftScroll = false;

}


rightDiv.onscroll = function() {

  if (!isSyncingRightScroll) {

    isSyncingLeftScroll = true;

    leftDiv.scrollTop = this.scrollTop;

  }

  isSyncingRightScroll = false;

}

.container {

  width: 200px;

  height: 500px;

  overflow-y: auto;

}


.leftContainer {

  float: left;

}


.rightContainer {

  float: right;

}

<div id="left" class="container leftContainer">

Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt, explicabo. Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos, qui ratione voluptatem sequi nesciunt, neque porro quisquam est, qui dolorem ipsum, quia dolor sit, amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt, ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit, qui in ea voluptate velit esse, quam nihil molestiae consequatur, vel illum, qui dolorem eum fugiat, quo voluptas nulla pariatur? At vero eos et accusamus et iusto odio dignissimos ducimus, qui blanditiis praesentium voluptatum deleniti atque corrupti, quos dolores et quas molestias excepturi sint, obcaecati cupiditate non provident, similique sunt in culpa, qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio, cumque nihil impedit, quo minus id, quod maxime placeat, facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet, ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.

</div>

<div id="right" class="container rightContainer">

Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt, explicabo. Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos, qui ratione voluptatem sequi nesciunt, neque porro quisquam est, qui dolorem ipsum, quia dolor sit, amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt, ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit, qui in ea voluptate velit esse, quam nihil molestiae consequatur, vel illum, qui dolorem eum fugiat, quo voluptas nulla pariatur? At vero eos et accusamus et iusto odio dignissimos ducimus, qui blanditiis praesentium voluptatum deleniti atque corrupti, quos dolores et quas molestias excepturi sint, obcaecati cupiditate non provident, similique sunt in culpa, qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio, cumque nihil impedit, quo minus id, quod maxime placeat, facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet, ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.

</div>


查看完整回答
反对 回复 2019-11-12
?
幕布斯7119047

我一直在寻找双向解决方案,感谢大家,您的支持帮助了我:


$('#cells').on('scroll', function () {

$('#hours').scrollTop($(this).scrollTop());

$('#days').scrollLeft($(this).scrollLeft());});

参见JSFiddle:https ://jsfiddle.net/sgcer/1274/


希望有一天能对某人有所帮助:-)


查看完整回答
反对 回复 2019-11-12

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信