我需要创建一个动画曲线(圆弧形的),其通过滚轮触发。
所以,我已经打了一些代码。
var arc = {
center: [-200, ($(window).height() - 24)/2],
// height + padding
radius: 450,
start: 0,
end: 90,
dir: 1
}
$('.point').each(function() {
$(this).data('lastEnd', arc.end).animate({
path: new $.path.arc(arc)
}, 0);
arc.start -= 10;
arc.end -= 8;
});
$('body').mousewheel(function (e, delta, deltaX, deltaY) {
e.preventDefault();
var delta = delta * -1;
$('.point').each(function() {
var $this = $(this);
var startPoint = $this.data('lastEnd');
var arc = {
center: [-200, ($(window).height() - 24)/2],
radius: 450,
start: startPoint,
end: (delta * 8) + startPoint,
dir: delta > 0 ? 1 : -1
}
$this.data('lastEnd', arc.end);
$(this).animate({
path: new $.path.arc(arc)
}, 500);
});
});
我使用jQuery path的曲线动画和
jQuery mousewheel以触发鼠标滚轮事件。
问题:
鼠标滚轮刚刚给我的鼠标滚轮的方向,而不是速度。所以,如果用户滚动速度更快,而不是增加delta
,它会多次触发mousewheel事件。 它可以在简单的情况下工作,但我的动画点。因此,在动画完成之前,会触发多个鼠标滚轮事件。 (您可以通过滚动快看看吧)
我试了一下:
我通过把一个标志
isScrolling
限制多的鼠标滚轮事件,并限制滚动,如果isScrolling
是真实的。但是,这并没有给我流畅的动画。在动画结束之前,mousescroll什么都不做。我用
setTimeout
来保持滚动几毫秒,并加总那段期间所有的增量,但它也不光滑。我试过使用
stop()
。但stop()
停在中途动画,我想在标记的位置ATLEAST一点(不高于/低于它)
我想要什么:
流畅的动画效果与鼠标滚轮(只就像页面上的正常滚动一样)。更快的滚轮滚动应滚动超过正常(一次滚动一次)滚动。
更新1:
我的进步,因为昨天可以看出here
现在,我使用setTimeout
开始的动画,然后用一个相对持续时间以动画更快之前总结deltas
较大的三角洲和较小的三角洲较慢。
thx指向我'path.css'。但你能看到快速滚动打破了角度吗?它不再在那条曲线中移动 – Jashwant
@Jashwant是的,我也注意到了这一点。虽然不知道如何修复它... – yckart
好吧,当你有时间的时候试试。我会在同一时间尝试。我发现了另一种方法。我使用setTimeout作为问题中提到的,然后通过动态更改基于delta的'animate'的持续时间,我有一个非常流畅的动画。顺便说一句,+1为你的努力 – Jashwant