JavaScript が Jingdong の虫眼鏡の特殊効果を模倣

JavaScript が Jingdong の虫眼鏡の特殊効果を模倣

この記事では、Jingdong虫眼鏡を模倣したJavaScriptの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

機能要件:

1. 3つのモジュールに分かれている
2. マウスが小さい画像ボックスの上を通過すると、黄色のマスクレイヤーと大きい画像ボックスが表示されます。2つのボックスを非表示にする機能を残します。
3. 黄色の遮蔽層はマウスで移動します
4.黄色の遮蔽レイヤーを動かすと、大きな画像も動きに合わせて動きます。

大画像移動距離 = (ブロッキング層移動距離 * 大画像最大移動距離) / ブロッキング層最大移動距離

<スタイル>
      体、
      div {
        マージン: 0;
        パディング: 0;
      }
      。製品 {
        位置: 相対的;
        幅: 400ピクセル;
        高さ: 400px;
        マージン: 50px 0 0 20px;
        境界線: 1px実線 #000;
      }
      .preview_img 画像 {
        幅: 300ピクセル;
        高さ: 300px;
        マージン: 50px 50px;
      }
      。マスク {
        位置: 絶対;
        表示: なし;
        上: 20px;
        左: 30px;
        幅: 80ピクセル;
        高さ: 80px;
        背景色: 黄色;
        不透明度: 0.5;
        カーソル: 移動;
      }
      。大きい {
        位置: 絶対;
        表示: なし;
        左: 410px;
        上: 0;
        幅: 500ピクセル;
        高さ: 500px;
        zインデックス: 999;
        オーバーフロー: 非表示;
      }
      .bigimg{
        位置: 絶対;
        上: 0;
        左: 0;
        幅: 400ピクセル;
        高さ: 400px;
      }
    </スタイル>
    <!-- js ファイルをインポート-->
    <script src="detail.js"></script>
  </head>
  <本文>
    <div class="製品">
      <div class="preview_img">
        <img src="images/xs.jpg" alt="" />
        <div class="mask"></div>
        <div class="big">
          <img src="images/xs.jpg" alt="" class="bigImg" />
        </div>
      </div>
    </div>
</本文>

JSページ

//ページのプリロード window.addEventListener("load", function () {
  var preview_img = document.querySelector(".preview_img");
  var マスク = document.querySelector(".mask");
  var big = document.querySelector(".big");

  //1. マウスがpreview_imgの上を通過すると、マスクオクルージョンレイヤーと大きなボックスが表示され、非表示になります。preview_img.addEventListener("mouseover", function () {
    mask.style.display = "ブロック";
    big.style.display = "ブロック";
  });
  preview_img.addEventListener("mouseout", 関数() {
    mask.style.display = "なし";
    big.style.display = "なし";
  });
  //オクルージョン レイヤーの座標は親ボックスに基づいているため、マウスの座標をオクルージョン レイヤーに渡すのは不適切です preview_img.addEventListener("mousemove", function (e) {
    //(1) まずボックス内のマウスの座標を計算します。var x = e.pageX - this.offsetLeft;
    var y = e.pageY - this.offsetTop;
    //(2) ボックスの高さと幅の半分を減算します //(3) マスクが移動する距離 var maskX = x - mask.offsetWidth / 2;
    var maskY = y - mask.offsetHeight / 2;
    //(4) 座標が0未満の場合、位置0で停止します(つまり、ボックスの範囲を超えたら停止します)
    var egdeX = preview_img.offsetWidth - mask.offsetWidth;
    var egdeY = preview_img.offsetHeight - mask.offsetHeight;
    マスクX <= 0の場合{
      マスクX = 0;
    } そうでなければ (maskX >= egdeX) {
      マスクX = egdeX;
    }
    マスクY <= 0の場合{
      マスクY = 0;
    } そうでなければ (maskY >= egdeY) {
      マスクY = egdeY;
    }
    mask.style.left = maskX + "px";
    mask.style.top = maskY + "px";
    // 全体像の移動距離 = 遮蔽層の移動距離 * 全体像の最大移動距離 / 遮蔽層の最大移動距離 var bigImg = document.querySelector(".bigImg");
    // 大きな画像の最大移動距離 var bigMax = bigImg.offsetWidth - big.offsetWidth;
    //大きな画像の移動距離xy
    var bigX = (maskX * bigMax) / egdeX;
    var bigY = (maskY * bigMax) / egdeY;
    bigImg.style.left = -bigX + "px";
    bigImg.style.top = -bigY + "px";
  });
});

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

