Reactは無限ループスクロール情報を実装する

Reactは無限ループスクロール情報を実装する

この記事では、無限ループスクロールを実現するためのReactの具体的なコードを参考までに紹介します。具体的な内容は次のとおりです。

必要

バックエンドから送信されたデータはスクロール表示されます。マウスが内側に移動するとスクロールが停止し、マウスが外側に移動するとスクロールが継続します。企業ポータルのお知らせ情報欄を参照してください。

実装のアイデア

アイデア 1

componentDidMount にタイマーを定義し、1000 ミリ秒ごとにイベントをトリガーし、配列の最初のデータを配列にプッシュし、最初のデータを削除し、最後に onMouEnter イベントと onMouseLeave イベントを div に追加し、マウスが内側に移動するとタイマーをクリアし、マウスが外側に移動するとタイマーを再起動します。

コード:

クラスRollはReact.Componentを拡張します{
  
  状態 = {
    リスト: [
      { タイトル: 「静かな夜の思い」 },
      { タイトル: '唐李白' },
      { タイトル: 「窓の前の明るい月明かり」 },
      { title: 「地面に霜が降りているようだ」 },
      { タイトル: 「明るい月を見上げて」 },
      { タイトル: 「故郷を見下ろしながら思いを馳せる」 },
    ]
  }

  コンポーネントWillMount = () => {
    この関数を開始します
  }

  ロール = () => {
    arr = this.state.list とします。
    arr.push(この状態リスト[0])
    配列連結(0,1)
    this.setState({
      リスト: arr,
    })
    console.log(この状態のリスト);
  }

  開始 = () => {
    this.timer = setInterval(() => {
      this.roll()
    }, 1000);
  }

  停止 = () => {
    クリア間隔(this.timer)
  }

  与える () {
    戻る (
      <div onMouseEnter={this.stop} onMouseLeave={this.begin} className='box'>
        {this.state.list.map(item => {
          戻る (
            <p>
              {アイテムタイトル}
            </p>
          )
        })}
      </div>
    )
  }
}

効果画像:

実施された効果は良くなく、上方シフト効果も見られなかったため、2番目のアイデアが浮かびました。

アイデア2

アイデア 1 に基づいて、変更を加えて、componentDidMount にタイマーを定義します。数 px ずつ上方向に移動するたびに、一定の距離に移動したら、配列の最初のデータを配列にプッシュし、最初のデータを削除し、最後に onMouEnter イベントと onMouseLeave イベントを div に追加します。

jsファイル

クラスRollはReact.Componentを拡張します{

  状態 = {
    リスト: [
      { タイトル: 'これはメッセージ 1 です' },
      { タイトル: 'これはメッセージ 2 です' },
      { タイトル: 'これはメッセージ 3 です' },
      { タイトル: 'これはメッセージ 4 です' },
      { タイトル: 'これはメッセージ 5 です' },
      { タイトル: 'これはメッセージ6です' },
      { タイトル: 'これはメッセージ7です' },
      { タイトル: 'これはメッセージ8です' },
      { タイトル: 'これはメッセージ9です' },
    ]、
    カウント: 0,
  }

  // ページがマウントされたらタイマーを開始するcomponentDidMount = () => {
    この関数を開始します
  }

  // タイマー開始 = () => {
    this.timer = setInterval(() => {
      this.Roll()
    }, 10);
  }

  // タイマー停止をオフにする = () => {
    クリア間隔(this.timer)
  }

  // オフセットが 0.5px になるたびに、状態を使用してオフセットの数を保存します Roll = () => {
    this.setState({
      カウント: this.state.count+1
    })
    this.refs.roll.style.top = -0.5*this.state.count+'px';
    // オフセットが 40px に達したら、配列の最初のデータを配列の末尾まで切り取り、行の高さに対応するオフセットの数を減算します。if(-0.5*this.state.count <= -40){
      arr = this.state.list とします。
      arr.push(この状態リスト[0])
      配列をスプライスする(0,1);
      this.setState({
        リスト: arr,
        カウント: this.state.count - 50,
      })
      this.refs.roll.style.top = (this.state.count*(-0.5)) + 'px'
    }
    
  }

  与える(){
    戻る (
      <div className="box" onMouseEnter={this.stop} onMouseLeave={this.begin}>
        <div className="content" ref='roll'>
          {this.state.list.map((item)=>{
            戻る (
              <p className='行'>
                <a href="#" rel="外部nofollow" >
                  {アイテムタイトル}
                </a>
              </p>
            )
          })}
        </div>
      </div>
    )
  }
}

