虫眼鏡の詳細のJavaScript実装

虫眼鏡の詳細のJavaScript実装

1. レンダリング

2. 実施原則

幅と高さが等しい拡大率を持つ 2 つの画像を使用し、マウス オフセット、要素オフセット、要素自体の幅と高さ、および js 内のその他の属性を組み合わせると完成します。左側のマスクは Xpx 移動し、右側の大きな画像は X* 倍数 px 移動します。残りは小学校の数学を使用して計算できます。

HTMLとCSS :

 <div class="wrap">
    <!-- サムネイルとマスク -->
    <div id="small">
      <img src="img/1.jpg" alt="" >
      <div id="マーク"></div>
    </div>
    <!-- 同じスケールで拡大した画像 -->
    <div id="big">
      <img src="img/2.jpg" alt="" id="bigimg">
    </div>
  </div>
 * {
      マージン: 0;
      パディング: 0;
    }
    。包む {
      幅: 1500ピクセル;
      マージン: 100px 自動;
    }

    #小さい {
      幅: 432ピクセル;
      高さ: 768ピクセル;
      フロート: 左;
      位置: 相対的;
    }

    #大きい {
      /* 背景色: シーグリーン; */
      幅: 768ピクセル;
      高さ: 768ピクセル;
      フロート: 左;
      /* ファインダーの向こう側は隠れています */
      オーバーフロー: 非表示;
      左マージン: 20px;
      位置: 相対的;
      表示: なし;
    }

    #大きな{
      /* 幅: 864px; */
      位置: 絶対;
      左: 0;
      上: 0;
    }

    #マーク {
      幅: 220ピクセル;
      高さ: 220px;
      背景色: #fff;
      不透明度: .5;
      位置: 絶対;
      左: 0;
      上: 0;
      /* マウス矢印スタイル*/
      カーソル: 移動;
      表示: なし;
    }

// 小さい画像とマスク、大きい画像、大きいボックスを取得します。var small = document.getElementById("small")
    var マーク = document.getElementById("マーク")
    var big = document.getElementById("big")
    var bigimg = document.getElementById("bigimg")
    // 小さな画像領域でマウスの動きのイベントを取得します。マスクはマウスの動きに従います。small.onmousemove = function (e) {
      // サムネイルに対するマスクのオフセットを取得します (マウス座標 - 本体に対するサムネイルのオフセット - マスクの幅または高さの半分)
      var s_left = e.pageX - mark.offsetWidth / 2 - small.offsetLeft
      var s_top = e.pageY - mark.offsetHeight / 2 - small.offsetTop
      // マスクはサムネイル内でのみ移動できるため、マスクオフセットのしきい値(サムネイル値に対する相対値)を計算する必要があります。
      var max_left = small.offsetWidth - mark.offsetWidth;
      var max_top = small.offsetHeight - mark.offsetHeight;
      // マスクが移動すると、右側の大きな画像も移動します (マスクが 1 ピクセル移動するごとに、画像は反対方向に n 倍の距離移動する必要があります)
      var n = big.offsetWidth / mark.offsetWidth
      // マスクがマウスの動きに追従する前に判断します。サムネイルに対するマスクのオフセットは範囲を超えることはできず、範囲を超えた場合は再割り当てする必要があります (重要な値は上記で計算されています: max_left と max_top)
      // 水平境界を決定する if (s_left < 0) {
        s_左 = 0
      } そうでない場合 (s_left > max_left) {
        s_left = 最大_left
      }
      //垂直境界を判断する if (s_top < 0) {
        s_トップ = 0
      } そうでない場合 (s_top > max_top) {
        s_top = 最大トップ
      }
      // マスクの左と上に値を割り当てます(動的?e.pageXとe.pageYは量が変わるので)、移動します!
      mark.style.left = s_left + "px";
      mark.style.top = s_top + "px";
      // 大きな画像が移動する距離を計算します var levelx = -n * s_left;
      var verticaly = -n * s_top;
      // 画像を移動します bigimg.style.left = levelx + "px";
      bigimg.style.top = verticaly + "px";
    }
    // マスクとフォローアップスタイルは、マウスが小さい画像内に移動したときにのみ表示され、マウスが小さい画像から移動すると消えます。small.onmouseenter = function () {
      mark.style.display = "ブロック"
      big.style.display="ブロック"
    }
    small.onmouseleave = 関数(){
      mark.style.display = "なし"
      big.style.display="なし"
    }

