Vue+element ui はアンカーの配置を実現します

Vue+element ui はアンカーの配置を実現します

この記事では、アンカー配置を実現するためのVue +要素UIの具体的なコードを例として紹介します。具体的な内容は次のとおりです。

ビュー

<el-row :gutter="20">
   <el-col :span="3">
    <!--ナビゲーション選択イベント-->
    <el-menu :default-active="アクティブステップ" @select="ジャンプ">
     <el-menu-item v-for="(item,index) in menuData" :index="`${index}`" :key="item.subjectId">
      <i class="el-icon-menu"></i>
      <span slot="title">{{item.subjectName}}</span>
     </el-menu-item>
    </el-menu>
   </el-col>
   <!--スクロール イベントをバインドするにはリッスンが必要です-->
   <el-col :span="21" class="scroll_cls" @scroll="onScroll">
    <div v-for="(item,index) in tableObject" :key="index" style="height:500px">
     <div class="title scroll-item" :id="item.name">{{item.name}}</div>
     <el-table :data="item.rows" :key="index">
      <el-table-column label="シリアル番号" type="index" width="50"></el-table-column>
      <el-table-column prop="channelId" label="チャンネル/チーム ID"></el-table-column>
      <el-table-column prop="channelName" label="チャンネル/チーム"></el-table-column>
      <el-table-column prop="ruleCode" label="割り当て計画 ID"></el-table-column>
      <el-table-column prop="ruleName" label="割り当て計画名"></el-table-column>
      <el-table-column prop="ruleVersion" label="バージョン番号"></el-table-column>
      <el-table-column prop="階層" label="レベル">
       <テンプレート スロット スコープ="スコープ">
        <span>{{scope.row.hierarchy == 1 ? 'プロジェクト' : 'チャネル チーム'}}</span>
       </テンプレート>
      </el-table-column>
      <el-table-column label="有効期間">
       <テンプレート スロット スコープ="スコープ">
        <span>{{scope.row.beginTime + '-' + scope.row.endTime}}</span>
       </テンプレート>
      </el-table-column>
      <el-table-column prop="creatorName" label="オペレーター"></el-table-column>
      <el-table-column prop="createTime" label="操作時間"></el-table-column>
      <el-table-column prop="orderCnt" label="関連順序">
       <テンプレート スロット スコープ="スコープ">
        <el-ボタン
         @click="orderHandleClick(scope.row.orderCnt)"
         タイプ="テキスト"
         サイズ="小"
        >{{scope.row.orderCnt}}</el-button>
       </テンプレート>
      </el-table-column>
      <el-table-column label="操作">
       <テンプレート スロット スコープ="スコープ">
        <el-button @click="settingHandleClick(scope.row)" type="text" size="small">割り当てプランを設定する</el-button>
       </テンプレート>
      </el-table-column>
     </el-table>
     <el-ページネーション
      v-if="item.total > 5"
      スタイル="マージントップ: 15px"
      サイズ="小"
      @size-change="handleSizeChange($event,index)"
      @current-change="handleCurrentChange($event,index)"
      :current-page="ruleForm.ageNum"
      :ページサイズ="[10, 30, 50, 100]"
      :page-size="ruleForm.pageSize"
      layout="total, sizes, prev, pager, next"
      :total="アイテムの合計"
     </el-pagination> ...
    </div>
   </el-col>
</el-row>

js

//スクロールトリガーボタンのハイライトメソッド: {
  onScroll(e) {
            scrollItems を document.querySelectorAll(".scroll-item"); とします。
            console.log(スクロールアイテム)
            コンソール.log(e)
   (let i = scrollItems.length - 1; i >= 0; i--) {
    //スクロールバーのスクロール距離が現在のスクロール項目のスクロール可能な距離より大きいかどうかを判断します。let judge =
     e.target.scrollTop >=
     scrollItems[i].offsetTop - scrollItems[0].offsetTop;
    (判断)の場合{
                    コンソールログ(i)
     this.activeStep = i.toString();
     壊す;
    }
   }
  },
  ジャンプ(インデックス) {
            コンソール.log(インデックス)
   ターゲットを document.querySelector(".scroll_cls");
   scrollItems を document.querySelectorAll(".scroll-item"); とします。
   // スクロールバーが下までスクロールしたかどうかを判定します。if (target.scrollHeight <= target.scrollTop + target.clientHeight) {
                コンソール.log(インデックス)
                console.log(インデックスのタイプ)
    this.activeStep = インデックス;
   }
            let total = scrollItems[index].offsetTop - scrollItems[0].offsetTop; // アンカー要素とその offsetParent (ここでは body) の上端間の距離 (スクロールする距離)
            コンソール.log(合計)
            let distance = document.querySelector(".scroll_cls").scrollTop; // スクロールバーとスクロール領域の上部の間の距離 console.log(distance)
   // let distance = document.body.scrollTop || document.documentElement.scrollTop || window.pageYOffset // スクロールバーとスクロール領域の上端の間の距離(スクロール領域はウィンドウです)
   // スクロール アニメーションの実装。setTimeout 再帰を使用してスムーズなスクロールを実現し、距離を 50 の小さなセグメントに分割して、10 ミリ秒ごとに 1 回スクロールします。// 各小さなセグメントの距離を計算します。let step = total / 50;
   (合計>距離)の場合{
    スムーズダウン(document.querySelector(".scroll_cls"));
   } それ以外 {
    newTotal = 距離 - 合計とします。
    ステップ = newTotal / 50;
    スムーズアップ(document.querySelector(".scroll_cls"));
   }

   // パラメータ要素はスクロール領域です function SmoothDown(element) {
    (距離 < 合計)の場合{
     距離 += ステップ;
                    要素.scrollTop = 距離;
     タイムアウトを設定します(smoothDown.bind(this, 要素), 10);
    } それ以外 {
     要素.scrollTop = 合計;
    }
   }

   // パラメータ要素はスクロール領域です function SmoothUp(element) {
    (距離>合計)の場合{
     距離 -= ステップ;
     要素.scrollTop = 距離;
     タイムアウトを設定します(smoothUp.bind(this, element), 10);
    } それ以外 {
     要素.scrollTop = 合計;
    }
   }

   document.querySelectorAll('.scroll-item').forEach((item, index1) => {
     if (インデックス === インデックス1) {
       アイテム.scrollIntoView({
         ブロック: '開始'、
         動作: 'スムーズ'
       })
     }
   })
  },
  },
 マウント() {
       this.$nextTick(() => {
           コンソール.log(1)
           window.addEventListener('スクロール'、this.onScroll、true)
       })
    },

