假设我有两个div:
<div id="control"></div>
<div id="view">(A scrollable list)</div>
我希望让鼠标光标停留在#control
内并滚动鼠标滚轮时,滚动#view
。有什么方法可以实现吗?
假设我有两个div:
<div id="control"></div>
<div id="view">(A scrollable list)</div>
我希望让鼠标光标停留在#control
内并滚动鼠标滚轮时,滚动#view
。有什么方法可以实现吗?
以下是我使用的一种快速修复方法。即使固定的 div
不可滚动,因为它没有内容溢出其边界,您仍然可以检测到 mousewheel
事件。 mousewheel
事件包含 x/y 维度滚动的增量。
注意:此方法适用于鼠标或触控板,并且会提供正确的方向(-/+),无论 Y 轴设置是否反转(即:苹果的自然/非自然滚动)。
因此,您可以像这样操作:
var fixedDiv = document.querySelector('.my-fixed-div');
var scrollableDiv = document.querySelector('.my-scrollable-list');
fixedDiv.addEventListener('mousewheel', function (e) {
e.preventDefault();
scrollableDiv.scrollTop += e.deltaY;
});
不确定布局是什么样子
但如果它们紧挨在一起,您可以使用
#control{pointer-events : none}
并且更改一些内容。
这里有一个示例:http://jsfiddle.net/filever10/QVRNd/
如果元素不能够靠得那么近,这个方法就没什么用了。
它的实现方式是通过控制列表,并在控制上禁用指针事件。
document.onscroll=moveSetting;
div1
,并且鼠标指针应该在 div2
上。scFunc()
。我们可以通过以下方式实现function moveSetting(evt)
{ var div2Obj=document.getElementById('div2');
var width=div2Obj.style.width;
var border=div2Obj.style.border;
var x=evt.pageX,y=evt.pageY,
var leftChk=div2Obj.offsetLeft;
var topChk=div2Obj.offsetTop;
if(x>=leftChk && x<=(leftChk+width+border*2) && y>=topChk && y<=(topChk+width+border*2)) {
scrollFunc();
}
}
var i,j;
function scrollFunc() {
var i=document.getElementById('div1').scrollTop;
i++;
i=j-1;
document.getElementById('div1').scrollTop=i;
/* manage your code yourself to scroll div1 from here */
}
我测试过了,唯一能够在元素上实现onscroll
事件的方法是使用一个“浮动”的活动滚动条。解释一下浮动:它的位置距离顶部100像素,当它被滚动时,我们检查它是向上还是向下移动,然后将其带回到原来的位置。所以请记住,您需要一个活动的滚动条(元素的内部内容应该比自身更高:您可以使用多个<br>
等...);
Javascript代码:
<script type="text/javascript">
var defaultScrollTop = 100; /* testing value */
window.onload = function() {
var div1 = document.getElementById("div1");
var div2 = document.getElementById("div2");
div1.scrollTop = defaultScrollTop; // Initialize to float
div1.onscroll = function(event) {
if (defaultScrollTop < div1.scrollTop) {
div2.scrollTop += 100; //scrollDown
} else if (defaultScrollTop > div1.scrollTop) {
div2.scrollTop -= 100; //scrollUp
}
div1.scrollTop = defaultScrollTop;
}
}
</script>
CSS:
<style>
#div1, #div2 {
max-height: 100px; /* For testing */
overflow-y: scroll;
}
</style>
所以,当你在 div1
内滚动时,它会检查是否向上/向下滚动,将 div2
向上/向下滚动,并将 div1 设置为其默认滚动值。希望这个技巧能有所帮助。
PS:如果你进行一些研究,可以使滚动条不可见(overflow:hidden
不起作用,因为没有活动的滚动条)。
control
div上监听事件mousewheel
,并根据滚动量(使用WheelEvent.deltaY
检索值)滚动其他div view
;var fixedDiv = document.getElementById('control'),
scrollableDiv = document.getElementById('view');
fixedDiv.addEventListener('mousewheel', function (e) {
scrollableDiv.scrollTop += e.deltaY;
console.log(scrollableDiv.scrollTop);
});
#control,
#view {
width: 500px
}
#view {
height: 500px;
overflow: auto;
padding-top: 30px
}
#control {
position:fixed;
height: 50px;
background-color: red
}
<div id="control">Keep your mouse here and scroll</div>
<div id="view">
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
</div>
看一下最后一个例子 -->
onscroll
事件吗?你可以在#control
DIV 中触发一个 JavaScript 函数,从而滚动另一个 DIV。 - Sanuj