我在这里有一个简单的演示,我有两个单独的滚动容器。
我正在使用jQuery将滚动从一个容器复制到另一个容器,因此当一个容器滚动时,另一个容器会做相同的滚动。
这可能是生干的,有时每个容器中的元素都不会排队。
如果我可以检测到滚动何时停止,我认为我可能能够确保每个滚动条在每个。
我如何能够检测滚动何时停止,以便我可以在每个容器上设置滚动条。
$('.scroll-top').on('scroll', function() {
var val = $(this).scrollLeft();
$('.scroll-bottom').scrollLeft(val);
});
$('.scroll-bottom').on('scroll', function() {
var val = $(this).scrollLeft();
$('.scroll-top').scrollLeft(val);
});
.wrapper{
border: 2px solid grey;
padding: 5px;
width: 500px;
margin: 0 auto;
}
.scroll-top,
.scroll-bottom{
overflow-y: scroll;
}
.content{
display: flex;
width: 1000px;
height: 100px;
}
.content .block{
background: red;
width: 50px;
height: 100px;
margin-right: 10px;
}
.content-top{
margin-bottom: 2px;
}
.scroll::-webkit-scrollbar {
display: none;
}
.scroll {
-ms-overflow-style: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
<div class="scroll-top scroll">
<div class=" content content-top">
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
</div>
</div>
<div class="scroll-bottom scroll">
<div class=" content content-bottom">
<div class="block block-1"></div>
<div class="block block-1"></div>
<div class="block block-1"></div>
<div class="block block-1"></div>
<div class="block block-1"></div>
<div class="block block-1"></div>
<div class="block block-1"></div>
<div class="block block-1"></div>
<div class="block block-1"></div>
<div class="block block-1"></div>
<div class="block block-1"></div>
<div class="block block-1"></div>
<div class="block block-1"></div>
<div class="block block-1"></div>
<div class="block block-1"></div>
<div class="block block-1"></div>
</div>
</div>
</div>
您可以使用 settimeout
,以便动画在结尾只发射一次:
var timeoutVar;
$('.scroll-bottom').on('scroll', function() {
var $this = $(this);
clearTimeout(timeoutVar); // clear timeout so it is not fired if still scrolling
timeoutVar = setTimeout(function() {
var val = $this.scrollLeft();
$('.scroll-top').scrollLeft(val);
}, 100); // 100ms should be long enough so that this will only be fired after the scroll has finished
});