[解決済み] ある要素にスクロールするには?
2022-03-17 17:17:03
質問
チャットウィジェットで、スクロールアップするたびにメッセージの配列を表示するようにしています。今直面している問題は、メッセージが読み込まれるとき、スライダーが一番上に固定されたままであることです。私は、それが前の配列から最後のインデックス要素に焦点を当てたいのです。インデックスを渡すことで動的参照を作成できることはわかりましたが、それを実現するためにどのようなスクロール関数を使用するかも知っておく必要があります。
handleScrollToElement(event) {
const tesNode = ReactDOM.findDOMNode(this.refs.test)
if (some_logic){
//scroll to testNode
}
}
render() {
return (
<div>
<div ref="test"></div>
</div>)
}
解決方法は?
React 16.8 +, 機能性コンポーネント
const ScrollDemo = () => {
const myRef = useRef(null)
const executeScroll = () => myRef.current.scrollIntoView()
// run this function from an event handler or an effect to execute scroll
return (
<>
<div ref={myRef}>Element to scroll to</div>
<button onClick={executeScroll}> Click to scroll </button>
</>
)
}
React 16.3 +, クラスコンポーネント
class ReadyToScroll extends Component {
constructor(props) {
super(props)
this.myRef = React.createRef()
}
render() {
return <div ref={this.myRef}>Element to scroll to</div>
}
executeScroll = () => this.myRef.current.scrollIntoView()
// run this method to execute scrolling.
}
クラスコンポーネント - Refコールバック
class ReadyToScroll extends Component {
render() {
return <div ref={ (ref) => this.myRef=ref }>Element to scroll to</div>
}
executeScroll = () => this.myRef.scrollIntoView()
// run this method to execute scrolling.
}
String refsを使用しないでください。
String refsはパフォーマンスに悪影響を及ぼし、コンポーザブルではなく、廃止されつつあります(2018年8月)。
<ブロッククオート文字列参照はいくつかの問題があり、レガシーとみなされ、おそらくは は、将来のリリースのいずれかで削除されます。[Reactの公式ドキュメント】。]
オプション スムーズスクロールアニメーション
/* css */
html {
scroll-behavior: smooth;
}
子プロセスにrefを渡す
refはリアクトコンポーネントではなく、dom要素に付けたいのです。そのため、子コンポーネントに渡すときは、prop refに名前を付けることができません。
const MyComponent = () => {
const myRef = useRef(null)
return <ChildComp refProp={myRef}></ChildComp>
}
次に、ref prop を dom 要素に取り付けます。
const ChildComp = (props) => {
return <div ref={props.refProp} />
}
関連
-
[解決済み】SyntaxError: JSONの位置1に予期しないトークンoがある。
-
[解決済み】Node.jsで "Cannot find module "エラーを解決するには?
-
[解決済み] 要素外でのクリックを検出するにはどうすればよいですか?
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] jQueryで要素にスクロールする
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
要素ツリー制御によるvueTreeテーブル
-
JSアレイループと効率解析の比較
-
Vueにシンプルなメモ帳機能を実装
-
Vueのクラススタイルの使い方の詳細
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み】gulp anythingを実行するたびに、アサーションエラーが発生します。- タスク関数を指定する必要があります
-
[解決済み】「.addEventListener is not a function」なぜこのエラーが発生するのか?
-
OSSアップロードエラーを解決する: net::ERR_SSL_PROTOCOL_ERROR
-
JavaScriptのgetElementById、getElementsByTagNam、getElementsByClassNameの違いと使い方