この記事では、二次リンクを実現するためのReactの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。 jsコード 'react' から { コンポーネント } をインポートします './linkage.less' をインポートします クラス Linkage は Component を拡張します { コンストラクタ(...引数) { super(...引数) // 左側を追加します this.FnButtonList = [] //右側を追加します this.FnContentList = [] // this.ScrollBys = true に切り替える // コンストラクター内で直接実行 --> React は更新されたときにのみレンダリングされます --> componentDidMount は this.init() の取得をトリガーします } 初期化() { this.FnSetButton(20) // 右側にレンダリング this.FnSetContent(20) この状態 = { ボタンリスト: this.FnButtonList、 コンテンツリスト: this.FnContentList、 //下付きボタンリストインデックス: 0, } } コンポーネントマウント() { this.EveryHeight = this.refs['linkage-button-list'].children[0].offsetHeight } // 乱数 FnSetRandom(m, n) { parseInt(Math.random() * (m - n) + n) を返します。 } // 左側のボタンをレンダリングする FnSetButton(n) { (var i = 0; i < n; i++) の場合 { this.FnButtonList.push({ id: `ボタン${i}`, テキスト: `ボタン${i}` }) } } // 正しいコンテンツをレンダリングする FnSetContent(n) { let ContTop = 0; //最初の要素とページの上部の間の距離 let Random = this.FnSetRandom(750, 1400) (i = 0; i < n; i++ とします) { this.FnContentList.push({ 高さ: ランダム、 id: `content${i}`, テキスト: `content${i}`, トップ: ContTop、 }); ContTop += ランダム; } } Fncurrn(インデックス) { (インデックス>3)の場合{ this.refs["linkage-button"].scrollTop = (index - 3) * this.EveryHeight; } (インデックス<= 3)の場合{ this.refs["linkage-button"].scrollTop = 0; } } // クリック FnButtonTab(index) { this.ScrollBys = false this.setState({ ボタンリストインデックス: インデックス }) this.refs["linkage-content"].scrollTop = this.state.ContentList[index].top; //クリックして中央に配置 this.Fncurrn(index) } //右側と左側をスクロールする FnScroll(ev) { this.ContTop = ev.target.scrollTop if (this.ScrollBys) { n = 0とする (i = 0 とします; i < this.state.ContentList.length; i++) { もし ( this.refs["linkage-content"].scrollTop >= this.state.ContentList[i].top ){ //ボックスのスクロール距離が右側のボックス内の要素とページの上部の間の距離よりも大きい場合、n = i; } } this.setState({ ボタンリストインデックス: n }) (Math.abs(n - this.state.ButtonListIndex) === 1)の場合{ this.setState({ ボタンリストインデックス: n }) //中央までスクロールします this.Fncurrn(n) } } this.ContTop == this.state.ContentList[this.state.ButtonListIndex].top) の場合 { this.ScrollBys = true } } 与える() { 戻る ( <div className="リンク"> <div className="リンクボタン" ref="リンクボタン"> <div className="リンクボタンリスト" ref="リンクボタンリスト"> {this.state.ButtonList.map((item, index) => <div キー={アイテムID} className={this.state.ButtonListIndex == index ? 'linkage-button-item ac' : 'linkage-button-item'} onClick={this.FnButtonTab.bind(this, インデックス)} > {アイテムテキスト} </div>)} </div> </div> <div className="link-content" ref="link-content" onScroll={this.FnScroll.bind(this)}> <div className="リンクコンテンツリスト"> {this.state.ContentList.map((item) => <div className="リンクコンテンツ項目" キー={アイテムID} スタイル={{ 高さ: item.height + 'px' }} > <div className="linkage-content-title"> {item.text}</div> </div>)} </div> </div> </div> ) } } デフォルトのリンクをエクスポート cssファイル 体 { マージン: 0; } .linkage { 幅:100vw; 高さ:100vh; ディスプレイ: フレックス; .linkage-button { 幅: 20vw; 高さ:100vh; 背景:チョコレート; テキスト配置: 中央; フォントサイズ: 40px; 色: #fff; オーバーフロー: スクロール; スクロール動作: スムーズ; .linkage-button-list { 幅: 20vw; .linkage-button-item.ac { 背景: 水色; } .linkage-button-item { 幅: 20vw; 高さ: 10vh; 行の高さ: 10vh; } } } .linkage-content { 幅:80vw; 高さ:100vh; スクロール動作: スムーズ; オーバーフロー: スクロール; .linkage-content-list { .linkage-content-item { 幅:80vw; 高さ:100vh; .linkage-content-title { 高さ: 6vh; 行の高さ: 6vh; 幅:80vw; テキスト配置: 中央; 背景:シャルトリューズ; 色: #fff; フォントサイズ: 30px; } } } } } .linkage-button::-webkit-scrollbar { display: none; /* Chrome Safari */ } .linkage-content::-webkit-scrollbar { display: none; /* Chrome Safari */ } 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Gitlab-ci を使用してリモート マシンに継続的にデプロイする方法 (詳細なチュートリアル)
>>: Dockerコンテナにnginxを簡単にデプロイするプロセスの分析
基本的な構文: <input type="hidden" name=&qu...
Neo4j (Nosql の 1 つ) は、高性能なグラフ データベース (分散をサポートしていませ...
目次問題1: 破壊1. 破壊する方法2. いつ破壊するか2.1 解決策1: route.queryを...
背景: MySQL では、レベルに制限がある場合、たとえば、ツリーの最大深度を事前に決定できる場合、...
序文私が作成中の Markodwn エディターに同期スクロール機能を追加する必要があります。Baid...
目次ReactRouterV6 の変更1. <Switch> が <Routes&...
広告業は人間であることに似ていると言う人がいます。これは本当です。優れた広告には、優れた人間と同じよ...
ホスト名を変更する場合は、以下の手順に従ってください。ホスト名の使用hostnameコマンドを使用す...
目次Express ミドルウェアとは何ですか? Expressミドルウェアを作成するための要件Exp...
目次1. 父と息子のコミュニケーション1.1 親コンポーネント --> 子コンポーネント1.2...
LOFTER のコンテストで、ログイン ボックスを再設計できると言及されているのを見ました。過去 2...
定義と使用法<input> タグはユーザー情報を収集するために使用されます。 type ...
最近、CSS インターフェースに取り組んでいるときに、line-height と height とい...
復帰文字 ( Ctrl+M ) に不安を感じても心配しないでください。それらを排除する簡単な方法がい...
私は CentOS に実装された LDAP ユーザー管理を使用しています。これはインターネット上のほ...