滚动s
就像是线性的:
s(x) = x with x among [0, ∞]
我想申请a more fancy function,说x^2
:
但我真的不知道它是否可能以及如何......
我想知道你对此的看法。
修改
例如:是否可以在滚动时更改scrollTop
值?
干杯。
答案 0 :(得分:2)
解决问题的高级方法:
根据上次活动的时间计算实际速度 vA
vA(dT):
// if we last scrolled a long time ago, pretend it was MinTime
// MinTime is the dT which, when scrolled
// at or less than, behaves linearly
if (dT > MinTime) dT = MinTime
vA = MinTime / dT
设计一些转换以在 vA 上执行以获得所需的速度 vD :
vD(vA):
// quadratic relationship
vD = vA * vA
计算“滚动因子” fS , vD 与 vA 的比率:
fS(vD, vA):
// this step can be merged with the previous one
fS = vD / vA
使用 fS 和 dSi 计算增量滚动 dS ,初始滚动大小(1滚动事件的滚动值)< / p>
dS(fS):
dS = fS * dSi
滚动那么多
Scroll(dS)
如果每MinTime滚动少于一次或更慢,您将获得典型的线性行为。如果您尝试更快地滚动,则将以实际滚动速度平方滚动。
我不知道如何使用javascript实际执行此操作,但我希望它提供了一个可以开始的地方。
是否有任何机会可以使用的滚动单位?我的术语看起来很有趣。
答案 1 :(得分:1)
这对于捕获鼠标滚轮的“速度”非常有用:
$(document).on('DOMMouseScroll mousewheel', wheel);
function wheel (event) {
var delta = 0;
if (event.originalEvent.wheelDelta) {
delta = event.originalEvent.wheelDelta/120;
} else if (event.originalEvent.detail) {
delta = -event.originalEvent.detail/3;
}
if (delta) {
handle(delta, event.currentTarget);
}
if (event.preventDefault) {
event.preventDefault();
}
event.returnValue = false;
}
function handle (delta, target) {
// scrollYourPageDynamiclyWithDelta(delta*delta);
// manipulate of scrollTop here ;)
}
答案 2 :(得分:0)
所以这更具概念性,但我认为使用其他人提到的功能来检测滚动速度,这样可能会有所帮助。
逻辑: