この記事では、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ファイルをインポートする方法
この記事では、参考までにMySQL 8.0.11のインストール手順を紹介します。具体的な内容は次のと...
目次マッピングとは何かオブジェクトとマップの違いマップの共通メソッド宣言と初期化割り当てセットキー値...
質問CSS 固定配置の position:fixed は非常に使いやすいです。ブラウザのビューポート...
カーネル: [root@opop ~]# cat /etc/centos-release CentO...
この記事の例では、Vueの具体的なコードを共有し、zipファイルをダウンロードして参考にしています。...
1. クラスター化インデックステーブル データはインデックスの順序で保存されます。つまり、インデック...
現在、アプリケーション開発は基本的にフロントエンドとバックエンドに分離されています。主流のフロントエ...
vue2 プロジェクト開発の経験があれば、$refs に精通しているでしょう。 vue3 の急激なア...
導入Vue Router 、 Vue.jsの公式ルーティング マネージャーです。 Vue.jsのコア...
いろいろ苦労した後、インターネットで検索したり、以前の会社のプロジェクトを探したり、他の人のプロジェ...
1. テーブルを作成する テーブル「学生」を作成( `id` int(11) NULLではない、 `...
JavaScriptは画像を表示したり非表示にしたりしますが、参考までに具体的な内容は次のとおりで...
Dockerfile を使用すると、ユーザーはカスタム イメージを作成できます。基本構造Docker...
elementUI が提供する el-select コンポーネントのスタイルを変更する方法この問題...
日々の最適化プロセス中に、奇妙なことに気付きました。同じ SQL にまったく異なる 2 つの実行プラ...