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ファイルをインポートする方法

推薦する

HTML ページに SVG を挿入する複数の方法

SVG (Scalable Vector Graphics)は、XML 構文に基づいた画像形式です。...

Dockerでnginxを実行し、ローカルディレクトリをイメージにマウントする方法

1 hupからイメージを取得する docker プル nginx 2 マウントするディレクトリを作成...

広告を閉じるための JavaScript カウントダウン

広告を閉じるまでのカウントダウンを実装するために JavaScript を使用するまだフロントエンド...

6つのレイアウトでのFrameLayoutの使用

序文前回はLinearLayoutについて説明しました。今回はFrameLayoutの使い方を説明し...

要素 UI に基づいてクエリ コンポーネントを段階的にカプセル化する方法

目次関数基本的なクエリ関数クエリ条件の初期化ページのレンダリングクエリと表示の最適化をさらに強化プル...

フィールドの文字セットの違いによる MySQL のインデックス失敗の解決策

インデックスとは何ですか?なぜインデックスを作成するのですか?インデックスは、列に特定の値を持つ行を...

言及すべき8つのMySQLの落とし穴を共有する

MySQL はインストールが簡単で、高速で、豊富な機能を備えています。これはオープンソース運動のベン...

yum を使用して rpm と関連する依存関係をダウンロードして、docker をオフラインでインストールします。

yum を使用してすべての依存関係を一緒にインストールできますが、–downloadonly –d...

レスポンシブ Web をデザインするにはどうすればいいですか?レスポンシブウェブデザインのメリットとデメリット

最近レスポンシブ デザインについて学んでいて、これについていくつか整理してみました。写真の一部はイン...

MySql 最適化のための my.ini 中国語構成スキームの詳細な説明: InnoDB、4GB メモリ、および複数のクエリ

この記事は、4G メモリ システム用の MySQL 構成ファイル ソリューションです (主に Inn...

JavaScript でウェブ プレーヤーを実装する

今日は、JavaScript を使用して Web ページ上にプレーヤーを作成する方法を紹介します。誰...

非常に実用的なTomcat起動スクリプトの実装方法

序文セキュリティ上の理由から、会社が Linux サーバーへのすべてのログインにセキュリティ制限を課...

CSSブレンドモードとSVGを使用して、製品画像の色を動的に変更します。

数日前、Codepen で @Kyle Wetton が書いた、CSS ブレンディング モードと S...

MySQLの文字セット設定を5分で理解しましょう

目次1. コンテンツの概要2. 文字セットと文字順序の概念と関係3. MySQL でサポートされてい...