修复了 jQuery 缓动的加速?

Posted

技术标签:

【中文标题】修复了 jQuery 缓动的加速?【英文标题】:Fixed acceleration for jQuery easing? 【发布时间】:2013-10-06 04:35:56 【问题描述】:

我正在制作一个非常规的网站,它可以水平滚动很远的距离。我注意到 jQuery 的缓动函数在滚动距离的长度范围内被拉伸。它加速的持续时间似乎是它需要滚动的距离的固定分数。例如,它可能会在前 1/5 距离加速,在 3/5 以恒定速度滚动,然后在剩余的 1/5 减速。这使得长距离滚动时的加速度更加缓慢。无论需要滚动多远,有什么方法可以让它在固定的时间内加速?

如果有帮助,这是我的代码的一部分

$('tbody.travelTo a').click(function()
    $('html, body').animate(
        scrollLeft: $( $.attr(this, 'href') ).offset().left - 1/2 * $(window).width() + 1/2 * $( $.attr(this, 'href') ).width()
    , $( $.attr(this, 'href') ).offset().left / travelRate, 'swing');
    return false;
); 

【问题讨论】:

【参考方案1】:

您可以在animate 方法中设置持续时间。 API

类似的东西

.animate( 
   scrollTop:'300px',
   300, //duration is the 2nd parameter (default - 400ms)
   swing,
   function() 
     alert(animation complete! - your custom code here!); 
    
)

或者您可以随时编写自己的缓动方法

jQuery.easing.method(   
 null,  
 current_time,  
 start_value,   
 end_value,     
 total_time 
)

有用的链接 - http://forrst.com/posts/How_to_create_custom_jQuery_easing_functions-OKb

【讨论】:

我可以设置整个滚动事件的持续时间,但我想设置滚动事件加速部分的持续时间。这样想,现在如果屏幕必须在 5 秒内滚动 100 像素,它可能会执行以下操作: 加速:1 秒恒速:3 秒减速:1 秒如果它必须滚动 500 像素,它可能会这样做:加速:5 秒恒速:15 秒减速:5 秒但我想要什么这样做是这样的:加速:1 秒恒速:23 秒减速:1 秒与第一个距离(100 像素)相比,您是否看到它如何保持恒定的加速持续时间? 我认为,效果取决于您选择的缓动类型。 是的,我查看了所有这些图表。我选择哪一个并不重要。图表在我要求它滚动的距离上被“拉伸” 看起来您需要自定义缓动功能,请查看我的更新答案

以上是关于修复了 jQuery 缓动的加速?的主要内容,如果未能解决你的问题,请参考以下文章

requestAnimationFrame之缓动的应用

javascript 惯性缓动实现

加速器在 Python Tkinter 中不起作用:如何修复 [重复]

canvas缓动3

封装变速 加速 动画函数 bug修复

封装变速 加速 动画函数 bug修复