以下もご興味があるかもしれません:
  • JavaScript が Jingdong の虫眼鏡効果を模倣
  • jsはJingdongの拡大鏡効果を模倣する
  • JavaScript で Jingdong の虫眼鏡効果を実装
  • Pure jsはTaobao Jingdong製品の拡大鏡機能を模倣します
  • JavascriptはJingdong虫眼鏡の効果を模倣します
  • JavaScript を使用して Jingdong の虫眼鏡効果を実装する

<<:  Dockerfile ビルド中に発生する「/bin/sh: pip: コマンドが見つかりません」という問題の解決方法

>>:  Navicat PremiumでSQLファイルをインポートする方法

推薦する

MySQL 8.0.11 の詳細なインストール手順

この記事では、参考までにMySQL 8.0.11のインストール手順を紹介します。具体的な内容は次のと...

ECMAScript6 におけるマップマッピングの基本概念と一般的な方法

目次マッピングとは何かオブジェクトとマップの違いマップの共通メソッド宣言と初期化割り当てセットキー値...

位置固定オフセット問題を解決する方法の詳細な説明

質問CSS 固定配置の position:fixed は非常に使いやすいです。ブラウザのビューポート...

mysql5.6.8 ソースコードのインストールプロセス

カーネル: [root@opop ~]# cat /etc/centos-release CentO...

Vue は zip ファイルのダウンロードを実装します

この記事の例では、Vueの具体的なコードを共有し、zipファイルをダウンロードして参考にしています。...

MySQLのクラスタ化インデックスと非クラスタ化インデックスの詳細な説明

1. クラスター化インデックステーブル データはインデックスの順序で保存されます。つまり、インデック...

Vueプロジェクトでスケルトンスクリーンを使用する方法

現在、アプリケーション開発は基本的にフロントエンドとバックエンドに分離されています。主流のフロントエ...

vue3 統合 API における vue2 の $refs の代替方法についての簡単な説明

vue2 プロジェクト開発の経験があれば、$refs に精通しているでしょう。 vue3 の急激なア...

vue-routeルーティング管理のインストールと設定方法

導入Vue Router 、 Vue.jsの公式ルーティング マネージャーです。 Vue.jsのコア...

ウェブページに埋め込まれた Flash と IE、FF、Maxthon の互換性の問題

いろいろ苦労した後、インターネットで検索したり、以前の会社のプロジェクトを探したり、他の人のプロジェ...

MySQL接続クエリにおけるととwhereの違いの簡単な分析

1. テーブルを作成する テーブル「学生」を作成( `id` int(11) NULLではない、 `...

画像を表示したり非表示にしたりするための JavaScript

JavaScriptは画像を表示したり非表示にしたりしますが、参考までに具体的な内容は次のとおりで...

Dockerfileの指示と基本構造の説明

Dockerfile を使用すると、ユーザーはカスタム イメージを作成できます。基本構造Docker...

el-select のスタイルを変更する方法の詳細な説明: popper-append-to-body と popper-class

elementUI が提供する el-select コンポーネントのスタイルを変更する方法この問題...

MySQLの左結合を内部結合に素早く変換するプロセス

日々の最適化プロセス中に、奇妙なことに気付きました。同じ SQL にまったく異なる 2 つの実行プラ...