美文网首页
记录一个小点react+antd:支持css3的transiti

记录一个小点react+antd:支持css3的transiti

作者: 梦想成真213 | 来源:发表于2018-06-01 16:18 被阅读0次

    记录的原因:项目中遇到一个问题,使用antdtable组件,在鼠标悬停到一行的时候显示或者隐藏按钮,如下:
    鼠标进入一行显示设为默认按钮,移出隐藏按钮

    开始我的做法是找到table组件的属性通过setState来改变buttonvisibility属性,虽然效果是达到了,但是显示和隐藏有个时间的延迟,开始我以为是因为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属性可以动画

    相关文章

      网友评论

          本文标题:记录一个小点react+antd:支持css3的transiti

          本文链接:https://www.haomeiwen.com/subject/pqrksftx.html