在最初隐藏li标签时,如何使用react或CSS淡入?我有代码,因此显示了ul,而当鼠标悬停在ul上时,li出现了。但是,如何让li像在JQuery中一样进行动画制作?
import React, { Component } from 'react';
class SideBar extends Component {
state = {
activeItem: ''
};
mouseOver = () => {
console.log('in');
this.setState({activeItem: 'collapsed' });
};
mouseOut = () => {
console.log('out');
this.setState({activeItem: '' });
};
render() {
const { activeItem, hovering } = this.state;
return(
<header className="main-header">
<div className="main-header-frame">
<div className="header-wrapper">
<ul>
<li>
<a onMouseLeave={this.mouseOut} onMouseOver={this.mouseOver} href='/test'>Test1</a>
<ul className={activeItem === "collapsed" ? 'display' : 'disappear'}>
<li>t1</li>
<li>t2</li>
</ul>
</li>
</ul>
</nav>
</div>
</div>
</header>
)
}
};
export default SideBar;
我的CSS如下:
.disappear {
border: 1px solid red;
display: none;
transition: all 1.6s ease-in-out;
-webkit-transition: all 1.6s ease-in-out;
-moz-transition: all 1.6s ease-in-out;
-o-transition: all 1.6s ease-in-out;
transition-delay: .4s;
}
答案 0 :(得分:0)
CSS代码中缺少一些内容,
.disappear {
border: 1px solid red;
display: none;
transition: all 1.6s ease-in-out;
-webkit-transition: all 1.6s ease-in-out;
-moz-transition: all 1.6s ease-in-out;
-o-transition: all 1.6s ease-in-out;
transition-delay: .4s;
}
您试图使用display:none隐藏/显示,显示不是“可动画的”属性。相反,您可以使用不透明度。在此处详细了解可以设置动画的属性:https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties
另外,在更改不透明度属性之前,还需要在li元素上应用过渡和过渡延迟。
更好的方法是:
li {
transition: all 1.6s ease-in-out; //Add transition on the element regardless of display status
}
.disappear {
opacity: 0; // Change opacity to 0 when it hides
}
现在,如果一个元素的不透明度为0,它将从屏幕上消失,但是您希望它折叠起来,相反,您还需要将高度更改为0,以使该元素实际消失。选中此codepen
动画高度不是最好的选择,因为更改高度会导致浏览器重新计算位置,并且动画会出现抖动。相反,您需要为变换和不透明度设置动画。详细了解高效能动画here