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

推薦する

要素の幅(高さ)の適応を実現するCSSおよびCSS3の柔軟なボックスモデル

1. CSSは左の固定幅と右の適応幅を実現します1. ポジショニング <!DOCTYPE ht...

MySQL の Docker インストールと設定手順

目次序文環境インストールMySQLコンテナを作成して起動する思い出させるMySQLコンテナコマンドを...

MySQL ストアド プロシージャの作成、呼び出し、管理の詳細な説明

目次ストアドプロシージャの概要ストアド プロシージャを使用する理由は何ですか?ストアドプロシージャの...

jQueryはフェードインとフェードアウト効果を実現します

jQuery を使用してフェードインとフェードアウト効果を完成させる前に、まずいくつかのコードを理解...

nginx でクロスドメイン障害修復を構成する方法の例

Nginxのクロスドメイン設定は次のようには機能しません サーバー{ 聞く 80; server_n...

リアルタイムクロックを実装するネイティブJS

ネイティブ JS で実装したリアルタイム クロック エフェクトを共有します。エフェクトは以下のとおり...

Docker の NFS-Ganesha イメージを使用して NFS サーバーを構築する詳細なプロセス

目次1. NFS-Ganeshaの紹介2. NFS-Ganeshaの設定3. NFS-Ganesha...

docker compose を使用して FastDfs ファイル サーバーをインストールする詳細な例

ドッカーの作成 バージョン: '2' サービス: fastdfsトラッカー: ホスト...

フロントエンドJSサンドボックスを実装するいくつかの方法についての簡単な説明

目次序文iframeはサンドボックスを実装しますdiffメソッドを使用したサンドボックスの実装プロキ...

CocosCreatorオブジェクトプールの使い方

目次序文:特定の操作ステップ1: プレハブを準備するステップ2: オブジェクトプールを初期化するステ...

Springboot プロジェクトの Docker-compose イメージリリースプロセス分析

導入Docker-Compose プロジェクトは、Docker コンテナ クラスターの迅速なオーケス...

Vueプロジェクトをパッケージ化してリリースする手順

目次1. 開発環境から本番環境への移行2. 統一されたリクエストパスを設定する3. パッケージ化コマ...

Vueはカスタムツリーコンポーネントを再帰的に実装します

この記事では、カスタムツリーコンポーネントを再帰的に実装するVueの具体的なコードを参考までに共有し...

MySQL 最適化: キャッシュ最適化 (続き)

MySQL 内部には至るところにキャッシュがあります。MySQL のソースコードを読むと、キャッシ...

JavaScript モバイル H5 画像生成ソリューションの説明

現在、WeChatパブリックアカウントの運用活動が多く、写真を生成する必要があります。生成された写真...