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

推薦する

中国語フォントの英語名まとめ

CSS の font-family プロパティを使用して中国語フォントを参照する場合、フォントを定義...

Mysqlデータテーブルでワームレプリケーションを使用する方法

簡単に言えば、MySQL ワーム レプリケーションは、クエリされたデータを指定されたデータ テーブル...

vue+iviewのメニューとタブの連携方法

Vue+iview メニューとタブのリンク現在、vue+iview を使用してバックエンド管理システ...

MySQLデータベースのリアルタイムバックアップの知識ポイントを詳しく解説

序文リアルタイムのデータベース バックアップの必要性は非常に一般的です。MySQL 自体はレプリケー...

MySQL 8.0.15 winx64 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.15のインストールと設定方法を参考までに紹介します。具体的な内容は...

Flex レイアウトで適応型ページを作成する (構文と例)

Flex レイアウトの紹介英語の Flex はフレキシブル ボックス、つまり伸縮性のあるボックスを...

Dockerでの接続例外中のエラーを解決する

Docker を初めて使い始めると、通常とは異なる問題に遭遇して、必然的に混乱してしまいます。大丈夫...

HTMLのタグについての簡単な説明

0. タグとは何ですか? XML/HTML コードコンテンツをクリップボードにコピー<入力 t...

時間のかかるMySQLレコードのSQL例の詳細な説明

mysqlは時間のかかるSQLを記録しますMySQL は、最適化と分析のために、時間のかかる SQL...

Nginx の負荷分散構成、ダウンタイム発生時の自動切り替えモード

厳密に言えば、nginx には負荷分散バックエンド ノードのヘルス チェック機能はありませんが、デフ...

デュアル VIP を使用した高可用性 MySQL クラスタの構築

目次1. プロジェクトの説明: 2. プロジェクト環境: 2. プロジェクトの手順: 3. プロジェ...

Vue が DingTalk の出勤カレンダーを実装

この記事では、DingTalkの勤怠カレンダーを実装するためのVueの具体的なコードを参考までに共有...

さまざまなHTTPリターンステータスコードの詳細な説明

サイト上のページを表示するためのリクエストがサーバーに送信されると(たとえば、ユーザーがブラウザでペ...

vue.js ベースの QQ チャット ルーム

目次導入効果のデモンストレーションは次のとおりです。 MChat コンポーネントのレンダリング: I...

CentOS7 で docker を使用して Apollo 構成センターをデプロイする実装

Apollo オープンソース アドレス: https://github.com/ctripcorp/...