質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

0回答

920閲覧

Reactでコンポーネント切り替えにアニメーションを追加したい

k10a

総合スコア35

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2018/09/16 02:44

前回、こちらの質問で配列の表示方法につきまして質問させていただいたのですが、コンポーネントの表示を切り替える際にアニメーションを追加したいです。
左右移動するときに、ふわっと切り替えるopacityのアニメーションなど、切り替えているような雰囲気が出したいです。

画像を切り替える際に、コンポーネント間での変化となるため、どのようにすれば設定すれば良いのかがわからず困っています。

Thumbnail.js

JavaScript

1const Thumbnails = ({mainImageIndex, imageUrls}) => { 2 const thumbs = [...Array(imageUrls.length-1)].map((_, i) => 3 <div key={i}> 4 <img src={imageUrls[(mainImageIndex + i + 1) % imageUrls.length]} /> 5 </div> 6 ); 7 8 return <div className="thumbs">{thumbs}</div>; 9}; 10 11class App extends React.Component { 12 constructor(props) { 13 super(props); 14 15 this.imageUrls = [ 16 'https://dummyimage.com/360x240/f29b91/fff&text=1', 17 'https://dummyimage.com/360x240/efbd40/fff&text=2', 18 'https://dummyimage.com/360x240/81d654/fff&text=3', 19 'https://dummyimage.com/360x240/f092c4/fff&text=4', 20 ]; 21 22 this.onArrowClicked = this.onArrowClicked.bind(this); 23 24 this.state = { 25 mainImageIndex: 0 26 }; 27 } 28 29 onArrowClicked(direction) { 30 return () => { 31 let index = this.state.mainImageIndex; 32 switch(direction) { 33 case 'next': 34 index = (index + 1) % this.imageUrls.length; 35 break; 36 case 'prev': 37 index = index > 0 ? index - 1 : this.imageUrls.length - 1; 38 break; 39 } 40 this.setState({ mainImageIndex: index }); 41 }; 42 } 43 44 render() { 45 return ( 46 <div className="app"> 47 <div className="main-image"> 48 <div onClick={this.onArrowClicked('prev')}><i className="fas fa-arrow-left fa-4x"></i></div> 49 <div><img src={this.imageUrls[this.state.mainImageIndex]}/></div> 50 <div onClick={this.onArrowClicked('next')}><i className="fas fa-arrow-right fa-4x"></i></div> 51 </div> 52 <Thumbnails mainImageIndex={this.state.mainImageIndex} imageUrls={this.imageUrls} /> 53 </div> 54 ); 55 } 56} 57 58ReactDOM.render(<App />, document.querySelector("#app"))

初心者的な質問で恐縮ですが、どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問