UNPKG

react_toast_horse

Version:

react toast 消息提示

111 lines (99 loc) 3.14 kB
/* * 弹出提示语 * @param content 内容 * @param hideSec 显示的时间(毫秒) * @param onHide 隐藏后回调函数 * @param maskDisplay 遮罩层是否显示,默认是显示 */ import React from 'react'; import ActUtil from 'ActUtil'; require("./css/toast.css"); var maskClick=false; var secTimer; //回调函数定时器 var msgToken=""; //message token class Toast extends React.Component{ constructor(props){ super(props); this.state={ toastDisplay:false, maskDisplay:false, content:"", hideSec:3000,//默认3000毫秒 layerMarginLeft:"0px", layerMarginTop:"0px", isShow:false, //触发显示(第一次加载不显示) onHide:function(){} }; }; componentDidMount(){ msgToken = ActUtil.pubsub.subscribe("toast",(topic,toastParams)=>{ var maskDisplay=toastParams.maskDisplay; if(maskDisplay!=false && !maskDisplay){ maskDisplay=true; } this.setState({ toastDisplay:true, maskDisplay:maskDisplay, content:toastParams.content, hideSec:toastParams.hideSec?toastParams.hideSec:3000, isShow:true, onHide:toastParams.onHide?toastParams.onHide:function(){} }); }); }; componentDidUpdate(){ if(!this.state.isShow){ return; } this.locationToast(); this.setHideSec(); }; componentWillUnmount(){ ActUtil.pubsub.off("toast",msgToken); }; //定位弹出层 locationToast(){ var toastEl=document.getElementById("ui-view-toast"); var height=toastEl.offsetHeight; var width=toastEl.offsetWidth; //console.log("height="+height+",width="+width); this.setState({ layerMarginTop:-(parseInt(height)/2)+"px", layerMarginLeft:-(parseInt(width)/2)+"px", isShow:false }); }; //设置显示多少毫秒 setHideSec(){ var _this=this; secTimer = setTimeout(function(){ _this.setState({ toastDisplay:false, isShow:false }); _this.state.onHide(); },this.state.hideSec); }; //隐藏 toast maskClickToHideToastHandler(){ this.setState({ toastDisplay:false }); clearTimeout(secTimer); this.state.onHide(); }; render() { return ( <div className="ui-toast" style={{display:this.state.toastDisplay?"block":"none"}}> <div className="ui-mask" style={{display:this.state.maskDisplay?"block":"none",height:ActUtil.getScrollHeight()+"px"}} onClick={(event)=>this.maskClickToHideToastHandler(event)}> </div> <div className="ui-layer" id="ui-view-toast" style={{marginLeft:this.state.layerMarginLeft,marginTop:this.state.layerMarginTop}}> <div className="ui-layer-padding"> {this.state.content} </div> </div> </div> ); }; }; export default Toast;