Javascript 向上滑动线性缓和第一步不起任何作用

Javascript 向上滑动线性缓和第一步不起任何作用,javascript,jquery,animation,easing,Javascript,Jquery,Animation,Easing,我正在开发一个手风琴插件,除了一个bug外,大部分都完成了,在slideUp/slideDown的前几个步骤中,手风琴比预期的要高1倍,导致了一个视觉bug。我已经把范围缩小到slideUp动画中的第一步没有任何作用,我不知道为什么。下面是一个例子: console.log('Start'); var-diff=0; var upNow=100; var downNow=0; $.fx.interval=1000; 风险值持续时间=$.fx.interval*100; $(“#div1”).s

我正在开发一个手风琴插件,除了一个bug外,大部分都完成了,在slideUp/slideDown的前几个步骤中,手风琴比预期的要高1倍,导致了一个视觉bug。我已经把范围缩小到slideUp动画中的第一步没有任何作用,我不知道为什么。下面是一个例子:

console.log('Start');
var-diff=0;
var upNow=100;
var downNow=0;
$.fx.interval=1000;
风险值持续时间=$.fx.interval*100;
$(“#div1”).slideUp({
“线性”,
持续时间:持续时间,
步骤:功能(现在){
如果(现在!=0&&now>90){
日志(“向上滑动:+现在);
现在=现在;
}
}
});
$(“#div2”)。向下滑动({
“线性”,
持续时间:持续时间,
步骤:功能(现在){
如果(现在!=0&&now<10){
唐诺=现在;
差异=100-(向上+向下);
日志(“向下滑动:+现在);
控制台日志(“幻灯片差异:+diff”);
}
}
});

我不知道这个问题是从哪里来的。。。星期天早上。。。没有太多时间去调查。。。但我根据你的小提琴找到了两个可能的解决方案

第一个是用overflow:hidden将这两个DIV包装到另一个DIV中

第二个。。。可能更合适的方法是只在其中一个div上调用“slide”函数,然后在callback中更新第二个div的大小,如下所示:

console.log('Start');
var diff = 0;
var upNow = 100;
var downNow = 0;
$.fx.interval = 1000;
var duration = $.fx.interval * 100;
$("#div1").slideUp({ easing: 'linear', duration: duration, step: function(now)
{
    if(now != 0 && now > 90)
    {
        console.log("Slide Up: " + now);
        upNow = now;
    }

    $("#div2").height(100-  $("#div1").height());
}});
同时删除“disply:none”表单div2样式


它解决了这个问题,在我看来是一个更优雅的解决方案。。。调用两个单独的动画函数可能会导致同步问题。。。希望这有助于…

问题可以归结为jQuery的内部
defaultPrefilter
方法中的这一行:

tween.start = prop === "width" || prop === "height" ? 1 : 0;
这会导致第二个div(从1px到100px)的动画比第一个div(从0到100px)的动画短

要解决此问题,请按如下方式修改步骤函数:

function linearStep(now, animation){
    var animationStart = animation.start;
    if (animationStart === 1){
         animationStart = 0;   
    }
    animation.now = (animation.end - animationStart ) * animation.pos + animationStart;
}
它通过使用固定的
animationStart
执行相同的计算来覆盖计算的
now
值,该值为0而不是1

如果动画实际上从1开始,这将中断,但是还有其他方法来处理它


肩并肩地摆弄:

第一个的问题是,我们已经在这么做了。我的例子是我开发的一个手风琴插件的简化版本,溢出none导致较低内容的底部边框被隐藏。但我喜欢你的幻灯片。我将不得不等到明天再尝试实施它(这是为了工作),但如果它运行良好,我肯定会接受你的答案。谢谢你的洞察力谢谢,这让我很头疼。不过,我对这个功能感到惊讶,文档中有没有提到它?文档中没有看到任何内容,只是不断地浏览jQuery源代码。