If you're looking to synchronize the scroll of one div
with another, it can be achieved by handling the scroll
event.
To control the scrolling behavior of a specific element (the target div
), you can utilize the properties scrollTop
and scrollLeft
, both measured in pixels. To ensure two divs
scroll together seamlessly, simply set the source div's scrollTop
and scrollLeft
values to match those of the target div
.
For example: Live Example | Source Code
Here is the relevant JavaScript code snippet:
(function() {
var target = $("#target");
$("#source").scroll(function() {
target.prop("scrollTop", this.scrollTop)
.prop("scrollLeft", this.scrollLeft);
});
})();
Alternatively, you can retrieve the raw HTML element like so (source code):
(function() {
var target = $("#target")[0]; // <== Getting raw element
$("#source").scroll(function() {
target.scrollTop = this.scrollTop;
target.scrollLeft = this.scrollLeft;
});
})();
This is how the full page structure looks:
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<meta charset=utf-8 />
<title>Scrolling Demo</title>
<style>
.scroll-demo {
display: inline-block;
width: 40%;
border: 1px solid black;
margin-right: 20px;
height: 100px;
overflow: scroll;
}
</style>
</head>
<body>
<p>Adjust the left div's scroll and observe the synchronization on the right.</p>
<div id="source" class="scroll-demo">
1
<br>2
<br>3
<br>4
<br>5
<br>6
<br>7
<br>8
<br>9
<br>10
<br>11
<br>12
<br>13
<br>14
<br>15
<br>16
<br>17
<br>18
<br>19
<br>20
</div>
<div id="target" class="scroll-demo">
1
<br>2
<br>3
<br>4
<br>5
<br>6
<br>7
<br>8
<br>9
<br>10
<br>11
<br>12
<br>13
<br>14
<br>15
<br>16
<br>17
<br>18
<br>19
<br>20
</div>
<script>
(function() {
var target = $("#target");
$("#source").scroll(function() {
target.prop("scrollTop", this.scrollTop)
.prop("scrollLeft", this.scrollLeft);
});
})();
</script>
</body>
</html>