[英]non-linear scrolling
解决问题的高级方法:
根据上次事件的时间计算实际速度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计算delta滚动dS ,初始滚动大小(1滚动事件的滚动值)
dS(fS): dS = fS * dSi
滚动那么多
Scroll(dS)
如果每MinTime或更慢滚动少于一次,您将获得典型的线性行为。 如果您尝试更快地滚动,则将以实际滚动速度平方滚动。
我不知道如何用javascript实际做到这一点,但我希望它提供了一个开始的地方。
是否有一个滚动单位我可以使用任何机会? 我的术语看起来很有趣。
这应该有助于捕获鼠标滚轮的“速度”:
$(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 ;)
}
所以这更具概念性,但我认为使用其他人提到的功能来检测滚动速度,这样可能会有所帮助。
逻辑:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.