CS

.スクロール_cls{
    高さ: 500px;
 オーバーフロー:自動;
}

転載元: 元のリンクはこちら

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

以下もご興味があるかもしれません:
  • Vueはアンカー配置機能を実装します
  • Vue スライディング天井とアンカー配置のサンプル コード
  • Vue はスクロールを監視してアンカーの配置を実現します (双方向) 例
  • Vue プロジェクトでのアンカー配置の代替方法
  • Vueプロジェクトにおけるアンカー配置の詳細な説明

<<:  Linux exa コマンド (ls よりも優れたファイル表示エクスペリエンス)

>>:  Mysql インデックスと Redis ジャンプテーブルについての簡単な説明

推薦する

HTTPS の有効化に関する経験の共有

国内のネットワーク環境が悪化し続ける中、さまざまな改ざんや乗っ取りが後を絶たず、サイト全体をHTTP...

js でオブジェクトを作成するさまざまな方法とその長所と短所のまとめ

目次初期作成方法ファクトリーパターンコンストラクターパターンコンストラクタパターンの最適化プロトタイ...

Linux デバイスに空き容量がありません inode の満杯により 500 エラーが発生します

iノードとは何ですか? inode を理解するには、まずファイル ストレージから始める必要があります...

Dockerがコンテナサービスを停止または削除できない問題の解決策

序文今日、開発者から、コンテナ サービスを停止、rm (docker rm -f)、または強制終了で...

MySQL 5.7.23 解凍バージョンのインストールチュートリアル(画像とテキスト付き)

毎回インストールチュートリアルを探すのは面倒なので、後で確認できるように手順をバックアップします。解...

MySQLにおけるビューの作成(CREATE VIEW)と使用制限の詳しい説明

この記事では、例を使用して、MySQL ビューの作成 (CREATE VIEW) と使用上の制限につ...

MySQLデータベースはsysbenchに基づくOLTPベンチマークテストを実装します

Sysbench は、MySQL データベース ストレージ エンジン InnoDB のディスク I/...

Docker ベースの Redis 1 マスター、2 スレーブ、3 センチネルの実装

現在、Redis とコンテナについて学習中なので、Docker を使用して Redis マスタースレ...

Bootstrap5 ブレークポイントとコンテナの具体的な使用法

目次1. Bootstrap5 ブレークポイント1.1 モバイルファースト1.2 ブートストラップブ...

Docker ファイルの保存パス、コンテナの起動コマンド操作の取得

コンテナはすでに作成されていますが、その起動パラメータ(データがマウントされる場所)を知る方法 #コ...

MySQLデータベース監視binlogを有効にする手順

序文多くの場合、ユーザーが自分のデータに対して実行する操作に基づいて何かを行う必要があります。たとえ...

MySQL 5.5 の導入に関する問題

MySQL の導入現在、会社ではプラットフォーム運用を通じてMySQLを導入しています。金曜日、プラ...

Centos7.3 での mysql5.7 のインストールと設定のチュートリアル

この記事では、MySQL 5.7のインストールと設定のチュートリアルを参考までに紹介します。具体的な...

WeChatアプレットを使用して天井効果を実現する方法の例

目次1. 実装2. 問題点3. より良い実装方法があるかどうか検討する要約する背景は日付のタイトルで...

MySQL学習記録: KEYパーティションが引き起こした血なまぐさい事件

需要背景ビジネス テーブル tb_image のデータの一部は次のとおりです。id は一意ですが、i...