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イメージとコンテナの一般的な操作の詳細な説明

推薦する

Mysql の主キーと一意キーの違いのまとめ

主キーとは何ですか?主キーは、テーブル内の各タプル (行) を一意に識別するテーブル内の列です。主キ...

MYSQL データベースの基礎 - 結合操作の原理

結合では、ネスト ループ結合アルゴリズムが使用されます。ネスト ループ結合には 3 つの種類がありま...

インタビュアーはCSSで固定アスペクト比を実現する方法を尋ねました

この質問に関連するニーズはまだないかもしれませんし、面接でこの質問をされたことがないかもしれませんが...

WeChatアプレット開発の共通機能と使用方法のまとめ

ここでは、主に小さなプログラムの開発プロセスでよく使われる、非常に実用的な機能ポイントをいくつか整理...

インタラクティブデザインでページングと読み込みのどちらを選択するかについての説明

この記事の著者@子木yoyoが個人ブログに投稿したものです。 Web ページでもモバイル アプリでも...

ボタンをクリックして画像を切り替える JavaScript

この記事の例では、ボタンをクリックすることで画像を切り替えることを実現するJavaScriptの具体...

DockerでSpring Bootアプリケーションを実行する方法

ここ数日、dockerでSpring Bootアプリケーションを実行する方法を勉強してきました。以前...

MySQL パーティションテーブルの正しい使用方法

MySQL パーティションテーブルの概要数億、あるいは数十億ものレコードを格納するテーブルに遭遇する...

フォーム送信ページの更新がジャンプしない

1. ソースコードの設計コードをコピーコードは次のとおりです。 <!DOCTYPE html ...

CSS プロパティ *-gradient の実用的な価値を探る

まず興味深い性質であるconic-gradientを紹介しましょう。円錐グラデーション!円グラフの作...

CSS のサイズと幅と高さのブラウザ解釈の違いに対する解決策

まずは例を見てみましょうコードをコピーコードは次のとおりです。 <!DOCTYPE html ...

Docker に共通コンポーネント (mysql、redis) をインストールする方法

Dockerはmysqlをインストールします docker search mysql 検索 dock...

MySQL でよく使用されるステートメントの包括的な概要 (必読)

以下にまとめたナレッジポイントはどれもよく使われる貴重な情報ばかりですので、ぜひ上手に集めてください...

IE8 互換性について: X-UA-compatible 属性の説明

問題の説明:コードをコピーコードは次のとおりです。 <meta http-equiv=&quo...

MySQLインデックスに関する重要な面接の質問をいくつか共有します

序文インデックスは、データベース内の 1 つ以上の列の値を並べ替え、データベースが効率的にデータを取...