大きな箱の中に写真があります。マウスをその上に置くと、半透明のマスク レイヤーが表示されます。マウスを動かすと、マスク レイヤーも一緒に移動します。箱の横には拡大写真もあります。拡大写真の位置は、マスク レイヤーの位置によって変わります。マウスを大きな箱から離すと、マスク レイヤーと拡大写真が消えます。 実装のアイデア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コンテナオーケストレーション実装プロセス分析
フレーム:スタイル=”border-style:solid;border-width:5px;bor...
この記事の例では、ミニプログラムのカスタムタブバーコンポーネントをカプセル化するための具体的なコード...
1. 単純な三角形を実装するCSS ボックス モデルの境界線を使用すると、次のような三角形を実現で...
問題を見つける最近MySQLをMySQL 5.7にアップグレードした後、次のようなクエリでグループ化...
簡単に言えば、MySQL ワーム レプリケーションは、クエリされたデータを指定されたデータ テーブル...
jQuery を使用してフェードインとフェードアウト効果を完成させる前に、まずいくつかのコードを理解...
基本的な使い方 <!DOCTYPE html> <html lang="...
デザイナーは独自のフォント ライブラリを持っているため、プロジェクトの設計時にすぐに使用できます。今...
今日の講義では、HTML におけるタグの表示モードについてお話ししましたが、これはブロックレベルタグ...
まず、Linux システムで実行されているノード プロセスはプロセスを強制終了できないことを紹介しま...
目次1. 指令とは何ですか? Vue でよく使われる組み込みの v ディレクティブv-if と v-...
この記事では、参考までにMySQL 8.0.15のインストールと設定のグラフィックチュートリアルを紹...
目次1. beforeunload イベント2. アンロードイベント3. ソースコードプロジェクトの...
問題を見つける最近、仕事で問題が発生しました。MySQL データベースにテーブルを作成するときに、ラ...
目次1. はじめに2. 本文2.1 および演算子2.2 または演算子2.3 オペレーター2.4 no...