Vueは製品の拡大鏡効果を実現します

Vueは製品の拡大鏡効果を実現します

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

1. はじめに

ライブストリーミングやセルフサービスショッピングが盛んなこの電子商取引の時代に、私たちは商品に対する理解を深め、さらに詳細を確認しました。そして、商品を拡大できることを発見しました。そこで、フロントエンド技術のVueフレームワークを使用して、虫眼鏡に似た機能を作成しました。

2. 実装のアイデア

元画像(左)の表示スペースについては、画像行を保護するために、img を canvas に置き換えることができます。
マウスを動かすと拡大表示エリアが表示され(マウスレイヤーマスク上部)、表示レイヤーマスクエリアで拡大表示スペースが選択されます(右)

3. エフェクト表示

4. 具体的な実装ロジックコード

テンプレート(画像パスを変更することを忘れないでください)

<テンプレート>
  <div>
    <div class="left">
      <img class="leftImg" src="../../src/assets/curry.jpg" alt="" />
      <!-- マウスレイヤーカバー-->
      <div v-show="topShow" class="top" :style="topStyle"></div>
      <!-- 最上位レイヤーは透明なレイヤーで元の画像スペース全体を覆います -->
      <div
        クラス="maskTop"
        @mouseenter="enterHandler"
        @mousemove="moveHandler"
        @mouseout="outHandler"
      </div>
    </div>
    <div v-show="rShow" class="right">
      <画像
        :style="r_img"
        クラス="rightImg"
        src="../../src/assets/curry.jpg"
        代替案=""
      />
    </div>
  </div>
</テンプレート>

スタイル CSS

<スタイルスコープ>
/* 画像を拡大し、左上隅を (0,0) に配置します */
.rightImg{
  表示: インラインブロック;
  幅: 800ピクセル;
  高さ: 800ピクセル;
  位置: 絶対;
  上: 0;
  左: 0;
} /* 右側の画像ズームスペース */
。右 {
  左マージン: 412px;
  幅: 400ピクセル;
  高さ: 400px;
  境界線: 1px 実線の赤;
  位置: 相対的;
  オーバーフロー: 非表示;
} /* トップレベルのマスク */
.マスクトップ{
  幅: 400ピクセル;
  高さ: 400px;
  位置: 絶対;
  zインデックス: 1;
  上: 0;
  左: 0;
} /* レイヤーマスク、左上隅を (0,0) に配置します */
.トップ{
  幅: 200ピクセル;
  高さ: 200px;
  背景色: ライトコーラル;
  不透明度: 0.4;
  位置: 絶対;
  上: 0;
  左: 0;
} /* 元の画像の表示 */
.leftImg{
  幅: 400ピクセル;
  高さ: 400px;
  表示: インラインブロック;
} /* 元の画像のコンテナ */
。左 {
  幅: 400ピクセル;
  高さ: 400px;
  境界線: 1px 青緑色
  フロート: 左;
  位置: 相対的;
}
</スタイル>

スクリプトコアjs

<スクリプト>
エクスポートデフォルト{
  データ() {
    戻る {
      トップスタイル: { 変換: "" },
      画像: {},
      トップ表示: false,
      r表示: false、
    };
  },
  メソッド: {
    // マウスが元の画像空間に入る function enterHandler() {
      // レイヤーマスクと拡大されたスペースの表示 this.topShow = true;
      this.rShow = true;
    },
    // マウス移動関数moveHandler(event) {
      // マウスの座標位置 let x = event.offsetX;
      y = event.offsetY とします。
      // レイヤーマスクの左上隅の座標位置と制限: 元の画像領域の左上隅を超えることはできません。let topX = x - 100 < 0 ? 0 : x - 100;
      topY = y - 100 < 0 ? 0 : y - 100 とします。
      // レイヤーマスクの位置を再度制限して、レイヤーマスクが元の画像領域内にのみ収まるようにします if (topX > 200) {
        上X = 200;
      }
      (topY > 200) の場合 {
        上Y = 200;
      }
      // 変換を通じて制御を移動します this.topStyle.transform = `translate(${topX}px,${topY}px)`;
      this.r_img.transform = `translate(-${2 * topX}px、-${2 * topY}px)`;
    },
    // マウスアウト関数 outHandler() {
      //レイヤーカバーと拡大スペースの非表示を制御します this.topShow = false;
      this.rShow = false;
    },
  },
};
</スクリプト>

