我需要计算滚动div的水平和垂直滚动条所需的缩放值,以便当水平滚动完全横过div的宽度时,垂直滚动也完全横过同一div的高度。
[我现在首先通过手动计算jQuery函数$( '#div' ).scrollLeft( ++x )
的调用次数,以及分别计算$( '#div' ).scrollTop( ++y )
函数的调用数,其中x和y的值从0开始,然后递增每个呼叫1个,分别需要在div的宽度和高度上滚动。在我的情况下,div的宽度为[[540 px,高为[[759 px),并且需要342次才能覆盖宽度,而660为高度。据此,我可以计算出要放入div的垂直滚动功能调用$( '#div' ).scrollTop( ++y * yScale )
的y缩放比例值为660/342。问题是div的宽度和高度并不总是相同,因此对于滚动div需要显示的所有可能的内容,我无法将y缩放值使用预先计算的值。
[尝试自动执行计算之前,我尝试使用以0开头的参数值多次调用scrollTop函数,并在每次后续调用中以1像素递增(0,1,2,... 10,11, ..,20等),我发现每个滚动调用的滚动量不一致。
我加入这个是因为由于不一致,我发现我不能依靠几个滚动调用的平均滚动量来计算遍历每个div轴方向的整个距离所需的调用总数。
我可以使用一个循环来自动执行此操作,该循环可以计算每个维度的重复调用次数,当相应的滚动条停止滚动时停止为每个方向计数,而当两个滚动条停止滚动时都停止循环,但是我宁愿不必这样做如果有一种纯粹的数学方法来计算缩放值,则使用此方法。此外,对于div而言,每次加载时div内容都会跳来跳去,这对用户来说似乎很奇怪,特别是对于较大的内容并降低显示速度。有人知道该怎么做吗?
谢谢。
var speed = 20; // adjust accordingly
// Home into destination
currentScrollX += (destinationScrollX - currentScrollX) / speed;
currentScrollY += (destinationScrollY - currentScrollY) / speed;
要结束滚动,只需执行类似操作
if (Math.abs(destinationScrollX - currentScrollX) < 0.05 && Math.abs(destinationScrollY - currentScrollY) < 0.05) {
currentScrollX = destinationScrollX;
currentScrollY = destinationScrollY;
// stop scrolling flag / code goes here
}
// At this point set scrollTop(currentScrollY) and scrollLeft(currentScrollX)