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クエリ時にフィールドにデフォルト値を割り当てる方法

推薦する

MySQL テーブル分割後にスムーズにオンラインになる方法

目次テーブルの目的例えばテーブル分割戦略すでにオンラインになっている実行中のテーブルはどうすればよい...

HTMLテーブルではテーブルの外側の境界線のみが表示されます

質問があります。Dreamweaver で、3 行 1 列のログイン フォーム (ログイン、登録、パ...

MySQL でサーバーのインストールを開始できない場合の解決策について簡単に説明します。

コンピュータに初めて MySQL をインストールする場合、通常このエラー メッセージは表示されません...

Windows 10 での MySQL 8.0.19 のインストールと設定のチュートリアル

来学期にMySQLを勉強します。事前に自宅で練習していませんでした。インストールに時間がかかるとは思...

JavaScript でシンプルな Web 時計を実装する

JavaScript を使用して Web ページ クロックを実装します。効果は次の図に示されています...

Vue3 ドキュメント クイックスタート

目次1. セットアップ1. セットアップ関数の最初のパラメータ - props 2. 文脈2. セッ...

MySQL 5.7.20 共通ダウンロード、インストール、設定方法と簡単な操作スキル(解凍版無料インストール)

早朝に MySQL 5.7.19 のインストールを終えたばかりですが、午前中に MySQL が最新バ...

MySQL 整合性制約の例の詳細な説明

この記事では、MySQL の整合性制約について説明します。ご参考までに、詳細は以下の通りです。メイン...

Dockerでnginxをデプロイし、設定ファイルを変更する方法

Dockerでnginxをデプロイするのはとても簡単ですたった 1 行のコマンド: docker 実...

JavaScriptで計算機機能を実現するプロセスの詳細な説明

目次1. 電卓機能の紹介2. 計算機ページのデザイン1. ナビゲーションバー2. データ部分3. i...

レスポンシブデザインについて知っておくべきこと

レスポンシブデザインとは、ウェブサイトの開発プロセス中に、ユーザーの操作やデバイス環境に応じて対応す...

VMware10 での CentOS 7 のインストールと設定のチュートリアル

Ubuntu が今日のデスクトップ ユーザーの間で最も人気のある Linux オペレーティング シス...

HTMLデザインパターンの日々の勉強ノート

HTML デザインパターン学習ノート今週は主にHTMLデザインパターンを学びました。学習内容をまとめ...

MySQL 8.0.24 バージョンのインストールと設定方法のグラフィックチュートリアル

この記事ではMySQL 8.0.24バージョンのインストールと設定方法を記録し、皆さんと共有しますM...

thead、tfoot、tbodyを使用して表を作成します

これらの 3 つのタグを間違った方法で使用して、タイトルを表に沿わせたり、tbody の高さを固定し...