この記事では、電子商取引プラットフォームで商品の詳細を表示する一般的な例を紹介します。たとえば、ある東方ウェブサイトの携帯電話カテゴリの特定の携帯電話の詳細ページでは、携帯電話の詳細が表示されています。左側の小さな画像がユーザーのマウスフォーカスを取得すると、画面の右側に画像領域の大きな画像効果を表示できます。JS部分は主にマウスオーバー、マウスの離脱、マウスの移動などのイベントに関係し、小さなアルゴリズム式が含まれています。最初に効果を示します。 電子商取引プラットフォームの効果図を以下に示します。 この場合のコード部分:HTML構造: <div class="box"> <img src="images/s3.png" alt=""> <div class="mask"></div> <div class="big"> <img src="images/big.jpg" alt=""> </div> </div> CSS スタイル: <スタイル> * { パディング: 0; マージン: 0; } 。箱 { 位置: 相対的; 上: 70px; 左: 30px; 幅: 400ピクセル; 高さ: 400px; 境界線: 1px 実線 #ccc; } .box > 画像 { 高さ: 100%; } 。マスク { 表示: なし; 位置: 絶対; 上: 0; 左: 0; 幅: 300ピクセル; 高さ: 300px; ボックスのサイズ: 境界線ボックス; 背景色: rgba(254, 222, 79, .5); 境界線: 1px 実線 #ccc; カーソル: 移動; /*マウスの状態をクロスに変更します*/ } 。大きい { 表示: なし; 位置: 絶対; 上: 0; 左: 410px; 幅: 500ピクセル; 高さ: 500px; 境界線: 1px 実線 #ccc; オーバーフロー: 非表示; zインデックス: 999; } .bigimg{ /* .big の下の img に位置属性を指定して、マスク レイヤーの動きに合わせて位置を移動できるようにします */ 位置: 絶対; 上: 0; 左: 0; } </スタイル> JavaScript の動作: <スクリプト> window.addEventListener('load', 関数() { // 1. 要素を取得する var box = document.querySelector('.box'); var マスク = document.querySelector('.mask'); var big = document.querySelector('.big'); // 2. イベントを登録する // (1) マウスがボックス上を通過すると、マスクレイヤーと右側の大きな画像が表示される onmouseover box.addEventListener('mouseover', 関数() { mask.style.display = 'ブロック'; big.style.display = 'ブロック'; }) // (2) マウスがボックスから離れると、マスクレイヤーと右側の大きな画像が非表示になります。 box.addEventListener('mouseout', 関数() { マスクスタイル表示 = 'なし'; big.style.display = 'なし'; }) // (3) マスクレイヤーをマウスで移動させる(このイベントはマウスが取得されたときに書き込まれる) box.addEventListener('mousemove', 関数(e) { // (1). まずボックス内のマウスの座標を計算します。ボックス内のマウスの座標 = 画面上のマウスの座標 - ボックスの offsetLeft/offsetTop var x = e.pageX - this.offsetLeft; var y = e.pageY - this.offsetTop; //(2)マウスはマスクレイヤーの中央にある必要があるため、マウスをマスク層の左上隅から右下に移動する必要があります。つまり、マウスの座標の半分のマイナスの座標は、高さの半分とマスクの最終的な左側のマスク=マスクの最終的な左側の幅ですマスクレイバーマスキー= y -mask.offeitheight // //マスク層の垂直中央にある水平方向の中央。マスクレイヤーの - マスクレイヤーの高さ//(4)x座標が0未満の場合、マスクレイヤーの最大移動距離を0で停止させます=マスクレイヤーの親ボックスの幅 - マスク層の幅(この場合のマスクレイヤーは正方形であり、垂直レンジが同じであるため) var maskMax = box.offsetWidth - mask.offsetWidth; // マスクレイヤーの最大移動距離 // マスクレイヤーの移動可能範囲を決定し制限します: 水平移動可能範囲: maskX <= 0 ? maskX = 0 : maskX = maskX; // 水平方向の最小可動範囲 maskX >= maskMax ? maskX = maskMax : maskX = maskX; // 水平方向の最小可動範囲 // 制限付きマスクレイヤーの可動範囲を決定します: 垂直方向の可動範囲: maskY <= 0 ? maskY = 0 : maskY = maskY; // 最小垂直可動範囲 maskY >= maskMax ? maskY = maskMax : maskY = maskY; // 最大垂直可動範囲 // マスクの左と上(マスクを配置する位置)のマウス座標値を付与します。px単位の加算が必要なので注意! ! ! mask.style.left = maskX + 'px'; mask.style.top = maskY + 'px'; // (5) 右側の大きな画像をマスクレイヤーと一緒に移動させます // 大きな画像の移動距離 = マスクレイヤーの移動距離 * 大きな画像の最大移動距離 / マスクレイヤーの最大移動距離 // 大きな画像を取得します var bigImg = big.querySelector('img'); // 大きな画像の最大移動距離 var bigMax = bigImg.offsetWidth - big.offsetWidth; // 大きな画像の移動距離 XY var bigX = maskX * bigMax / maskMax; var bigY = maskY * bigMax / maskMax; // 注意: 1. bigImg によって取得された要素には、位置を移動するための CSS 配置属性が必要です。配置がないと、位置は変更されません。// 2. 大きな画像とマスク レイヤーの動きは反対方向です。マスク レイヤーが左に移動すると、大きな画像は実際には右に移動するため、値は負の数になります。bigImg.style.left = -bigX + 'px'; bigImg.style.top = -bigY + 'px'; }) }) </スクリプト> エフェクト表示:1. プログラムが実行中で、ユーザーのマウスが左側の小さな画像 (.box) の上を通過していない場合: 2. マウスを左側の小さな画像の上に置くと、次のようになります。 3. マウスを左側の小さな画像 (.box) の上に移動すると、次のようになります。 ケースの知識ポイントと詳細:1. HTML 構造:主な構造は、画像付きの大きな div (つまり、左側の小さな画像) と 2 つの div (マスク レイヤーと右側の大きな画像付きの div) です。この 3 つの要素のうち、左側の小さな画像だけがデフォルトで表示され、他のマスク レイヤーと大きな画像はデフォルトで非表示 (つまり、display: none;) になっており、マスク レイヤーと大きな画像は、ポジショニング (子と親) によって対応する位置に配置されます。ここで注意すべき点は、右側の大きな画像の z-index に値を指定する必要があることです。通常、右側の大きな画像の元の領域にはコンテンツが表示されており、大きな画像がその下に押される可能性があるため、階層について言及する必要があります。 2. CSS スタイル部分:スタイルは一般的なスタイルに従って指定できます。注意する必要があるのは、大きな画像の img に position: absolute; の絶対位置を指定する必要があることです。これにより、JS 部分は画像の位置を左と上に移動し、大きな画像が小さな画像内のマウスの動きに合わせて移動する効果を実現できます。 3。主にイベント(マウスオーバー)、マウスの移動イベント(onmousemove)を設計します。 :block; ) 、マウスは表示されますマウス座標を使用してマスク層の位置を決定する場合、マウスはマスク層の中心にある必要があるため、得られたマウス座標をマスク層の高さと幅の半分と右に移動して、得られた座標値がマスク層に割り当てられるようにします(マスク層の左上角の座標を決定します)。 4. マスク レイヤーはマウスで移動できますが、もう 1 つ注意点があります。マスク レイヤーの移動範囲は制限される必要があり、親ボックスを超えることはできないため、判断を追加する必要があります。マスク レイヤーが左に 0 まで移動すると、それ以上移動できなくなります。右にどれだけ移動できるかは、実際には右のマスク レイヤーとその親ボックス (ie.box) の幅によって決まります。マスク レイヤーの移動範囲は 0 から (box.offsetWidth - mask.offsetWidth) まで、つまり 0 から親ボックスの幅 - マスク レイヤーの幅までであるためです。 5. マスクレイヤーは正常に移動でき、範囲も制限されています。次は右側の大きな画像の表示です。ここでは主にアルゴリズムを設計します。 なぜなら、大きい画像の動きとマスクレイヤーの動きは実際には比例しているからです。つまり、大きい画像はマスクレイヤーが動く分だけ動きます(例えば、マスクレイヤーが1px動き、大きい画像が2px動く場合、マスクレイヤーが2px動くと、大きい画像は4px動くはずです)。この式から、小さい画像が動くときに大きい画像が動くべき対応する距離データを取得し、このデータを右側の大きい画像(つまり、divの下のimg)に割り当て、 style.leftとstyle.top (主な値はpx単位で追加する必要があります)を通じてアイコンの位置を変更することができます。ただし、大きい画像の動きとマスクレイヤーの動きは実際には逆であることに注意してください。例えば、マスクレイヤーが右に移動すると、大きい画像は実際には左に移動します(大きい画像は右側の領域を見せるために左に移動する必要があるため)。そのため、leftとtopに割り当てられた値は負の符号を付けて追加する必要があります。 基本的には、このケースに関わる基本的な知識ポイントと注意事項を紹介します。プログラミング手順と実装のアイデアをより明確に確認するには、コード(詳細なコメントを含む)を組み合わせることをお勧めします。このケースは、純粋な JS 基盤コードで実装されています (そのため、最適化できる領域が多数あります)。この機能を実装するには、より優れた簡単な方法があるかもしれませんが、最も基本的な JS コード実装を使用すると、コア コードとアルゴリズムをより明確に理解できるようになります。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQL Binlog ログの読み取り時によくある 3 つのエラー
>>: CentOS7 上で KVM 仮想化プラットフォームを構築する (3 つの方法)
検索パフォーマンスは最速から最遅まで次のとおりです (私が聞いたところによると)。 1 番目: ti...
これまでの 3 つの記事では、論理バックアップと物理バックアップを含む、MySQL データベースの一...
で+ 時間 17:23に at> touch /mnt/file{1..9} ##アクションを...
1. mysqlをインストールします。 udo apt-getでmysql-serverをインストー...
序文json を使用したことがある人なら、オブジェクトを文字列化してからバックエンドに送信するのが一...
コンポーネントの props (props はオブジェクトです)機能: コンポーネントに渡されたデー...
この記事では、ネイティブ JS で実装された複合モーションを紹介します。複合モーションとは、異なる属...
* 住所 - 住所* blockquote - ブロック引用* center - 中央揃えブロック*...
このソリューションの利点はシンプルさと使いやすさですが、欠点はダウンタイムが長くなることです。 した...
以下は、HTML で正規表現を使用してテーブルをチェックするサンプル コードです。具体的なコードの内...
a タグ疑似クラスの役割: 「:link」: 訪問されていないタグの状態。 「:visited」: ...
序文ルーティングの管理は、ほとんどのシングルページ アプリケーションにとって不可欠な機能です。 Vu...
目次マルチアプリケーションの展開1-Tomcat 構成1.1- プロジェクト構成1.2-サービス構成...
最近、クライアントのために印刷していたとき、ページのヘッダーを印刷するのではなく、表の内容だけを印刷...
この記事では、指定された日付間のカウントダウンを実装するためのVueの具体的なコードを例として紹介し...