【问题标题】:Hide and then disable div with javascript使用 javascript 隐藏然后禁用 div
【发布时间】:2013-02-11 08:20:42
【问题描述】:

我想隐藏 div,将其不透明度更改为 0带有动画,当它完成禁用它时,将显示属性更改为 'none'。这两个功能都应该通过 onclick 或至少一个单独的操作来启动,因此 div 变得不可见(如淡出)然后消失。


我正在使用这段代码来执行动画:

function animateStyle(divID) {
    $("#" + divID).css({ "opacity": "1" }).animate({ "opacity": "0" }, 900);
};

<span onclick="return animateStyle('alert-background');" 
class="close">&#10008;</span>

我尝试使用 .hide 来禁用 div,但不能让两者一起工作——如果动画有效,那么 div 不会消失,只会保持不可见。如果 div 消失了,那么动画就不起作用了。这个想法可能有更好的解决方案吗?


更新: 我已经找到了做我想做的事情的方法,但这更像是一个技巧而不是解决方案:

function animateStyle(divID) {
    $("#" + divID).css({ "opacity": "1" })
                  .animate({ "opacity": "0" }, 900)
                  .delay(1100)
                  .css({ "margin-top": "0" })
                  .animate({ "margin-top": "-100000px" }, 1);
};

但是,虽然这可以正常工作,但我想完全删除 div 而不是将其移到屏幕外。希望有办法做到这一点...

【问题讨论】:

  • $(function() { $('.close').on('click', function() { animateStyle($(this).data('id')); }); }); 添加数据属性以动画化您选择的 ID。
  • 但这应该如何禁用 div?我的问题的重点是,当 div 变得不可见(透明)时,我需要平滑的动画,然后我需要禁用这个不可见的 div,就像它的显示属性是“无”一样。

标签: javascript jquery animation hide opacity


【解决方案1】:

你可以使用fadeOut:

$("#" + divID).fadeOut(900);

它应该是以下内容的简写,更接近您已有的内容:

$("#" + divID).css({ "opacity": "1" }).animate({ "opacity": "0" }, {
    duration: 900,
    complete: function() { $(this).hide(); }
});

【讨论】:

  • .fadeOut 不会产生平滑的动画效果(至少对我而言)。
  • 这很奇怪。从理论上讲,它应该完全按照您的描述进行。为我的答案添加了一个替代方案,试试看它是否表现得更流畅。
  • 这对我来说似乎也很奇怪,但这至少在 Mac 上的 Firefox 和 Chrome 中不会产生动画效果。
  • 看起来这里的持续时间实际上是延迟时间。因为当我增加它时,它只会在 div 消失之前延迟,没有动画。
  • @KostseiKuolematon 我可能已经找到了:在opacity 上检查!important 规则的CSS 或内联样式。示例:jsfiddle.net/rGfGG
猜你喜欢
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多