JavaScript が Jingdong の虫眼鏡効果を模倣

JavaScript が Jingdong の虫眼鏡効果を模倣

この記事では、Jingdongの虫眼鏡効果を実現するためのJavaScriptの具体的なコードを紹介します。具体的な内容は次のとおりです。

ケーススタディ

  • ケース全体は3つの機能モジュールに分けられます
  • マウスが小さい画像ボックスの上を通過すると、黄色のマスクレイヤーと大きい画像ボックスが表示され、2つのボックスが非表示になる機能が残されています。
  • 黄色のオクルージョン レイヤーはマウスの機能に従います。
  • 黄色のマスキング レイヤーを移動すると、大きな画像も動きに従います。
  • マウスが小さい画像ボックスの上を通過すると、黄色のマスクレイヤーと大きい画像ボックスが表示され、2つのボックスが非表示になる機能が残されています。
  • 表示と非表示

  • 黄色の遮蔽レイヤーを移動すると、大きな画像も動きに従います。大きな画像の移動距離は、黄色の遮蔽レイヤーの比率と同じである必要があります。
  • 大きな画像を移動するための式を見つける

コード

<!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>
    <スタイル>
        .preview_wrap {
            幅: 400ピクセル;
            高さ: 400px;
        }

        .preview_img {
            位置: 相対的;
            高さ: 398ピクセル;
            境界線: 1px 実線 #ccc;
        }

        。マスク {
            表示: なし;
            位置: 絶対;
            上: 0;
            左: 0;
            幅: 300ピクセル;
            高さ: 300px;
            背景: #FEDE4F;
            不透明度: .5;
            境界線: 1px 実線 #ccc;
            カーソル: 移動;
        }

        。大きい {
            表示: なし;
            位置: 絶対;
            左: 410px;
            上: 0;
            幅: 500ピクセル;
            高さ: 500px;
            背景色: ピンク;
            zインデックス: 999;
            境界線: 1px 実線 #ccc;
            オーバーフロー: 非表示;
        }

  /* 左上を設定する前に、画像に絶対位置を追加する必要があります */
        .bigimg{
            位置: 絶対;
            上: 0;
            左: 0;
        }
    </スタイル>
</head>
<本文>
    <div class="preview_wrap">
        <div class="preview_img">
            <img src="images/s3.png" alt="">
            <div class="mask"></div>
            <div class="big">
                <img src="images/big.jpg" alt="" class="bigImg">
            </div>
        </div>
    </div>
    <スクリプト>
     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', 関数() {
             マスクスタイル表示 = 'なし';
             big.style.display = 'なし';
         })
         // 2. マウスが動くと、黄色のボックスがマウスに追従するようにします preview_img.addEventListener('mousemove', function(e) {
         // (1). まずボックス内のマウスの座標を計算します var x = e.pageX - this.offsetLeft;
         var y = e.pageY - this.offsetTop;
         // コンソールログ(x, y);
         // (2) ボックスの高さの半分 300 を減算して 150 を取得します。これがマスクの最終的な左と上の値です // (3) マスクが移動する距離 var maskX = x - mask.offsetWidth / 2;
         var maskY = y - mask.offsetHeight / 2;
         // (4) x座標が0未満の場合、0で停止します // オクルージョンレイヤーの最大移動距離 var maskMax = preview_img.offsetWidth - mask.offsetWidth;
         マスクX <= 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';
         // 3. 大きな画像の移動距離 = 遮蔽レイヤーの移動距離 * 大きな画像の最大移動距離 / 遮蔽レイヤーの最大移動距離 // 大きな画像 var bigIMg = document.querySelector('.bigImg');
         // 大きな画像の最大移動距離 var bigMax = bigIMg.offsetWidth - big.offsetWidth;
         // 大きな画像の移動距離 XY
         var bigX = maskX * bigMax / maskMax;
         var bigY = maskY * bigMax / maskMax;
         bigIMg.style.left = bigX + 'px';
         bigIMg.style.top = bigY + 'px';
 
     })
    </スクリプト>
</本文>
</html>

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • JavaScript が Jingdong の虫眼鏡の特殊効果を模倣
  • jsはJingdongの拡大鏡効果を模倣する
  • JavaScript で Jingdong の虫眼鏡効果を実装
  • Pure jsはTaobao Jingdong製品の拡大鏡機能を模倣します
  • JavascriptはJingdong虫眼鏡の効果を模倣します
  • JavaScript を使用して Jingdong の虫眼鏡効果を実装する

<<:  要素(背景画像)の下に水平線アニメーションを実現するための純粋な CSS

>>:  Docker イメージのダウンロードが遅すぎる場合の解決策

推薦する

CSS スティッキー配置位置の詳細な説明: スティッキー問題の落とし穴

前書き: position:sticky は CSS ポジショニングの新しい属性です。相対ポジショニ...

Mac OS 10.11 での MySQL 5.7.12 のインストールと設定のチュートリアル

Mac OS 10.11 に MySQL をインストールして設定する方法を、主に写真を使って手順を簡...

Dockerのローカルイメージ作成方法の分析

コンテナと呼ばれるものは、実際には親イメージに基づいて読み取りおよび書き込み可能なファイル階層を作成...

Linuxファイルを表示するコマンドの詳細な説明

Linuxファイルを表示する方法ファイルの内容を表示するコマンド: catは最初の行からコンテンツを...

Vue.js ドラッグ可能なテキストボックスコンポーネントの使用方法の詳細な説明

目次コンポーネントの登録コンポーネントの追加ソースコードドラッグ可能なテキスト ボックスでは、ユーザ...

統計量に対するmySql SQLクエリ操作

余計なことは言わないで、コードだけ見てみましょう〜 プロジェクト番号を選択、 sum(case wh...

Centos7 esxi6.7 テンプレートの実際のアプリケーションの詳細な説明

1. Centos7.6システムを作成し、システムを最適化する1. NetworkManagerをオ...

nginx+FastDFS を使ってファイル管理システムを段階的に構築する

目次1. FastDFS の概要1. はじめに2. FastDFSストレージ戦略3. FastDFS...

CSS 疑似要素を使用して複数の連続する要素のスタイルを制御する方法

CSS 疑似要素を使用して要素を制御する場合、一部の要素のスタイルを変更する必要があることがよくあり...

Webフロントエンド開発エンジニアが習得すべきコアスキル

Web フロントエンド開発に含まれる内容は、主に W3C 標準の構造、動作、パフォーマンスです。では...

CentOS7.3 での MySQL 8.0.13 のインストールと設定のチュートリアル

1. 基本環境1. オペレーティングシステム: CentOS 7.3 2. MySQL: 8.0.1...

一般的なブラウザのユーザーエージェントの概要

1. 基礎知識: HTTP ヘッダー ユーザーエージェントユーザー エージェントは、ユーザー エージ...

MySQL で '%' を含むフィールドをクエリする方法の詳細な説明 (ESCAPE の使用法)

SQLのlike文では、例えば SELECT * FROM user WHERE username...

MySQL 分離レベルの詳細な説明と例

目次MySQL の 4 つの分離レベルデータ テーブルを作成します。分離レベルの設定物事の分離レベル...

Mysql の一時テーブルとパーティションテーブルの違いの詳細な説明

一時テーブルとメモリテーブルメモリ テーブルとは、メモリ エンジンを使用するテーブルを指します。テー...