使用 CSS 动画进出

Posted

技术标签:

【中文标题】使用 CSS 动画进出【英文标题】:Animating In and Out with CSS 【发布时间】:2018-08-15 18:19:32 【问题描述】:

我有一个菜单,一旦按下使用 Glamour for CSS 的汉堡图标,就会显示在当前页面的顶部。

菜单从屏幕右侧进入动画并且完美运行,但是一旦按下菜单中的任何位置,我就很难让它动画出来。

动画已编写 (animateOut),但我需要代码方面的帮助,以便根据点击在动画进出之间轻弹:

点击了汉堡菜单 -> 菜单从右侧滑入。 单击菜单容器中的任意位置 -> 菜单向右滑出。

HamburgerMenu.js

CSS

const cssHamburgerMenuIcon = css(
    position: 'absolute',
    height: 20,
    width: 20,
    right: 20,
    marginTop: 20,
)

const animateIn = css.keyframes( 
    '0%': 
        transform: 'translateX(100%)'
    ,
    '100%': 
        transform: 'translateX(0%)'
    
)

const animateOut = css.keyframes( 
    '0%': 
        transform: 'translateX(0%)'
    ,
    '100%': 
        transform: 'translateX(100%)'
    
)

const cssHamburgerMenu = css(
    display: 'flex',
    position: 'absolute',
    flexDirection: 'column',
    height: '100%',
    width: 250,
    right: 0,
    top: 0,
    zIndex: 1,
    color: 'white',
    backgroundColor: hamburgerGrey,
    fontFamily: 'Century Gothic',
    fontSize: '19px',
    // animation
    animation: `$animateIn 0.5s`,
)

const cssHamburgerList = css(
    listStyleType: 'none',
    lineHeight: '47px',
)

const cssHamburgerListItem = css(

)

“代码”

class HamburgerMenu extends Component 
    constructor(props) 
    super(props)
    this.state = 
        menuVisible: false,
    


    render() 
        const menuVisible = this.state.menuVisible

        return(
            menuVisible ?
            <div className=cssHamburgerMenu onClick=() =>this.setState( menuVisible: false )>              
                <ul className=cssHamburgerList>
                    <li className=cssHamburgerListItem>Home</li>
                    <li className=cssHamburgerListItem>News</li>
                    <li className=cssHamburgerListItem>About us</li>
                    <li className=cssHamburgerListItem>More</li>
                </ul>
            </div>
            : (
            <img 
                className=cssHamburgerMenuIcon
                src=HamburgerMenuIcon
                onClick=() => this.setState( menuVisible: true)
                
            />  
            )
        )
    
   

export default HamburgerMenu

【问题讨论】:

值得关注github.com/reactjs/react-transition-group,因为它将元素保留在 DOM 中,以便它们在卸载时可以动画出来。 【参考方案1】:

我建议另一种方法:

    将菜单的默认 translateX 设置为 100%

    创建一个将 translateX 设置为 0% 的类(即打开)

    将菜单的transition属性设置为“transition: all 0.5s ease-in-out;”

    只需在需要打开/关闭菜单时添加或删除(打开)类

【讨论】:

除了使用transition: transform 0.6s ease-out;(没有区别,只是个人风格),这正是我将如何处理这个问题。

以上是关于使用 CSS 动画进出的主要内容,如果未能解决你的问题,请参考以下文章

在 jQuery 中与 CSS 中的过渡同时使用淡入淡出和淡出

Win10系列:JavaScript动画3

每日一问之activity的进出动画

UIViewControllerAnimatedTransitioning 在动画进出视图时显示黑屏

javascript 进出方形动画

CSS3 过渡延迟,进出不同时间