大きな箱の中に写真があります。マウスをその上に置くと、半透明のマスク レイヤーが表示されます。マウスを動かすと、マスク レイヤーも一緒に移動します。箱の横には拡大写真もあります。拡大写真の位置は、マスク レイヤーの位置によって変わります。マウスを大きな箱から離すと、マスク レイヤーと拡大写真が消えます。 実装のアイデア1. HTMLとCSSでボックス、マスクレイヤー、拡大画像ページを編集し、マスクレイヤーと拡大画像をデフォルトで非表示に設定します。 注意:拡大画像のオフセットには、マスク レイヤーの移動方向と反対の負の値が与えられます。 コードサンプル<!DOCTYPE html> <html lang="ja"> <ヘッド> <メタ文字セット="UTF-8"> <meta http-equiv="X-UA-compatible" content="IE=edge"> <meta name="viewport" content="width=デバイス幅、初期スケール=1.0"> <title>携帯電話の詳細ページ</title> <!-- <link rel="スタイルシート" href="css/detail.css" > <script src="js/detail.js"></script> --> <スタイル> * { マージン: 0; パディング: 0; } .詳細コンテンツ{ 幅: 1200ピクセル; マージン: 0 自動; } 画像 { 境界線: 0; 垂直位置合わせ: 中央; } .preview_img { 位置: 相対的; 幅: 400ピクセル; 高さ: 400px; 上マージン: 30px; 境界線: 1px 実線 #ccc; } .preview_img 画像 { 幅: 100%; 高さ: 100%; } 。マスク { 表示: なし; 位置: 絶対; 上: 0; 左: 0; 幅: 300ピクセル; 高さ: 300px; 背景色: ピンク; 不透明度: .5; カーソル: 移動; } 。大きい { 表示: なし; 位置: 絶対; 上: 0; 左: 410px; 幅: 500ピクセル; 高さ: 500px; 境界線: 1px 実線 #ccc; 背景色: ピンク; zインデックス: 999; オーバーフロー: 非表示; } .bigimg{ 位置: 絶対; 上: 0; 左: 0; 幅: 800ピクセル; 高さ: 800ピクセル; } </スタイル> </head> <本文> <div class="detail-content"> <div class="preview_img"> <img src="upload/s3.png" alt=""> <div class="mask"></div> <div class="big"> <img src="upload/big.jpg" alt="" class="bigImg"> </div> </div> </div> <スクリプト> var previewImg = document.querySelector('.preview_img'); var マスク = document.querySelector('.mask'); var big = document.querySelector('.big'); var bigImg = document.querySelector('.bigImg'); // マウスオーバーボックスイベント previewImg.addEventListener('mouseover', function() { // オクルージョン レイヤーと拡大画像の表示を設定します。mask.style.display = 'block'; big.style.display = 'ブロック'; }) // マウスがボックスを離れるイベント previewImg.addEventListener('mouseout', function() { // オクルージョンレイヤーと拡大画像を非表示に設定します。mask.style.display = 'none'; big.style.display = 'なし'; }) // マウスがボックス内を移動する previewImg.addEventListener('mousemove', function(e) { // ボックス内のマウスの位置を取得します。var x = e.pageX - this.offsetLeft; var y = e.pageY - this.offsetTop; // オクルージョン レイヤーの移動値を計算し、マウスをオクルージョン レイヤーの中央に配置します。var maskX = x - mask.offsetWidth / 2; var maskY = y - mask.offsetHeight / 2; // ボックスは正方形なので、水平方向の X 軸の最大移動値のみが計算されます。Y 軸の最大移動値は X 軸と一致します。var maskMax = previewImg.offsetWidth - mask.offsetWidth; // オクルージョンレイヤーがボックス内で移動できるように制限する if (maskX <= 0) { マスクX = 0; } そうでなければ (maskX >= maskMax) { マスクX = マスクMax; } マスクY <= 0の場合{ マスクY = 0; } そうでなければ (maskY >= maskMax) { マスクY = マスクMax; } mask.style.left = maskX + 'px'; mask.style.top = maskY + 'px'; // 拡大画像の最大移動値を計算します。大きな画像の水平移動値 = オクルージョン レイヤーの移動値 * 大きな画像の最大移動距離 / オクルージョン レイヤーの最大移動距離 var bigMax = bigImg.offsetWidth - big.offsetWidth; var bigX = maskX * bigMax / maskMax; var bigY = maskY * bigMax / maskMax; bigImg.style.left = -bigX + 'px'; bigImg.style.top = -bigY + 'px'; }) </スクリプト> </本文> </html> ページ効果: 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: Dockerコンテナオーケストレーション実装プロセス分析
なぜこのような効果を実現するのでしょうか。実は、この効果もタイトルプロンプトから派生したものですが、...
1. スクロールスナップはフロントエンド開発者にとって必須のスキルですCSS スクロール スナップは...
目次シーン紹介プラグインの実装問題1: 重複したヘッダーコンポーネント質問2: 別の実装アイデア質問...
これに先立ち、1日かけてやってみました。Seataは使い方が簡単で超シンプルですが、インストールや設...
DIV+css構造 CSSレイアウトを学んでいますか?まだ純粋な CSS レイアウトを完全に習得でき...
Linux LVM論理ボリューム構成プロセスの詳細な説明多くの Linux ユーザーは、オペレーティ...
スワップの紹介Linux のスワップ (スワップ パーティション) は、Windows の仮想メモリ...
1. インライン要素はコンテンツの幅のみを占めますが、ブロック要素はコンテンツの量に関係なく行全体を...
新しいコンピューターに変更したので、すべての環境を新しいコンピューター上で設定する必要があります。ふ...
1. フローティングとは何ですか?フローティングは、その名の通り、浮遊することを意味します。要素がド...
目次Docker入門Docker環境のインストールDockerイメージの共通コマンド検索ミラー画像を...
序文職場で次のような状況に遭遇しました。ログ システムのテーブルでは、時間フィールドには日付データで...
MySQL マスター/スレーブ レプリケーションを使用すると、1 つのデータベース (マスター デー...
HTML CSS および JavaScript を使用して、プラス、マイナス、ゼロの 3 つのボタン...
1. フォーム<form id="" name="" ...