使用React创建Page-Loading(过渡页面)
Introduction项目已开源可以在Github上下载查看 结构介绍通常有两种方法去实现Page的切换过渡效果,一种是常用的是通过addClass和removeClass来对Class进行操作,Class对应的CSS,从而实现效果,还有一种方法是Inline Style,对React来讲是一种很不错的方法直接修改CSS,从而实现各种效果,因为习惯问题暂时使用前者 1.加载页面 2.主页面 代码实现1.直接render的页面(为了方便没有继续分成相应的组件) var Main = React.createClass({
getInitialState() {
return{
demo : " ",container : "ip-container loading"
};
},componentDidMount() {
this._startLoading();
},render() {
return (
<div className={this.state.demo}>
<div id="ip-container" className={this.state.container}>
<header className="ip-header">
<h1 className="ip-logo">
<svg className="ip-inner" width="100%" height="100%" viewBox="0 0 300 160" preserveAspectRatio="xMidYMin meet" aria-labelledby="logo_title">
<title id="logo_title">Delightful Demonstrations by Codrops</title>
</svg>
</h1>
<div className="ip-loader">
<svg className="ip-inner" width="60px" height="60px" viewBox="0 0 80 80">
<path className="ip-loader-circlebg" d="M40,10C57.351,10,71,23.649,40.5S57.351,40.5,71 S10,57.351,40.5S23.649,10z"/>
<path ref="ipLoaderCircle" className="ip-loader-circle" d="M40,10z"/>
</svg>
</div>
</header>
<div className="ip-main">
<nav className="codrops-demos">
<a className="current-demo" href="index.html">Demo 1</a>
<a href="index2.html">Demo 2</a>
</nav>
<h2>Make yourself at home.</h2>
<div className="browser clearfix">
<div className="box">
<span className="icon-bell"></span>
<p>Do Re Mi What Fa Si Ti Doi Nemo Do Re Mi What Fa Si Ti Doi Nemo</p>
</div>
<div className="box">
<span className="icon-heart"></span>
<p>E La Yo Na Ti Do Pa Pa Noah Do Re Mi What Fa Si Ti Doi Nemo</p>
</div>
<div className="box">
<span className="icon-cog"></span>
<p>No way! Hey Hey,me ok! Do Re Mi What Fa Si Ti Doi Nemo</p>
</div>
</div>
</div>
</div>
</div>
);
},});
2.Loadier的Loading时的效果 _startLoading() {
var circle = React.findDOMNode(this.refs.ipLoaderCircle);
var progress = 0;
let self = this;
circle.style.strokeDasharray = circle.style.strokeDashoffset = circle.getTotalLength();
var interval = setInterval(function(){
progress = Math.min( progress + Math.random() * 0.1,1 );
circle.style.strokeDashoffset = circle.getTotalLength() * ( 1 - progress );
if ( progress === 1 ) {
clearInterval( interval );
self._changClass();
};
},80);
},
3.Loader完成后Loaded _changClass() {
this.setState({
demo : "layout-switch",container : "ip-container loaded"
});
console.log("ok");
}
总结使用React实现并不复杂,只要思路清晰,但是如果要将其组件化并且真正的用到项目中就考虑到很多的因素,单纯的实现是不行的,应为没有使用Inline Style所以很多工作都还是在CSS中去实现的,详细的查看CSS文件你将会学得到更多,附一张CSS实现手稿 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
