Vue3は画像拡大鏡効果を実現します

Vue3は画像拡大鏡効果を実現します

この記事の例では、画像拡大鏡効果を実現するためのVue3の具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。

成果を達成する

コード

<テンプレート>
  <div class="goods-image">
    <!-- 大きな画像コンテナ -->
    <div
      クラス="large"
      :スタイル="[
        {
          背景画像: `url(${imageList[curId]})`,
          背景位置X: position.backgroundPositionX、
          背景位置Y: position.backgroundPositionY、
        },
      ]"
      v-if="isShow"
    </div>
    <div class="middle" ref="target">
      <img :src="画像リスト[curId]" alt="" />
      <!-- マスクコンテナ -->
      <div class="layer" :style="{ left: left + 'px', top: top + 'px' }" v-if="isShow"></div>
    </div>
    <ul class="small">
      <li
        v-for="(img, i) が imageList 内にあります"
        :key="i"
        @mouseenter="curId = i"
        :class="{ アクティブ: curId === i }"
      >
        <img :src="画像" alt="" />
      </li>
    </ul>
  </div>
</テンプレート>
 
<スクリプト>
'vue' から { reactive, ref, watch } をインポートします。
'@vueuse/core' から { useMouseInElement } をインポートします。
エクスポートデフォルト{
  名前: 'GoodsImage',
  小道具: {
    画像リスト: {
      タイプ: 配列、
      デフォルト: () => {
        戻る []
      }
    }
  },
  設定 () {
    定数curId = ref(0)
    定数ターゲット = ref(null)
    // elementX: マウスの左側からのオフセット値 // elementY: テーブルの上部からのオフセット値 // isOutside: コンテナーの外側にあるかどうか (外側の場合は true、内側の場合は false)
    const { elementX, elementY, isOutside } = useMouseInElement(target)
    const left = ref(0) // スライダーから左までの距離 const top = ref(0) // スライダーから上までの距離 const isShow = ref(false) // 大きな画像とマスク画像の表示と非表示 const position = reactive({ // 大きな画像の表示位置、デフォルトは 0
      背景位置X: 0,
      背景位置Y: 0
    })
    時計(
      //監視オブジェクト[elementX, elementY, isOutside]、
      () => {
        要素Xの値<100の場合{
          // 左の最小距離 left.value = 0
        }
        要素Xの値> 300の場合{
          左の値 = 200
        }
        要素Xの値> 100 && 要素Xの値< 300の場合{
          左の値 = 要素Xの値 - 100
        }
        要素Yの値<100の場合{
          // 左上の最小距離。値 = 0
        }
        要素Yの値> 300の場合{
          上位値 = 200
        }
        要素Yの値> 100 && 要素Yの値< 300) {
          上部の値 = 要素Yの値 - 100
        }
        // 背景画像の動きを制御します // 1. マスク レイヤーの移動方向は、背景画像の移動方向と逆になります // 2. マスク レイヤーと背景画像の面積比は 1:2 なので、マスク レイヤーが 1 ピクセル移動するごとに背景画像は 2 ピクセル移動します // backgrondPosition: x, y;
        position.backgroundPositionX = -left.value * 2 + 'px'
        位置.背景位置Y = -top.値 * 2 + 'px'
 
        // isOutsideの値が変わったら、すぐにそれを否定してisShowに代入します
        // isOutside: コンテナの外側か? 外側の場合は true、内側の場合は false
        isShow.value = !isOutside.value
      },
      {}
    )
    戻る {
      curId、
      ターゲット、
      左、
      トップ、
      位置、
      表示
    }
  }
}
</スクリプト>

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

以下もご興味があるかもしれません:
  • Vueは製品の拡大鏡効果を実現します
  • Vue3 カプセル化された虫眼鏡コンポーネントのサンプルコード
  • Vueは商品詳細ページの虫眼鏡機能を実装します
  • Vueはタブ切り替えの虫眼鏡効果を実装します
  • Vueはシンプルな虫眼鏡効果を実装します
  • Vueは虫眼鏡付きの検索ボックスを実装します
  • Vue3.0 手書き拡大鏡効果
  • Vue が虫眼鏡効果を実装
  • 手書きのVue拡大鏡効果
  • Vue3はJingdong製品詳細ページの虫眼鏡効果コンポーネントをカプセル化します

<<:  CentOS7 で MySQL のスケジュールされた自動バックアップを実装する方法

>>:  Dockerイメージとコンテナの一般的な操作の詳細な説明

推薦する

純粋な HTML タグにどれくらい精通していますか?

以下の HTML タグには、基本的に既存のタグがすべて含まれています。数分かけて 1 つずつ参照する...

ubuntu18.04 での qt5.12.8 のインストールと環境設定に関する詳細なチュートリアル

環境システム: Ubuntu 18.04ソフトウェア: qt5.12.8 1. インストールパッケー...

MySQL データベースのバックアップ プロセスに関する注意事項

今日は、データ バックアップに関連するいくつかの点について調べ、MySQL データ バックアップに関...

nginx で同時接続リクエストの数を制限する方法

導入同時接続数を制限するモジュールは http_limit_conn_module です。アドレス:...

Vue 仮想 Dom から実際の Dom への変換

別のツリー構造があるJavascriptオブジェクトでは、このツリーが本物であると伝えるだけでよいD...

HTML/CSSにおける記号論の詳細な説明

この記事では、ソシュールの言語哲学などの理論に基づいて、CSS の class 属性は不要であると主...

Vue3+Vue-cli4 プロジェクトで Tencent スライダー検証コードを使用する方法

導入:従来の画像検証コードと比較して、スライダー検証コードには次の利点があります。サーバーは検証コー...

Bootstrap 3.0 学習ノートのページレイアウト

今回はレイアウトを中心に学習しますが、これは基本的なHTMLタグのほとんどにも存在するため、比較的簡...

MySQL 8.0.15 winx64 のインストールと設定方法のグラフィックチュートリアル (Windows の場合)

この記事では、MySQL 8.0.15 winx64のインストールと設定方法を参考までに紹介します。...

geo モジュールを使用して Nginx でホワイトリストを設定する例

元の構成: http { ...... limit_conn_zone $binary_remote...

SQLでEXPLAINコマンドを使用する方法

日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行するこ...

echartsマップカルーセルハイライトを解決するための記事

目次序文やることリストやるだけ地図を準備するインスタンスをバックアップ用に保存するタイマーカルーセル...

MySQL の replace と replace into の詳細な例 into_Mysql

MySQL の replace と replace into はどちらも頻繁に使用される関数です。...

Vueのインストールと使用

目次1. Vueのインストール方法1: CDNの導入方法2: 直接ダウンロードしてインポートする方法...

HTML テーブル_Powernode Java アカデミー

HTMLで表を描くには、表タグを使用します。 trは行を意味しますtdは列を示すth はテーブ...