创建一个在react中工作的加载动画
Create a loading animation that works in react
Fiddle
var Hello = React.createClass({
getInitialState: function() {
return {
gridIsLoaded: true
}
},
animate(self) {
console.log('animating...');
$('#loadingDiv').animate({'opacity': '0'}, 500, function(){
$('#loadingDiv').animate({'opacity': '.5'}, 500, function(){
$('#loadingDiv').animate({'opacity': '1'}, 500, function(){
//if(!self.state.gridIsLoaded){
self.animate();
//}
});
});
});
},
getData() {
console.log('getData called.');
var artificialTimeout = 5000;
var self = this;
self.animate(self);
$.ajax({
url:'/echo/js/?js=hello%20world!',
complete: function (response) {
console.log(response.responseText);
setTimeout(function() {
self.setState({gridIsLoaded: true});
}, artificialTimeout);
},
error: function () {
console.log('there was an error!');
self.setState({gridIsLoaded: true});
},
});
return false;
},
handleClick(){
console.log('handleClick');
this.getData();
this.setState({gridIsLoaded: false});
},
render: function() {
var loadingJsx;
if (!this.state.gridIsLoaded) {
loadingJsx = (
<div id="loadingDiv" style={{ position:'relative', 'width': '100%', 'textAlign': 'center'}} className="text-center">
Loading... please wait
</div>);
};
return <div>
{loadingJsx}
<div>
<input type="button" value="Submit" onClick={this.handleClick} />
</div>
</div>;
}
});
ReactDOM.render(
<Hello name="World" />,
document.getElementById('container')
);
当我点击提交时,上面写着"正在加载,请稍候…"。我希望在显示加载时,不透明度可以设置动画。这是行不通的。然后,如果我再次点击提交,它也会做同样的事情。
我怎样才能使动画发挥作用?
简单的案例外部反应工作。
实现这一点的一种更"反应"的方法是,当你想为元素设置动画时,在元素上切换一个类。因此,在这种情况下,我们可以在网格尚未加载时有条件地应用一个animate类(尽管在这种情况中它是多余的,因为这是它唯一显示的时间)。
loadingJsx = (
<div id="loadingDiv" className={this.state.gridIsLoaded ? 'text-center' : 'text-center animate'}>
Loading... please wait
</div>);
然后,我将css分离出来应用于#loadingDiv.animate,不过另一种方法是切换样式对象。我想你也可以不断更新样式对象的不透明度属性,这更接近你正在做的事情,但它看起来更脏。
#loadingDiv.animate {
opacity: 0;
animation: fadeInOut 1s infinite;
}
@keyframes fadeInOut {
0% { opacity: 0; }
50% { opacity: 1; }
100% { opacity: 0; }
}
更新的fiddle
相关文章:
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript链接在点击时不起作用;函数在页面加载时工作
- jQuery加载的async和ready函数不工作
- Javascript不工作/正在加载
- LokiJS自动加载回拨不工作
- 当加载几个js文件时,defer属性应该如何工作
- 在pjax完成其工作时加载脚本
- Scriptaculous dom:仅加载工作"有时“;
- 为什么动态加载的事件在我的代码中不能正常工作
- 加载Soundcloud嵌入式播放器OnClick在FireFox中不工作
- 我无法在发布页面上加载peoplepicker.js它'正在工作的SitePages
- 异步加载的SVG过滤器feColorMatrix在Chrome中工作,而不是在Safari或Firefox中
- Iframe加载调整大小在Chrome中工作,但不能在IE或Firefox中工作
- 为什么不'加载$(document.ready(function)后,单击“工作”
- Jquery选择选项并获取只工作一次的更改值(页面加载时)
- 使jquery延迟加载插件在视口内工作
- 自动加载的html5播放器不工作
- 如何使它工作加载并一起准备好
- 剑道网格细节模板不工作加载网格再次(第二次)使用ajax表单post(MVC)
- w3C回答不工作加载XML在IE