javascript - 使用 fadeIn 和 fadeOut 交换 View 时如何防止反弹

标签 javascript jquery html css

长话短说:

容器有一个高度为 10 的 View 。

Height == Container(10) + Static(10) == 20

然后我更改容器中的 View ,其高度为 50

1) 向容器添加新 View :

Height == OldView(10) + NewView(50) + Static(10) == 70

2) 从容器中移除旧 View

Height == NewView(50) + Static(10) = 60

因此高度从 20 -> 70 -> 60 变化,这会产生反弹。
我想直接从 20 -> 60


我有一个根据复选框的状态交换 div 的容器

在它下面是另外三个静态 View (在本例中为“Timer Precision”、“Hide Progress”和“Shape”控件)

enter image description here

enter image description here

我用这个交换容器中的 div:

function showSurveyIf(isChecked)
{
  if( isChecked ) {
    $("#surveyDeathContainer").fadeIn(100);
    $("#specifyDeathContainer").fadeOut(100);
  } else {
    $("#surveyDeathContainer").fadeOut(100);
    $("#specifyDeathContainer").fadeIn(100);
  }
}

但我的问题是这段代码使静态 View 跳转。

例如,如果您选中该复选框,它会首先添加调查问题,这会使静态 View 向下移动,然后使日期字段消失,从而使静态 View 恢复原状。

我想要的只是将静态 View 一次移动,根据即将到来的 View 向下或向上移动。

逻辑上对我来说,这意味着我需要 fadeInfadeOut 同时执行,但我认为这不可能吗?

或者是否有另一种方法可以更好地做到这一点?

最佳答案

问题:

jQuery fadeInfadeOut 方法实际上操作 css display 属性 - 这就是静态元素反弹的原因

解决方案:

// make the element invisible - display should still be with 'block' value
$("#specifyDeathContainer").animate({opacity: 0.0001}, 100, function() 
{
    $(this).fadeOut(); // now - make display -> 'none'
    $("#surveyDeathContainer").fadeIn(100); // and make the new element visible with animation
});

关于javascript - 使用 fadeIn 和 fadeOut 交换 View 时如何防止反弹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41843518/

相关文章:

javascript - html卡中的重叠问题

javascript - 如果未选择,则删除强制选项

javascript - 从 javascript 到 html 的元素列表

javascript - 嵌入式 Youtube 视频自动播放 - 在图像幻灯片中间

javascript - 比较两个数组并将公共(public)对象添加到新数组

JQuery Slice 添加类

javascript - 如何将jquery日期选择器更改为美国日期选择器

javascript - 根据用户输入更改文本/字体颜色

html - 为什么:in-range select input that has not value

html - 如何将 Google 字体 .ttf 文件转换为其他文件类型以支持所有浏览器