JavaScriptはeコマースプラットフォームの製品詳細を実装します

JavaScriptはeコマースプラットフォームの製品詳細を実装します

この記事では、電子商取引プラットフォームで商品の詳細を表示する一般的な例を紹介します。たとえば、ある東方ウェブサイトの携帯電話カテゴリの特定の携帯電話の詳細ページでは、携帯電話の詳細が表示されています。左側の小さな画像がユーザーのマウスフォーカスを取得すると、画面の右側に画像領域の大きな画像効果を表示できます。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.leftstyle.top (主な値はpx単位で追加する必要があります)を通じてアイコンの位置を変更することができます。ただし、大きい画像の動きとマスクレイヤーの動きは実際には逆であることに注意してください。例えば、マスクレイヤーが右に移動すると、大きい画像は実際には左に移動します(大きい画像は右側の領域を見せるために左に移動する必要があるため)。そのため、leftとtopに割り当てられた値は負の符号を付けて追加する必要があります。

基本的には、このケースに関わる基本的な知識ポイントと注意事項を紹介します。プログラミング手順と実装のアイデアをより明確に確認するには、コード(詳細なコメントを含む)を組み合わせることをお勧めします。このケースは、純粋な JS 基盤コードで実装されています (そのため、最適化できる領域が多数あります)。この機能を実装するには、より優れた簡単な方法があるかもしれませんが、最も基本的な JS コード実装を使用すると、コア コードとアルゴリズムをより明確に理解できるようになります。

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

以下もご興味があるかもしれません:
  • Taobao の商品画像切り替え効果を実現する JavaScript
  • Videojs+swiper が Taobao の商品詳細カルーセルを実現
  • 商品画像拡大鏡を実現する JavaScript

<<:  MySQL Binlog ログの読み取り時によくある 3 つのエラー

>>:  CentOS7 上で KVM 仮想化プラットフォームを構築する (3 つの方法)

推薦する

一般的でない js 演算演算子の概要

目次2. カンマ演算子3. JavaScript Null 結合演算子 (??) 4. JavaSc...

CSSリンクと@importの違いの詳細な説明

HTML に CSS を追加するにはどうすればいいですか? HTML で CSS を設定する方法は ...

ユーザーはその理由を知る必要がある

証券会社にいた頃、設計業務が忙しくなかったため、商品のマニュアルを書く役割を担ったことがありました。...

Vue3 ページ、メニュー、ルートの使用

目次1. メニューをクリックしてジャンプ1. ページ名の統一2. 管理ページを追加3. ルートを追加...

JavaScriptはオブジェクトの不要なプロパティを削除します

目次例方法1: 削除方法2: 分解補充する要約するThinking シリーズは、10 分で実用的なプ...

Ubuntuサーバーの一般的なコマンドの概要

以下のコマンドのほとんどは、コンソール/ターミナル/シェルで入力する必要があります。 'su...

MySQL接続クエリの原理と応用

概要MySQL の最も強力な機能の 1 つは、データ取得を実行しながらテーブルを結合できることです。...

docker エントリポイントファイルの詳細な説明

Dockerfile を作成するときは、コンテナが起動する前に初期化構成やカスタム構成を実行するため...

MySQL から Excel にテーブルデータをエクスポートする際の日時形式に関する簡単な説明

最近、MySQL を使用してテーブル データを Excel ファイルにエクスポートしました。MySQ...

MySQLユーザー権限管理の詳細な説明

目次序文: 1. ユーザー権利の概要2. 実際の権限管理序文:データベースのユーザー権限管理について...

MySQL 8.0 ウィンドウ関数の紹介と概要

序文MySQL 8.0 より前は、Oracle、SQL SERVER、PostgreSQL などの他...

HTML テーブル データを Json 形式に変換するサンプル コード

<table>テーブルデータをJSON形式に変換するJavaScript関数は次のとおり...

Docker Swarmの概念と使用法の詳細な説明

Docker Swarm は、Docker によって開発されたコンテナ クラスター管理サービスです。...

HTML における画像タグの使用方法の詳細な説明

HTML では、<img> タグはテキスト内の画像タグを定義するために使用されます。その...

HTML 言語百科事典

123WordPress.com-HTML noscriptオブジェクトolオプションPパラントプレ...