【问题标题】:css transition with javascript has no transition使用 javascript 的 css 过渡没有过渡
【发布时间】:2013-07-01 07:37:16
【问题描述】:

当我尝试使用纯 CSS 进行简单过渡时,一切正常。
但是,当我尝试调用一个在单击链接时修改 CSS 的 javascript 函数时,没有过渡。我想淡入灰色层。

HTML:

<a href="someImage.jpg" id="test">
    <img src="someImage.jpg" alt="" />
</a>
<section id="grey"> 
</section>

JS:

var grey = document.getElementById("grey");
var link = document.getElementById("test");
link.onclick = function () {
    grey.style.display = "block";
    grey.style.opacity = "1";
    return false;
};

CSS:

section {
    display:none;
    size and position...
    opacity: 0;
    background-color: rgba(0,0,0,0.5);
    transition: opacity 1s .5s;
}

(见http://jsfiddle.net/7zEhx/5/

我用的是FF22,有谁知道解决办法吗?

【问题讨论】:

    标签: javascript css css-transitions transitions


    【解决方案1】:

    display: none 元素不会转换,display: block 在您设置其他样式之前还没有启动。有这样可怕的黑客攻击:

    setTimeout(function() {
        grey.style.opacity = "1";
    }, 0);
    

    但我只是将width 设置为0,而不是设置display,然后将其放回100%
    Updated jsFiddle

    【讨论】:

    • 为什么这个hack有效?似乎它只是立即设置不透明度。
    • @raam86:将0 传递给setTimeout 使其等待直到所有同步完成,因为JavaScript 是单线程的。
    • 这实际上是一个不错的 hack。
    • 感谢您的回答。使用宽度是一个非常简单的解决方案,但我就是想不出来。但是我认为在我的情况下使用你的“hack”更容易。我发现的一件事是 setTimeout(..., 0) 并不总是有效,尤其是当我更改包含许多其他元素的一个元素的显示时。如果我使用更高的超时时间,它会更可靠,但它仍然不令人满意。
    猜你喜欢
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    相关资源
    最近更新 更多