Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何补偿具有不同偏移的动画的速度?_Jquery_Animation_Math - Fatal编程技术网

Jquery 如何补偿具有不同偏移的动画的速度?

Jquery 如何补偿具有不同偏移的动画的速度?,jquery,animation,math,Jquery,Animation,Math,这是我的代码: $('.element').click(function () { var offsetTop = $('.destination').offset().top; $('html,body').stop(true, false).animate({ scrollTop: offsetTop }, 800); }); 我在网页的不同(垂直)位置触发此代码。 由于偏移更改,到目标的速度不同(单击顶部的次数越多,动画速度越快) 您将如何补偿此动画?在每个垂直/偏移值上

这是我的代码:

$('.element').click(function () {
    var offsetTop = $('.destination').offset().top;
    $('html,body').stop(true, false).animate({ scrollTop: offsetTop }, 800);
});
我在网页的不同(垂直)位置触发此代码。 由于偏移更改,到目标的速度不同(单击顶部的次数越多,动画速度越快)

您将如何补偿此动画?在每个垂直/偏移值上具有相同的速度

这里有一个例子:


点击1,注意滚动速度。然后单击8,看看它有多慢。

您必须根据
偏移量动态计算动画的
速度

$('.element').click(function () {
    var offsetTop = $(this).offset().top,
        destinationTop = $('.destination').offset().top,
        speed = ((destinationTop - offsetTop) / $(window).height()) * 800;
        // Speed calculation according to the distance to cover

    $('html,body').stop(true, false).animate({
        scrollTop: destinationTop
    }, speed);

});
演示:


这将以相同的速度从页面上的任何位置滚动到顶部。

单击应用此动画并停止上一个动画如果没有示例,很难准确理解您的意思。如果我真的明白你的意思,那么,因为速度是距离和时间的乘积,你需要缩短距离或增加动画时间。好的,例子来了……添加一个例子,检查问题的底部;)我知道速度是距离和时间的乘积,但它们不是线性增长的。所以如果时间是800,偏移量是400和8000,速度不是线性的,使用400*800和8000*800…不确定你是否明白我的意思。检查我发布的示例。在你的情况下,速度总是相同的值,我想这应该会改变。。。