reactjs:在每个模块下定位提示内容展示,三秒后消失

import React, { Component } from 'react';
import classnames from 'classnames';

import './index.scss';

export class TipPopup extends Component {
    static propTypes: {
        content: PropTypes.string.isRequired,
        theme: PropTypes.string.isRequired,
        isShow: PropTypes.bool,
        interval: PropTypes.number,
        callbackParent: PropTypes.func,
    };

    constructor(props) {
        super(props);
        this.state = {
            isShow: this.props.isShow,
        };
    }

    componentWillMount() {
        this.openChangePopupTimer();
    }

    componentWillReceiveProps(nextProps) {
        const { isShow } = nextProps;
        this.setState({
            isShow: isShow,
        });
        if (isShow) {
            this.openChangePopupTimer();
            this.props.callbackParent();
        }
    }

    openChangePopupTimer(props) {
        const { interval } = this.props;
        if (this.timer) {
            clearTimeout(this.timer);
        }
        this.timer = setTimeout(() => {
            this.setState({
                isShow: false,
            });
        }, interval);
    }

    render() {
        const { content, theme } = this.props;
        const { isShow } = this.state;
        const className = classnames('tip-popup', this.props.className, {
            [`tip-popup-${theme}`]: theme,
            'tip-popup-hidden': !isShow,
        });
        const iconClassName = classnames('icon', {
            [`${theme}-icon`]: theme,
        });
        return (
            <div className={className}>
                <div className={iconClassName} />
                {content}
            </div>
        );
    }
}

TipPopup.defaultProps = {
    isShow: false,
    interval: 3000,
};






@charset 'utf-8';

@import "components/index";

.tip-popup {
    position: absolute;
    top: 0px;
    left: 0px;
    line-height: 16px;
    text-align: left;
    z-index: 2;

    &.tip-popup-success {
        width: 150px;
        padding: 6px 15px 6px 40px;
        line-height: 20px;
        color: $primary-color;
        background-color: $light;
        border: 1px solid $gray-lighter;
    }

    &.tip-popup-info {
        display: inline-block;
        max-width: 280px;
        padding: 6px 10px;
        color: #fd8436;
        background-color: $light;
        border: 1px solid $line-color;
    }

    &.tip-popup-warning {
        display: inline-block;
        max-width: 230px;
        padding: 7px 14px 7px 37px;
        color: #fd8436;
        background-color: $light;
        border: 1px solid $gray-lighter;
    }

    &.tip-popup-hidden {
        display: none;
    }

    .icon {
        position: absolute;
    }

    .success-icon {
        top: 10px;
        left: 18px;
        width: 15px;
        height: 11px;
        background: url("./success.png") 0 0 no-repeat;
    }

    .info-icon {
        top: -8px;
        right: 16px;
        width: 15px;
        height: 9px;
        background: url("./tip.png") 0 0 no-repeat;
    }

    .warning-icon {
        top: 7px;
        left: 12px;
        width: 18px;
        height: 16px;
        background: url("./error.png") 0 0 no-repeat;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值