通过 CSS 过渡淡入无法正常工作

Iva*_*lov 5 javascript css

我正在尝试在属性上animate使用 CSS 的页面元素。淡出可以正常工作,但淡入则不行。我究竟做错了什么?transitionopacity

有些事实确实很奇怪

  • 如果不使用.no-display类,一切都会按预期工作(但我应该使用它)。
  • 在浏览器控制台中重播函数的命令确实可以按预期工作(但函数不能)。

代码:

超文本标记语言

<p><a href="javascript:fadeIn()">Fade in</a></p>
<p><a href="javascript:fadeOut()">Fade out</a></p>
<div class="no-display invisible" id="square"></div>
Run Code Online (Sandbox Code Playgroud)

CSS

.no-display {
    display: none;
}

.invisible {
    opacity: 0;
}

#square {
    width: 500px;
    height: 500px;
    background-color: red;
    border: 1px solid black;

    -webkit-transition: opacity 2s ease;
    -moz-transition: opacity 2s ease;
    -ms-transition: opacity 2s ease;
    -o-transition: opacity 2s ease;
    transition: opacity 2s ease;
}
Run Code Online (Sandbox Code Playgroud)

JavaScript

function fadeIn() {
    square.classList.remove("no-display");
    square.classList.remove("invisible");
}

function fadeOut() { 
    square.classList.add("invisible");
    setTimeout(function() { square.classList.add("no-display"); }, 2000 );
}
Run Code Online (Sandbox Code Playgroud)

或者: http: //jsfiddle.net/V2Sar/6/

注意,我不能使用任何框架,例如 jQuery。我必须只使用纯 JavaScript。

xec*_*xec 2

使用 JS 触发 CSS 转换的简单方法是切换类名,而最简单的方法是通过classList API

js

var square = document.getElementById("square");
function fadeIn() {
    square.classList.remove("invisible");
}

function fadeOut() { 
    square.classList.add("invisible");
}
Run Code Online (Sandbox Code Playgroud)

CSS

#square {
    opacity: 1;
    transition: opacity 2s ease;
}
#square.invisible {
    opacity: 0;
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/V2Sar/5/

另外,请确保您的脚本位于 的末尾,<body>这样您就不必担心 DOM 是否已构建(jsfiddle 中的单独选项)。

浏览器支持不是很好(IE9 不支持),但是https://github.com/eligrey/classList.js上有一个垫片可用

如果这对您来说还不够好,请告诉我,我也会发布一些替代方案。