我看到这篇文章并尝试复制它但它没有用 - Syncing scrolling
我有一个带有2个制表符的TabContainer,它们有div,bmrDetailDataDiv和residentDetailDataDiv。
这是我的javscript代码 -
window.onload = function () {
var bmrDetailDiv = $("div[id$='_bmrDetailDataDiv']")[0];
var residentDetailDiv = $("div[id$='_residentDetailDataDiv']")[0];
if ((bmrDetailDiv) && (residentDetailDiv)) {
bmrDetailDiv.on('scroll', function () {
residentDetailDiv.scrollTop(bmrDetailDiv.scrollTop());
});
residentDetailDiv.on('scroll', function () {
bmrDetailDiv.scrollTop(residentDetailDiv.scrollTop());
});
}
我错过了什么吗?
编辑 -
试过这个并收到错误 -
$(document).ready(function () {
var bmrDetailDiv = $("div[id$='_bmrDetailDataDiv']");
var residentDetailDiv = $("div[id$='_residentDetailDataDiv']");
if (bmrDetailDiv.length && residentDetailDiv.length) {
bmrDetailDiv.on('scroll', function () {
residentDetailDiv.scrollTop($(this).scrollTop());
});
residentDetailDiv.on('scroll', function () {
bmrDetailDiv.scrollTop($(this).scrollTop());
});
}
});
编辑#2 -
试过这个但仍然遇到JScript错误。这都在我的.js文件中,它包含在页面顶部。 -
jQuery.fn.exists = function () { return this.length > 0; }
$(function () {
var combined = $("div[id$='_bmrDetailDataDiv']").add($("div[id$='_residentDetailDataDiv']"));
if (combined.exists()) {
//Getting error on below line
combined.on("scroll", function () {
combined.scrollTop($(this).scrollTop());
});
}
});
答案 0 :(得分:2)
总是检查控制台 - 这将导致错误,因为您尝试在本机元素上使用jQuery方法(因为您通过[0]
检索它们)。如果你纯粹是为了if
条件而这样做,那么就没有必要 - 检查选择器找到的元素,你可以只查询length
属性。
$(function() {
var bmrDetailDiv = $("div[id$='_bmrDetailDataDiv']");
var residentDetailDiv = $("div[id$='_residentDetailDataDiv']");
if (bmrDetailDiv.length && residentDetailDiv.length) {
bmrDetailDiv.on('scroll', function () {
residentDetailDiv.scrollTop($(this).scrollTop());
});
residentDetailDiv.on('scroll', function () {
bmrDetailDiv.scrollTop($(this).scrollTop());
});
}
});
其他变化:
1)文档就绪处理程序而不是window.onload
2)在事件回调中使用$(this)
答案 1 :(得分:1)
完成所需操作的简短方法:
直播演示: http://jsfiddle.net/oscarj24/gqHyW/1/
jQuery.fn.exists = function(){return this.length>0;}
$(function() {
var combined = $("div[id$='_bmrDetailDataDiv']").add($("div[id$='_residentDetailDataDiv']"));
if (combined.exists()) {
combined.on("scroll", function () {
combined.scrollTop($(this).scrollTop());
});
}
});
将其另存为 index.htm : - )
<html>
<head>
<title>Synchronizing scrolling between 2 divs</title>
</head>
<style>
div {
position : absolute;
top : 0;
width : 50%;
height : 300px;
}
.top {
overflow : hidden;
left : 0;
}
.bottom {
left : 50%;
overflow : scroll;
}
</style>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<script>
jQuery.fn.exists = function(){return this.length>0;}
$(function() {
var combined = $("div[id$='_bmrDetailDataDiv']").add($("div[id$='_residentDetailDataDiv']"));
if (combined.exists()) {
combined.on("scroll", function () {
combined.scrollTop($(this).scrollTop());
});
}
});
</script>
<body>
<div id="1_bmrDetailDataDiv" class="top">
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>10th P Tag</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>20th P Tag</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>30th P Tag</p>
</div>
<div id="2_residentDetailDataDiv" class="bottom">
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>10th P Tag</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>20th P Tag</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>Content Here</p>
<p>30th P Tag</p>
</div>
</body>
</html>
答案 2 :(得分:0)
syncscroll 库可能使下一个需要此工作的人更加轻松...
https://github.com/asvd/syncscroll
$ bower安装同步滚动
menuItems.itemId
现在,元素将同时滚动。请记住,滚动是按比例同步的,而不是按像素数量同步的。
如果通过更改类或属性来更新一组同步元素,请调用<script src="path/to/syncscroll.js"></script>```
<div class=syncscroll name=myElements>
First big text goes here...
</div>
<div class=syncscroll name=myElements>
Second big text goes there...
</div>
以更新侦听器。