JavaScript淘宝網メイン画像拡大鏡機能
労働者が仕事をうまくやりたいなら、まず道具を研ぐ必要があります。一定の効果を得るには、まずその原理を理解する必要があります。
虫眼鏡の機能は、小さい画像内のマウスの位置を取得し、大きい画像と小さい画像のサイズ比に従って大きい画像に表示する必要がある部分を計算し、位置決めを使用することです。を押すと、大きな画面に表示したい部分が右枠内に表示されます。
次にコードを見てみましょう。コードに基づいて理解するのが簡単になります。
html 部分
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>放大镜效果</title> <link rel="stylesheet" href="magnifier.css"> </head> <body> <div id="wrapper"> <!--小图--> <div id="img_min"> <!--图片--> <img src="/static/imghw/default1.png" data-src="test.jpg" class="lazy" alt="min"> <!--跟随鼠标的白块--> <p id="mousebg"></p> </div> <!--大图--> <div id="img_max"><img src="/static/imghw/default1.png" data-src="test.jpg" class="lazy" id="img2_img" alt="max"></div> </div> <script type="text/javascript" src="magnifier.js"></script> </body> </html>
css 部分
*{ margin: 0; padding: 0; } div{ position: relative; } div>div{ width: 300px; height: 300px; float: left; margin: 100px; overflow: hidden; } #img_min>img{ /*display: block;*/ width: 300px; } #img_max{ display: none; } #img_max>img{ position: absolute; top: 0; left: 0; display: block; width: 1500px; } #mousebg{ display: none; position: absolute; width: 60px; height: 60px; background-color: rgba(255,255,255,.7); top: 0; left: 0; }
最も重要な JavaScript 部分
window.onload = function () { var img1 = document.getElementById('img_min');//小图盒子 var img2 = document.getElementById('img_max');//大图盒子 var img2_img = document.getElementById('img2_img');//大图图片 var wrap = document.getElementById('wrapper'); var mousebg = document.getElementById('mousebg');//鼠标白块 var mul = 5; //当某一个模块dispaly:none的时候不能使用offsetWidth获取它的宽高 img1.onmouseover = function () { //鼠标进入 img2.style.display = 'block'; mousebg.style.display = 'block'; } img1.onmouseout = function () { //鼠标离开 img2.style.display = 'none'; mousebg.style.display = 'none'; } img1.onmousemove = function (event) { var _event = event||window.event;//兼容性处理 var mouseX = _event.clientX - wrap.offsetLeft - img1.offsetLeft; //计算鼠标相对与小图的位置 var mouseY = _event.clientY - wrap.offsetTop - img1.offsetTop; //特殊情况处理,分别靠近四条边的时候 if(mouseX<mousebg.offsetWidth/2){ mouseX = mousebg.offsetWidth/2; } if(mouseX>img1.offsetWidth-mousebg.offsetWidth/2){ mouseX = img1.offsetWidth-mousebg.offsetWidth/2; } if(mouseY<mousebg.offsetHeight/2){ mouseY = mousebg.offsetHeight/2; } if(mouseY>img1.offsetHeight-mousebg.offsetHeight/2){ mouseY = img1.offsetHeight-mousebg.offsetHeight/2; } //计算大图的显示范围 img2_img.style.left = -mul*mouseX+img2.offsetWidth/2+"px"; img2_img.style.top = -mul*mouseY+img2.offsetHeight/2+"px"; //使鼠标在白块的中间 mousebg.style.left = mouseX-mousebg.offsetWidth/2+"px"; mousebg.style.top = mouseY-mousebg.offsetHeight/2+"px"; } }
コードとコメントを読んで理解できたら、Li Yunlong の言葉を使って次のように言ってください。「ああ、あなたの少年は本当に天才です。」その後、次の分析部分をざっと閲覧すればOKです。
分析部分:
html 部分と css 部分は単純なレイアウト コードなのでこれ以上説明しません。コードの js 部分も比較的単純です。マウス移動イベント部分のコードを直接説明しましょう。
まず、小さな画像を基準にしてマウスの位置を取得する原理を説明するために画像を使用します。
コード内の操作を通じて、取得した値がマウスの相対位置の値であることがわかります。 img1 の左上隅に。
このステップを理解すると、実際に作業の半分が完了したと言えます。
その後、特殊な場合の処理をスキップし、画像を右側に配置する基本操作を直接実行します。
offsetWidth、offsetHeight、style.width、style.height の各プロパティが使用されるため、style.width、style.height と offsetWidth および offsetHeight の範囲は同じです。その他の違いについては、別のブログで詳しく説明します。まず画像を使用してこれらの属性を理解し、上記の属性と比較してみましょう (画像はインターネットからのもので、削除されました)
その後、コードを説明します:
右側の大きな画像フレーム内の画像の使用style.left が大きなピクチャ フレームに配置されているのは、マウスの移動方向が大きなピクチャ フレームのサイズに基づいて計算されるためです。小さい画像の比率、-mul*mouseX で計算されるのは、実際には大きいフレーム内の画像の相対位置ですが、このとき、右側のマウスの位置が画像の左上隅にあることがわかります。フレームなので、画像を中央に配置するために img2 .offsetWidth/2 を追加する必要があります。同様に、縦軸についても同様の処理を行うことができます。
//计算大图的显示范围 img2_img.style.left = -mul*mouseX+img2.offsetWidth/2+"px"; img2_img.style.top = -mul*mouseY+img2.offsetHeight/2+"px";
ここで、前のステップを実行すると、マウスが端に移動すると、マウスの小さな白いブロックが範囲外になることがあります。したがって、画像を処理して画像の範囲に制限する必要があります。マウスは白い透明なブロックの中央にあるため、マウスを白の半分の長さ/幅の位置に制限します。画像の境界線の上下左右のブロック。
//特殊情况处理,分别靠近四条边的时候 if(mouseX<mousebg.offsetWidth/2){ mouseX = mousebg.offsetWidth/2; } if(mouseX>img1.offsetWidth-mousebg.offsetWidth/2){ mouseX = img1.offsetWidth-mousebg.offsetWidth/2; } if(mouseY<mousebg.offsetHeight/2){ mouseY = mousebg.offsetHeight/2; } if(mouseY>img1.offsetHeight-mousebg.offsetHeight/2){ mouseY = img1.offsetHeight-mousebg.offsetHeight/2; }
左への距離が幅の半分未満の場合、白いブロックが移動し続けないように、mouseX を幅の半分にします。同じことが他の 3 つの方向にも当てはまります。
このステップを完了すると、エフェクトが完成します。
追伸: 抽象的な場所は絵を描くことで理解できます。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。

JavaScript で HTTP ステータス コードを取得する方法の紹介: フロントエンド開発では、バックエンド インターフェイスとの対話を処理する必要があることが多く、HTTP ステータス コードはその非常に重要な部分です。 HTTP ステータス コードを理解して取得すると、インターフェイスから返されたデータをより適切に処理できるようになります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法と、具体的なコード例を紹介します。 1. HTTP ステータス コードとは何ですか? HTTP ステータス コードとは、ブラウザがサーバーへのリクエストを開始したときに、サービスが
