この記事では、Jingdong虫眼鏡を模倣したJavaScriptの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。 機能要件: 1. 3つのモジュールに分かれている 大画像移動距離 = (ブロッキング層移動距離 * 大画像最大移動距離) / ブロッキング層最大移動距離 <スタイル> 体、 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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Dockerfile ビルド中に発生する「/bin/sh: pip: コマンドが見つかりません」という問題の解決方法
>>: Navicat PremiumでSQLファイルをインポートする方法
CSS の font-family プロパティを使用して中国語フォントを参照する場合、フォントを定義...
簡単に言えば、MySQL ワーム レプリケーションは、クエリされたデータを指定されたデータ テーブル...
Vue+iview メニューとタブのリンク現在、vue+iview を使用してバックエンド管理システ...
序文リアルタイムのデータベース バックアップの必要性は非常に一般的です。MySQL 自体はレプリケー...
この記事では、MySQL 8.0.15のインストールと設定方法を参考までに紹介します。具体的な内容は...
Flex レイアウトの紹介英語の Flex はフレキシブル ボックス、つまり伸縮性のあるボックスを...
Docker を初めて使い始めると、通常とは異なる問題に遭遇して、必然的に混乱してしまいます。大丈夫...
0. タグとは何ですか? XML/HTML コードコンテンツをクリップボードにコピー<入力 t...
mysqlは時間のかかるSQLを記録しますMySQL は、最適化と分析のために、時間のかかる SQL...
厳密に言えば、nginx には負荷分散バックエンド ノードのヘルス チェック機能はありませんが、デフ...
目次1. プロジェクトの説明: 2. プロジェクト環境: 2. プロジェクトの手順: 3. プロジェ...
この記事では、DingTalkの勤怠カレンダーを実装するためのVueの具体的なコードを参考までに共有...
サイト上のページを表示するためのリクエストがサーバーに送信されると(たとえば、ユーザーがブラウザでペ...
目次導入効果のデモンストレーションは次のとおりです。 MChat コンポーネントのレンダリング: I...
Apollo オープンソース アドレス: https://github.com/ctripcorp/...