3. まとめ

  • マウスのフォーカスが移動すると、そのオフセットは動的になります。親要素と子要素が配置された後、要素のlefttop値を動的に変更することで、「動的」な効果が実現されます。
  • 大きい画像/小さい画像 = 虫眼鏡(マスク)/ファインダー
  • 2 つの画像は等しい比率で拡大縮小する必要があります。

js で虫眼鏡を実装する方法に関する詳細な記事はこれで終わりです。js で虫眼鏡を実装する方法に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Javascript サンプル プロジェクトでの虫眼鏡効果の実装プロセス
  • JavaScript で虫眼鏡の特殊効果を実現
  • JavaScript が Jingdong の虫眼鏡の特殊効果を模倣
  • 虫眼鏡ケースのJavaScriptオブジェクト指向実装
  • JavaScript が Jingdong の虫眼鏡効果を模倣
  • JavaScript が Taobao の虫眼鏡効果を模倣
  • 虫眼鏡効果を実現するJavaScript
  • js で虫眼鏡効果を実現するためのアイデアとコード

<<:  CSS 要素で計算されたスタイルを取得します (カスケード/最終スタイル後)

>>:  CSS フィルターを使用してマウスオーバー効果を記述する例

推薦する

Linux ファイルを分割するための split コマンドの詳細な説明

いくつかの簡単な Linux コマンドを使用すると、ストレージまたは電子メールの添付ファイルのサイズ...

mysql-8.0.16 winx64 最新インストール チュートリアル (画像とテキスト付き)

最近、データベースについて学び始めました。最初にやったことは、データベースとは何か、データベースとデ...

Node.js ファイルのコピー、フォルダの作成、その他の関連操作

NodeJS は次のファイルをコピーします:通常、小さなファイルのコピー操作では、ストリーム パイプ...

MySQL Installer 8.0.21 インストール チュートリアル (画像とテキスト付き)

1. 理由新しいシステムに MySQL を再インストールする必要があったので、将来詳細を忘れた場合...

Linux で AutoFs マウント サービスをインストールするチュートリアル

Samba サービスでも NFS サービスでも、サーバーの起動時にリモート共有リソースが自動的にマ...

Dockerの匿名マウントと名前付きマウントの具体的な使用法

目次データ量匿名マウントと名前付きマウントデータボリュームの場所データ量匿名マウントと名前付きマウン...

ServerSocketのデフォルトIPバインディングの実装プロセスの詳細な説明

開発中にサーバーを起動する必要がある場合、ローカルテストではポートを直接書き込み、実際の環境ではバイ...

MySQLカーソルの詳細な紹介

目次1. カーソルとは何ですか? 2. カーソルの使い方1. カーソルを宣言する2.カーソルを開く3...

ウェブページの幅を携帯電話の画面(ビューポート)の幅に自動的に適応させる実装コード

一般的な書き方は次のとおりです。 XML/HTML コードコンテンツをクリップボードにコピー<...

指定したディレクトリに nginx をインストールする方法の例

会社の要件により、異なる場所にある 2 つの nginx サーバーを同じマシンにインストールする必要...

上部の固定ナビゲーションバーによって CSS アンカーの配置がブロックされる問題の解決方法

多くのウェブサイトでは、ユーザーが簡単に検索したり他のページに移動したりできるように、上部にナビゲー...

Vue で $attrs と $listeners を使用するチュートリアル

目次導入例要約する導入$属性すべての親コンポーネントのプロパティを継承します (props を通じて...

Centos 7 システムの Tomcat サーバーの詳細な分析

目次1. tomcatの起源1. Tomcat アプリケーションのシナリオ2. Tomcatに必要な...

HttpsページでBaiduシェアを使用するためのソリューション

サイト全体で https アクセスを有効にしてから、共有コードが利用できなくなり、有効になっていた小...

Linux の 5 ステップ ビルド カーネル ツリー

目次0. システムに付属するカーネルツリー1. 環境設定最初のステップステップ2 2. ソースコード...