记录的原因:项目中遇到一个问题,使用antd
的table
组件,在鼠标悬停到一行的时候显示或者隐藏按钮,如下:
鼠标进入一行显示设为默认按钮,移出隐藏按钮:
开始我的做法是找到table
组件的属性通过setState
来改变button
的visibility
属性,虽然效果是达到了,但是显示和隐藏有个时间的延迟,开始我以为是因为setState
的异步机制,会在频繁的设置state
的时候合并处理导致的,
<Table
onRowMouseEnter={() => {
this.setState({
isShow:true
});
}}
onRowMouseLeave={() => {
this.setState({
isShow:false
});
}}
/>
后来实验之后发现并不是,于是我就不用setState
的来设置显示和隐藏,直接给tr加上类名,通过hover
来显示隐藏
<Table
rowClassName={() => {
return "tempalte-tr";
}}
/>
.tempalte-tr .template-setDefault{
visibility: hidden;
}
.tempalte-tr:hover .template-setDefault{
visibility: visible;
}
这样实验之后发现同样的问题依然存在,后来想到display跟visibility的区别:一个是占位一个不占位,于是改成display来做,果然达到效果,鼠标一进一出是立刻显示和隐藏的。
.tempalte-tr .template-setDefault{
display: none;
}
.tempalte-tr:hover .template-setDefault{
display: inline-block;
}
仔细一想为什么会有这个不同呢,display跟visibility的区别不就是占位不占位么,为什么一个有动画一个没有动画呢,antd对button组件确实做了动画设置:
.ant-btn {
display: inline-block;
margin-bottom: 0;
font-weight: 500;
text-align: center;
-ms-touch-action: manipulation;
touch-action: manipulation;
cursor: pointer;
background-image: none;
border: 1px solid transparent;
white-space: nowrap;
line-height: 1.15;
padding: 0 15px;
font-size: 14px;
border-radius: 0;
height: 28px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
transition: all .3s cubic-bezier(.645,.045,.355,1);
position: relative;
color: #576077;
background-color: #fff;
border-color: #d9d9d9;
}
接着我就去mdn上
搜索关于transition
动画到底对哪些css
属性有效果呢,果不其然,display
是没有动画效果的,而visibility
是有动画效果的,
链接如下:https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_animated_properties
又学到一个点啊,由此记录一下:)
参考:https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions#哪些CSS属性可以动画
网友评论