gifのような写真のループスライドショーを表示したいとします。現在の結果はこのURLに表示されます:https://figuredevices.com。React.jsの写真のスライドショーでのパフォーマンスの問題
我々の現在のアプローチは、スライドを表示または非表示に不透明度を使用している:
class SlideShow extends React.Component {
constructor(props, context) {
super(props);
this.state = {
currentSlide: 0
};
this.interval = null;
}
componentDidMount() {
this.interval = setInterval(this.transitionToNextSlide.bind(this), 200);
}
componentWillUnmount(){
if(this.interval){
clearInterval(this.interval);
}
}
transitionToNextSlide() {
let nextSlide = this.state.currentSlide + 1;
if (nextSlide == this.props.slides.length) {
nextSlide = 0;
}
this.setState({currentSlide: nextSlide});
}
render() {
let slides = this.props.pictures.map((picture, idx) => {
let slideContainerStyle = {
opacity: this.state.currentSlide == idx ? 1 : 0
};
return(
<div style={slideContainerStyle} key={idx}>
<Slide picture={picture}/>
</div>
);
})
let containerStyle = {
width:'100%'
};
return (
<div style={containerStyle}>
{slides}
</div>
);
}
};
写真はthis.props.picture
に5で5ロードされます。画像の数は限定されていないので、この数が増えるにつれてパフォーマンスが心配です。 renderメソッドで
- マップ操作は、すべての200msのは2つのだけのCSSプロパティを変更するには、配列全体を横断している:右私には感じていない2つのものがあります。
- DOMのサイズがたくさん成長しているが、ノードのほとんどは
を隠されていますが、多分animationまたはreact-motionを使用して、より良いアプローチを提案しますか?
理由だけではなく、すべては200msを単一 'を'持っていると 'picture'小道具を更新していませんか? –
Aaron
不透明度を維持したい場合は、2つのスライドが必要です。アニメーション「<次のスライド= {isNext} />」をターゲットにするための 'next'の小道具と、@Aaronがそれに応じて小道具を変更すると言った。 – azium
私は不透明度フェードが見えませんでしたが、もしあなたが遷移を望むなら、 'ReactCSSTransitionGroup'を使用し、' 'を現在のピクチャに置き換えることができます。 –
Aaron