cssファイル

。箱{
  幅: 300ピクセル;
  高さ: 160px;
  境界線: 1px 黒一色;
  マージン: 200px 300px;
  位置: 相対的;
  オーバーフロー: 非表示;
}

。コンテンツ{
  位置: 絶対;
  上: 0px;
}

。行{
  高さ: 20px;
  マージン: 5px 自動;
}

効果画像:

ノードを取得

1.ドキュメントがノードを取得する

js と同じように、react で document を使用して要素ノードを取得できるとは思ってもいませんでした。

2. 審判の獲得

this.refs.xxx から入手

コンポーネントDidMount = () => {
        コンソールにログ出力します。
    }

    与える () {
        戻る (
            <div ref='テスト'>
                123
            </div>
        )
    }

3. findDOMNodeを取得

ReactDom.findDOMNode(this) から取得します。
これは現在のコンポーネントのインスタンスです

コンポーネントDidMount = () => {
    console.log(ReactDom.findDOMNode(this));
  }

  与える () {
    戻る (
      <div クラス名 = 'テスト'>
        123
      </div>
    )
  }

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • React Nativeアバタースクロールの例
  • プラグインなしのデジタルスクロール効果のReactの例
  • 反応ループデータの実装(リスト)

<<:  HTML 5 プレビュー

>>:  Redhat 8.0 システムのインストール方法に関するグラフィック チュートリアル (初心者には必須)

推薦する

jquery+springbootでファイルアップロード機能を実現

この記事の例では、ファイルアップロード機能を実現するためのjquery+springbootの具体的...

Navicatを使ってMySQLを操作する方法

目次序文: 1. Navicatの紹介2. シンプルなチュートリアルの共有接続管理ライブラリテーブル...

12個のJavascriptテーブルコントロール(DataGrid)が整理されています

DataGrid コントロールの DataSource プロパティがデザイン時に設定されている場合、...

Vue カードスタイルのクリックして切り替える画像コンポーネントの使用方法の詳細な説明

この記事では、vueカードスタイルのクリックして切り替える画像コンポーネントを参考までに紹介します。...

jQueryの競合問題を解決する方法

フロントエンド開発において、$ は jQuery の関数です。$ のパラメータが異なると、実装される...

IDEAでVUEプロジェクトをデバッグするための詳細な手順

js コードをデバッグするには、コード内にデバッガーを記述するか、Chrome で毎回ブレークポイン...

MySQL のインデックスとデータ テーブルを管理する方法

目次テーブルの競合を見つけて修正するインデックス統計の更新テーブルの競合を見つけて修正するデータ テ...

js の通常形式の日付と時刻に 0 を自動的に追加する 2 つのソリューション

目次背景解決策1アイデア:コード:解決策2アイデア:要約する参照する背景日付と時間をフォーマットする...

MySQL 5.7.16 無料インストール版のインストールと設定方法のグラフィックチュートリアル

この記事ではMySQL 5.7.16のインストールと設定方法を記録します。具体的な内容は以下のとおり...

ブートストラップ学習体験のまとめ - CSS スタイル デザイン共有

プロジェクトのニーズにより、ブートストラップ フレームワークを慎重に学習する予定です。以前から少しは...

スクロール時に選択領域のフォント色を暗くするために CSS を使用するサンプルコード

日付ピッカーをカプセル化する場合、選択時にフォントの色を暗くする必要があります。実装後の効果を見てみ...

cocoscreatorプレハブの詳しい説明

目次プレハブプレハブの作り方プレハブの役割1. 同じタイプのノードをバッチで作成する2. 特定の時間...

JS、CSS スタイルのリファレンスの記述

CS: ... 1. <link type="text/css" href...

レスポンシブWebデザイン学習(1) - 画面サイズと使用率の決定

最近では、モバイルデバイスがますます普及しており、ユーザーがスマートフォンやタブレットを使用して W...

MySQL 5.7.13 のインストールと設定方法の Mac でのグラフィック チュートリアル

MySQL 5.7.13 Mac用インストールチュートリアル、非常に詳細で、以下のように記録されてい...