V. まとめと考察

当初は元の画像コンテナの左側に 3 つのマウス イベントを追加しましたが、問題は発生し続けました。

1. 虫眼鏡を完全に実現するために、マウス領域を覆う透明なマスクトップを追加しました。このマスクトップレイヤーを追加しないと、マウスが元の画像領域に入ると、マウスマスクはマウスと一緒に移動せず、マウスが移動すると高周波で振動します。右側の拡大領域はスムーズに動きません。

2. マスクトップレイヤーが追加されていない場合、マウスを元の画像領域に移動すると、マウスレイヤーマスクがマウスをブロックするため、マウス移動イベントは1回しか実行されません。

3. 以前、マウスマスクの初期位置を動的に決定し、mouseenter イベントに組み込むことを試みました。その結果、mouseenter イベントが mousemove イベントになったかのように異常に何度も実行されました。

他の虫眼鏡のケースも見たことがありますが、トップレベルのオーバーレイ マスクを追加する必要はありません。通りすがりの誰かがこの問題の解決を手伝ってくれることを願っています。

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

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

<<:  Nginx設定の原理と実装プロセスの詳細な説明https

>>:  MySQLクエリ時にフィールドにデフォルト値を割り当てる方法

推薦する

データベースクエリの最適化: サブクエリの最適化

1. 事例会社のトップ以外の従業員全員を年齢別にグループ化します。 t_emp で id が存在しな...

マウスがカード上に移動したときにフローティング効果を実現する CSS の使用例

原理ホバーしたときに要素に影を設定します: box-shadow で、通常とは異なるスタイルにします...

jsvc を使用して tomcat を起動する方法 (通常のユーザーとして実行)

jsvc の紹介実稼働環境では、Tomcat はデーモン モードで実行する必要があります。Tomc...

シンプルなID生成戦略: MySQLテーブルからグローバルに一意のIDを生成する実装

グローバル ID を生成する方法は多数あります。ここでは簡単な解決策を紹介します。MySQL の自動...

jsを呼び出すいくつかの方法が整理され、使用が推奨されています

a タグではクリック イベントがよく使用されます。 1. href="javascript...

IDEA を使用して Tomcat を設定し、JSP ファイルを作成する方法

idea を使用して JSP ファイルを書き込む前に、jdk 環境 (ここでは説明しません) と対応...

MySQL 文字列連結と null 値の設定のためのインスタンス メソッド

#文字列連結 concat(s1,s2); テーブル内の last_name と first_nam...

MySQLのユーザーアカウント管理と権限管理の詳細な説明

序文MySQL の権限テーブルは、データベースの起動時にメモリにロードされます。ユーザーが ID 認...

HTML で複数のクラス属性を定義する場合の無効な解決策

HTML を記述する過程で、クラス属性に複数の値を定義することがよくありますが、定義した値が無効であ...

XHTML 2.0 新機能プレビュー

<br />ブラウザが次世代のXHTMLを処理できるようになる前に、このよりリッチなコン...

CSS変数がJSインタラクティブコンポーネント開発にもたらす改善と変更のサンプルコードの詳細な説明

1. CSS変数がもたらす質的変化CSS 変数によってもたらされる改善は、CSS コードの節約や C...

Nginx ストリーム構成プロキシ (Nginx TCP/UDP ロード バランシング)

序章nginx が優れたリバース プロキシ サービスであることは誰もが知っています。nginx を使...

Nginxのアクセス制限設定の詳細な説明

Nginxのアクセス制限設定とはNginx のアクセス制限は、IP ベースのアクセス制御とユーザーベ...

CSSスタイルで実現されるHTML背景色のグラデーション効果

エフェクトのスクリーンショット:実装コード:コードをコピーコードは次のとおりです。 <!DOC...

mysql-5.7.21-winx64 無料インストール版のインストール - Windows チュートリアル詳細説明

1 ダウンロードアドレスは https://dev.mysql.com/downloads/mysq...