【发布时间】:2014-09-15 22:28:42
【问题描述】:
--> 请转到编辑此问题的部分
我想同步两个div的滚动条,我就是这样做的
var div1 = document.getElementById('element1'),
div2 = document.getElementById('element2');
div1.addEventListener('touchmove', scrolled, false);
div2.addEventListener('touchmove', scrolled, false);
function getscrollTop(node) {
return node.pageYOffset || node.scrollTop;
}
function scrolled() {
var node = this, scrollTop = getscrollTop(node);
var percentage = scrollTop / (node.scrollHeight - node.clientHeight);
var other = document.getElementById({
"element1": "element2",
"element2": "element1"
}[node.id]);
other.scrollTop = percentage * (other.scrollHeight - other.clientHeight);
};
Fiddle -> 使用 scroll 代替 touchmove
但问题是它在低端设备中闪烁,并且希望在事件低端设备中使其平滑。
编辑
我使用下面的代码来平滑滚动
var children = document.querySelectorAll('.scrolldiv');
var getscrollTop = function(node) {
return node.pageYOffset || node.scrollTop;
}, toInt = function(n) {
return Math.round(Number(n));
};
window.setInterval(function() {
var scrollTop = getscrollTop(children[0]);
var percentage = scrollTop / (children[0].scrollHeight - children[0].clientHeight);
var oscrollTop = percentage * (children[1].scrollHeight - children[1].clientHeight);
// console.log(1);
children[1].scrollTop = toInt(oscrollTop);
}, 2);
在桌面浏览器中更流畅,但在 iOS 浏览器中,当设置第二个 DIv 的滚动时它会抖动,在滚动完成后设置 scrollTop 的意义是抖动,而不是在滚动时。
【问题讨论】:
-
也许这会对你有所帮助stackoverflow.com/questions/17722497/…
-
我注意到的一件事是在第 17 行,您正在调用一个函数“getscrollTop(node)”,该函数已经作为一个变量 scrollTop。此外,您将“oscrollTop”声明为变量,然后在函数的最后直接将其分配给对象……只需将其直接分配给对象即可。如果您担心低端设备的性能,那么代码优化非常重要。
-
@lordkain 最好的解决方案是什么。第一个解决方案似乎是在代码中进行大量计算。
标签: javascript css