シンプルな虫眼鏡効果を実現するJavaScript

シンプルな虫眼鏡効果を実現するJavaScript

大きな箱の中に写真があります。マウスをその上に置くと、半透明のマスク レイヤーが表示されます。マウスを動かすと、マスク レイヤーも一緒に移動します。箱の横には拡大写真もあります。拡大写真の位置は、マスク レイヤーの位置によって変わります。マウスを大きな箱から離すと、マスク レイヤーと拡大写真が消えます。

実装のアイデア

1. HTMLとCSSでボックス、マスクレイヤー、拡大画像ページを編集し、マスクレイヤーと拡大画像をデフォルトで非表示に設定します。
2. 要素オブジェクトを取得し、マウスイベント mouseover を大きなボックスにバインドし、マウスが通過したときにマスクレイヤーと拡大画像を表示するように設定します。表示を「ブロック」に設定します。
マウスアウト - - -mouseout、マウスが通過したときにマスクレイヤーと拡大画像の表示を設定します。表示は「なし」に設定されています
3. 大きなボックス内のマウスの位置を計算する
4. マウスをマスク レイヤーの中央に置きます。マウスの位置を基準にマスク レイヤーを上方向と左方向に半分の距離だけ移動します。マスク レイヤーの位置 - ボックスを基準に上方向と左方向のオフセットを割り当てて絶対位置を指定します。
5. 大きなボックスでマスクレイヤーの動きを制限する - - - オフセットの値を決定します。<= 0の場合、オフセットは0です。
6. マスクレイヤーが移動すると、拡大画像の位置が変わります。マスクレイヤー移動値 / マスクレイヤー最大移動距離 = 拡大画像移動距離 / 拡大画像最大移動距離。この関係に従って、拡大画像の移動距離が求められます。移動距離は、拡大画像のオフセット上と左に割り当てられます。

注意:拡大画像のオフセットには、マスク レイヤーの移動方向と反対の負の値が与えられます。

コードサンプル

<!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 を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • 画像拡大鏡効果のJSバージョン
  • jsを使用してシンプルな虫眼鏡効果を実現します
  • jsはショッピングサイトの虫眼鏡機能を実現します
  • js を使ってシンプルな虫眼鏡効果を実現
  • js 虫眼鏡拡大画像効果
  • 虫眼鏡の効果を実現するために js を使用する簡単な例
  • JavaScript 画像拡大鏡効果コード [コードは比較的シンプルです]
  • 魔法のJavascript画像拡大鏡
  • JavaScript 画像拡大鏡(ドラッグ アンド ドロップ、ズーム効果)
  • ネイティブ js で記述された虫眼鏡効果

<<:  MySql インデックス使用戦略の分析

>>:  Dockerコンテナオーケストレーション実装プロセス分析

推薦する

Vue3 AST パーサー - ソースコード分析

目次1. AST抽象構文木を生成する2. ASTのルートノードを作成する3. 子ノードの解析4. テ...

CentOS8 システムをベースにした Gitlab を構築するために Docker を使用する詳細なチュートリアル

目次1. Dockerをインストールする2. GitLabをインストールする3. GitLabを初期...

JavaScript の構成と継承の説明

目次1. はじめに2. プロトタイプチェーン継承3. コンストラクタの継承4. 組み合わせ継承1. ...

ウェブサイトのビジュアルデザイン(画像とテキスト)における情報伝達の役割と方法

現代の Web ビジュアル デザインは、初期の情報の積み重ねから、その後のグラフィックスと抽象化、そ...

スライディングカルーセル効果を実現する js

この記事では、スライディングカルーセル効果を実現するためのjsの具体的なコードを参考までに共有します...

nginx がどのようにして高いパフォーマンスとスケーラビリティを実現するのかを深く理解する

NGINX の全体的なアーキテクチャは、連携して動作する一連のプロセスによって特徴付けられます。メイ...

js配列forEachインスタンスの詳細な使用方法

1. forEach() は map() に似ています。これも渡された関数に各要素を順番に適用します...

Linux での SSH 非秘密通信の実装

SSHとは何か管理者はリモートでログインして、インターネット経由で接続されたさまざまな場所にある複数...

Docker を使って LEMP 環境を素早く構築する方法の例

LEMP(Linux + Nginx + MySQL + PHP)は、基本的に今日のWeb開発者にと...

JavaScript オブジェクトの 3 つのプロパティ

目次1. 書き込み可能: 書き込み可能2. 列挙可能: 列挙可能3. 設定可能: 設定可能オブジェク...

タグのhref属性とonclickイベントの使用例

a タグは主にページ ジャンプを実装するために使用され、これは href 属性または onclick...

画像をMySQLデータベースに保存し、フロントエンドページに表示するための実装コード

目次1. まず、pycharmを使用してDjangoプロジェクトを作成し、関連する環境を設定します。...

HTML テーブルタグチュートリアル (32): セルの水平方向の配置属性 ALIGN

水平方向では、セルの配置を左、中央、右に設定できます。基本的な構文<TD ALIGN=&quo...

配列をフラット化する 5 つの JavaScript の方法

目次1. 配列の平坦化の概念2. 実装1. 減らす2. toString と split 3. 結合...