Ich bin mir der vielen Fragen hier zu Stack Overflow ähnlich, die alle gelöst werden, indem visibility:hidden
anstelle der display:none
Eigenschaft verwendet wird. Das Problem, das ich habe, ist, denke ich, dass ich display:none
verwenden muss, weil ich den Raum des divs füllen muss, das mit einem alternativen div versteckt wird, visibility:hidden
würde gerade diesen Raum behalten, während er es unsichtbar macht.Wie man ein Element sanft einblendet/ausblendet, nachdem man ihm eine Anzeige gegeben hat: kein Wert
MEIN ZIEL: Nachdem die Schaltfläche + geklickt wurde, wird das Element nav
korrekt ausgeblendet. Nach dieser Animation habe ich eine JavaScript-Zeile, die 500 Millisekunden zählt und dann dem verblassten div eine Klasse gibt, die display:none
enthält.
Das Problem ist, wenn die jetzt - Schaltfläche geklickt wird, gebe ich das Element wieder seine display:block
Eigenschaft und entfernen Sie die Klasse, die sie ihre Unschärfe/Fade-Effekt gab. Aber statt eines schönen Überganges, erscheint das Element sofort auf dem Bildschirm. Keine Animation.
Ich bin ratlos, wie Sie dies beheben können, während Sie weiterhin die display:none
-Eigenschaft verwenden. Danke für die Hilfe und ich benutze keine Bibliotheken wie jQuery, nur Plain Vanilla Javascript.
var expand = document.getElementById("expansion");
function removeElm() {
"use strict";
document.querySelector("nav").classList.add("removed");
document.querySelector("#description").classList.remove("removed");
}
function expandF() {
"use strict";
var navLi = document.querySelectorAll("li"), i;
if (!document.querySelector("nav").classList.contains("out")) {
document.querySelector("nav").classList.add("out");
document.querySelector("body").style.background = "#dff";
document.getElementById("expansion").innerHTML = "-";
document.getElementById("expansion").style.background = "#f00";
for (i = 0; i < navLi.length; i++) {
navLi[i].classList.add("rsHover");
}
setTimeout(removeElm, 500);
} else {
document.querySelector("nav").classList.remove("removed");
document.querySelector("#description").classList.add("removed");
document.querySelector("nav").classList.remove("out");
document.querySelector("body").style.background = "#fff";
document.getElementById("expansion").innerHTML = "+";
document.getElementById("expansion").style.background = "#222";
for (i = 0; i < navLi.length; i++) {
navLi[i].classList.remove("rsHover");
}
}
}
expand.addEventListener("click", expandF);
/*///////////////////////////////// __NAV__ /////////////////////////////////*/
nav {
display: inline-block; position: relative; top: 50%; right: 19px;
-webkit-transform: translateY(-50%); transform: translateY(-50%); margin: auto
}
nav ul:after { content: ""; display: block; clear: both } /* << clearfix */
nav ul { font-size: 100%; text-transform: uppercase; margin: 0; padding: 0 }
nav li { width: 150px; height: 150px; list-style: none; float: left; margin: 5px}
nav li:hover { background: #055; color: #eee; cursor:pointer }
nav span {
display: block; position: relative; top: 50%; -webkit-transform: translateY(-50%);
transform: translateY(-50%)
}
/*///////////////////////////////// SECTION /////////////////////////////////*/
#description {
display: inline-block; position: relative; top: 50%; right: 19px;
-webkit-transform: translateY(-50%); transform: translateY(-50%); margin: auto
}
/*///////////////////////////////// _MISC__ /////////////////////////////////*/
.removed { display: none !important }
.rsHover:hover { background: #dff }
.out {
-webkit-filter: blur(60px); filter: blur(60px); color: #fff;
-webkit-transform: scale(0.1, 0.9); transform: scale(0.1, 0.9);
-webkit-transform: translateY(-50%); transform: translateY(-50%); font-size: 110%;
}
/*///////////////////////////////// _ANIM__ /////////////////////////////////*/
body{ -webkit-transition:2s ease; transition:2s ease }
nav{
-webkit-transition:color 1s ease, -webkit-filter 1s ease, -webkit-transform 1s ease;
transition:color 1s ease, -webkit-filter 1s ease, -webkit-transform 1s ease;
transition:filter 1s ease, color 1s ease, transform 1s ease;
transition:filter 1s ease, color 1s ease, transform 1s ease, -webkit-filter 1s ease,
-webkit-transform 1s ease;
}
<head>
<style>
html,body { height: 100%; text-align: center; color: #222; margin: 0 }
#expansion {
float:left; position: relative; top: 50%; -webkit-transform: translateY(-50%);
transform: translateY(-50%); width: 28px; height: 28px; padding: 5px;
margin: auto; color: #666; font-size: 150%
}
#expansion:hover { background: #222; color: #eee; cursor:pointer; }
</style>
</head>
<body>
<div id="expansion">+</div>
<nav>
<ul>
<li><span>one</span>
</li>
<li><span>two</span>
</li>
</ul>
</nav>
<section id="description" class="removed">
<h1>about web</h1>
<p>
WEB is a reference of...
</p>
</section>
</body>
Bitte bearbeiten oder bearbeiten Sie mein Code-Snippet. Ich bin mir nicht sicher, was genau du sagst. –
@inspectrum Wenn Sie das Element wiederherstellen möchten, setzen Sie 'display: block', greifen Sie auf die Eigenschaft' .currentHeight' des Elements zu und wenden Sie dann alle Stile/Klassen an, zu denen das Element wechseln soll. – lerouche
Ich nahm Ihren Vorschlag, aber leider hat es mein Problem immer noch nicht behoben. Schauen Sie sich dieses Jsfiddle an: https://jsfiddle.net/6tynhyur/. Habe ich es richtig umgesetzt? (Kommentiert, wo ich Ihren Code hinzugefügt habe) –