美文网首页
QueueAnim动态效果

QueueAnim动态效果

作者: 壹豪 | 来源:发表于2018-07-27 18:27 被阅读0次

       QueueAnime动态效果组件,默认动画时间是450ms,如果在450ms动画内连续删除,那么被连续删除的组件再次呈现时不会呈现动态效果,因此要做一个定时器,使得删除时间要大于duration属性时间 (默认是450ms)


/**点击增加查询和删除查询事件的定时器time**/
let time1 = 0;
let time2 = 0;

/**全局提示*start*/
const infoTop = '条件已达上限!';
const infoButtom = '不能再删了!';
/**全局提示*end*/

/**主组件*start*/
export default class App extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
        /**num是当前选择的输入框div**/
        num: 0,
        /**show决定输入框是否显示**/
        show: [false, false, false, false],
        }

    /**删除按钮点击事件  **start**/
    btnClick = () => {
        /**设定计时器以免删除过快导致特效无法再次显示**/
        if (time1 === 0) {
            time1 = 1; //设定间隔时间(秒)
            /**点击删除方法 *start*/
            let show = this.state.show;
            let num = this.state.num;
            if (num < 1) {
                message.info(infoButtom);
            }
            else {
                show[num - 1] = !this.state.show[num - 1];
                this.setState({
                    show: show,
                    num: num - 1,
                })
            }
            /**点击删除方法 *end*/
                //启动计时器,倒计时time秒后自动关闭计时器。
                //在此时间内再次点击无效
            let index = setInterval(()=>{
                    time1--;
                    if (time1 === 0) {
                        clearInterval(index);
                    }
                }, 350);
        }
    }
    /**删除按钮点击事件  **end**/

    /**Button点击事件,让第二到第八个输入框依次显示  **start**/
    handleClick = () => {
        /**设定计时器以和删除事件配合**/
        if (time2 === 0) {
            time2 = 1; //设定间隔时间(秒)
            /**点击增加方法 *start*/
            let show = this.state.show;
            let num = this.state.num;
            if (num > 6) {
                message.info(infoTop);
            }
            else {
                show[num] = !this.state.show[num];
                this.setState({
                    num: num + 1,
                    show: show,
                })
            }
            /**点击增加方法 *end*/
                //启动计时器,倒计时time秒后自动关闭计时器。
                //在此时间内再次点击无效
            let index = setInterval(()=>{
                    time2--;
                    if (time2 === 0) {
                        clearInterval(index);
                    }

                }, 350);
        }
    };
    /**Button点击事件,让第二到第八个输入框依次显示  **end**/
    
    render() {
        return (
        <QueueAnim className="demo-content" duration={350}>
            {/**show的值为true时显示MulSelect,为false时显示null,初始为false,受button控制**/}
            {this.state.show[0]?
                <button 
                    key="a" 
                    className="btn" 
                    shape="circle" 
                    onClick={this.btnClick}
                />: null}
            {this.state.show[1]?
                <button 
                    key="b" 
                    className="btn" 
                    shape="circle" 
                    onClick={this.btnClick}
                />: null}
            {this.state.show[2]?
                <button 
                    key="c" 
                    className="btn" 
                    shape="circle" 
                    onClick={this.btnClick}
                />: null}
            {this.state.show[3]?
                <button 
                    key="d" 
                    className="btn" 
                    shape="circle" 
                    onClick={this.btnClick}
                />: null}
                </QueueAnim>
        <div className="btn">
            {/**button调用handleClick来控制show的值**/}
            <button onClick={this.handleClick}>增加</button>
        </div>
    )}
}

相关文章

网友评论

      本文标题:QueueAnim动态效果

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