Vueは商品詳細ページの虫眼鏡機能を実装します

Vueは商品詳細ページの虫眼鏡機能を実装します

この記事では、商品詳細ページの虫眼鏡を実装するためのVueの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

テンプレートの内容

<div class="productLeft">
   <!-- 中央左の画像 -->
     <div class="mdImg">
         <img :src="require('../assets/imgs/details/'+mdImgUrl)" alt="">
     </div>
     <!-- マスクレイヤー-->
     <div v-show="isShow" class="marks" :style="{top:top+'px',left:left+'px'}"></div>
     <!-- マスク レイヤー ガラス superMarks-->
     <div @mouseenter="enter" @mouseleave="leave" @mousemove="marks" class="superMarks" ></div>
     <!--左側に小さな画像-->
     <div class="smImg">
         <!--左ボタン-->
         <div @click="前へ" class="前へ">
             <img src="../assets/icon/prev.png" >
         </div>
         <div class="smImgUl">
             <ul :style="{'margin-left':marginLeft+'px'}">
                 <li @mouseenter="enterLi(index)" v-for="(item,index) リスト" :key="index">
                     < 画像 :src="require('../assets/imgs/details/'+item.sm)" alt="">
                 </li>
             </ul>
         </div>
         <!-- 右ボタン -->
         <div @click="next" class="button-next">
             <img src="../assets/icon/next.png" >
         </div>
     </div>
    <!-- 左側に大きな画像 -->
     <div v-show="isShow" クラス="lgImg">
         <img :src="require('../assets/imgs/details/'+lgImgUrl)" alt="" :style="{top:topLgImg+'px',left:leftLgImg+'px'}">
     </div>
</div>

js:

< スクリプト >
「./common/headerT.vue」からheaderTをインポートします。
「./common/Header.vue」からヘッダーをインポートします。
エクスポートデフォルト{
    データ() {
        戻る {
            リスト:[{"sm":"s1.png","md":"s1.png","lg":"s1.png"},
            {"sm":"s2.png","md":"s2.png","lg":"s2.png"},
            {"sm":"s3.png","md":"s3.png","lg":"s3.png"},
            {"sm":"s4.png","md":"s4.png","lg":"s4.png"},
            {"sm":"s5.png","md":"s5.png","lg":"s5.png"},
            {"sm":"s6.png","md":"s6.png","lg":"s6.png"},
            {"sm":"s7.png","md":"s7.png","lg":"s7.png"},
            {"sm":"s8.png","md":"s8.png","lg":"s8.png"}],
            mdImgUrl:"s1.png",
            lgImgUrl:"s1.png",
            ulIndex:0, // 数 li 左に移動する
            marginLeft:0, // 左右に移動する距離 isShow:false, // マスク レイヤー マークと大きな画像を表示するかどうかを制御します"
            left:0, // 左の位置をマークします top:0, // 下の位置をマークします leftLgImg:0, // 大きな画像 lgImg の位置を移動します topLgImg:0 // 大きな画像 lgImg の位置を移動します }
    },
    メソッド: {
        //マウスが小さい画像に入ると、対応する中央の画像が表示されます。enterLi(e){
            //e は対応する添え字です//console.log(e);
            this.mdImgUrl=this.list[e].md;
            this.lgImgUrl=this.list[e].lg;
        },

        // 左ボタンと右ボタンをクリックして ul 内の li を移動します。各 li の幅は 74 ピクセルで、5 つの li を表示するには ul の幅は 370 ピクセルです。
        前(){
            //左に移動 -
            if(this.ulIndex>-(this.list.length-5)){
                this.ulIndex--;
                this.marginLeft=this.ulIndex*74;
                //コンソール.log(this.ulIndex)
            }
        },
        次(){
            //右に移動++
            if(this.ulIndex<0){
                 this.ulIndex++;
                this.marginLeft=this.ulIndex*74;
                //コンソール.log(this.ulIndex)
            }
        },
        
        //マウスが入ったり出たりする enter(){
            this.isShow=true
        },
        離れる(){
            this.isShow=false
        },
        //マスクレイヤーの虫眼鏡マーク(e){
            //console.log(e.offsetX,e.offsetY) //マウスが移動したときの位置
            var marksWidth=200;//マークの幅 var marksHeight=200;//マークの高さ this.left=e.offsetX-marksWidth/2;   
            this.top=e.offsetY-marksHeight/2;
            //コンソールログ(this.left,this.top) 
            if(this.left<0){
                左 = 0;
            }それ以外の場合(this.left>250){
                左 = 250;
            }
            if(this.top<0){
                上へ
            }それ以外の場合(this.top>250){
                上へ
            }
            //コンソールログ(this.left,this.top) 
            
            //中サイズの画像 div の幅と高さは 450、大サイズの画像 div の幅と高さは 800 です
            this.leftLgImg=-this.left*800/450;
            this.topLgImg=-this.top*800/450;
        }
    },
    計算: {
    },
    コンポーネント:{
        "ヘッダー1":ヘッダーT,
        "headertwo":ヘッダー
    },
    時計:
    },
}
</スクリプト>

CS: ...

<スタイルスコープ>

    。コンテンツ{
        幅:1200ピクセル;
        マージン:0 自動;
    }
    .content>.product{
        ディスプレイ: フレックス;
        コンテンツの両端揃え: スペースの間;
    }
    /* 左サイズ画像スタイル*/
    .productLeft{
        幅:450ピクセル;
        位置: 相対的;
    }
    /* 左中央の画像 */
    .mdImg,.mdImg>画像{
        幅:450ピクセル;
        高さ:450px;
    }
    /*マスクレイヤーのスーパーマーク */
    .superMarks{
        幅:450ピクセル;
        高さ:450px;
        背景色:rgba(220, 220, 220, 0);
        位置:絶対;
        上:0px;
        左:0px;
    }
    /* マスクレイヤー*/
    .マーク{
        幅:200px;
        高さ:200px;
        位置:絶対;
        背景色:rgba(220, 220, 220, 0.5);
        /*top:0px; //インラインは動的に上と左を設定します
        左:0px;*/
    }
    /* 左側に小さい画像 */
    .smImg{
        ディスプレイ:フレックス;
        アイテムの位置を中央揃えにします。
        コンテンツの両端揃え: スペースの間;
        オーバーフロー:非表示;
    }
    .smImgUl{
        オーバーフロー:非表示;
        幅:370ピクセル;
    }
    .smImg ul{
        ディスプレイ: フレックス;
        幅:370ピクセル;
        マージン:0;
        パディング:0;
    }
    .smImg ul>li{
        パディング:0 3px;
    }
    .smImg 画像{
        高さ:60px;
        マージン:4px;
    }
    /*左側の大きな画像を非表示にする*/
    .lgImg{
        幅:400ピクセル;
        高さ:400px;
        オーバーフロー: 非表示;
        位置:絶対;
        上:0px;
        左:450px;
        境界線:2px実線 #aaa;
        背景色:#fff;
    }
    .lgImg 画像{
        幅:800ピクセル;
        高さ:800px;
        位置:絶対;
        /* 上:100px;
        左:100px;*/
    }

    /* 積の右側 */
    .productRight{
        幅:700ピクセル;
        
    }
    /* 左ボタンと右ボタン */
    .button-prev、.button-next{
        幅:35px;
        高さ:35px;
        行の高さ: 30px;
        境界線:1px実線 #ddd;
        境界線の半径:50%;
        テキスト配置:中央;
    }
    .button-prev:hover、.button-next:hover{
        背景色:#eee;
    }
    .button-prev>画像、.button-next>画像{
        幅:20px;
        高さ:20px;
    }
</スタイル>

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

以下もご興味があるかもしれません:
  • Vueは製品の拡大鏡効果を実現します
  • Vue3 カプセル化された虫眼鏡コンポーネントのサンプルコード
  • Vue3は画像拡大鏡効果を実現します
  • Vueはタブ切り替えの虫眼鏡効果を実装します
  • Vueはシンプルな虫眼鏡効果を実装します
  • Vueは虫眼鏡付きの検索ボックスを実装します
  • Vue3.0 手書き拡大鏡効果
  • Vue が虫眼鏡効果を実装
  • 手書きのVue拡大鏡効果
  • Vue3はJingdong製品詳細ページの虫眼鏡効果コンポーネントをカプセル化します

<<:  Linux でアップロードされたファイルのスケジュールされたバックアップと増分バックアップを実装する方法

>>:  CentOS7 で MySQL のスケジュールされた自動バックアップを実装する方法

推薦する

threejs でリアルタイムポリゴン屈折を実装する方法

目次序文ステップ1: セットアップと前方屈折ステップ2: 反射とフレネル方程式ステップ3: 多面屈折...

MySQL プロセス制御 IF()、IFNULL()、NULLIF()、ISNULL() 関数

MySQL では、IF()、IFNULL()、NULLIF()、および ISNULL() 関数を使用...

CSS を使用して 3 列レイアウトを実装するサンプル コード。中央の列は適応型で、テキスト サイズに応じて幅が変わります。

Baiduのインタビューで遭遇する質問は、次のレイアウト効果を達成する必要がある。 中央の紫色の列...

フロントエンドでよく使われるjs関数メソッド

目次1. メール2. 携帯電話番号3. 電話番号4. URLアドレスですか? 5. 文字列ですか? ...

JS デコレータ パターンと TypeScript デコレータ

目次デコレータパターンの紹介TypeScript のデコレータデコレータの使用デコレーターファクトリ...

NavicatでMySQLビッグデータをインポートする際のエラーの解決方法

Navicat がエクスポートしたデータはインポートできません。最後に、MySQLコマンドのインポー...

MySQL 5.7.24 圧縮パッケージのインストールと設定方法のグラフィックチュートリアル

この記事では、参考までにMySQL 5.7.24圧縮パッケージのインストールチュートリアルを紹介しま...

Nginx の場所と proxy_pass パスの設定の問題の概要

目次1. Nginxロケーションの基本設定1.1 Nginx 設定ファイル1.2 Pythonスクリ...

MySQLの基本的な共通コマンドの概要

目次MySQL の基本的な共通コマンド1. SQL文2. テーブルを作成する3. フィールドのプロパ...

Vue カスタム箇条書きボックス効果 (確認ボックス、プロンプトボックス)

この記事の例では、参考のためにVueカスタムポップアップ効果の具体的なコードを共有しています。具体的...

VMware 仮想マシンの 3 つの接続方法の例の分析

NATこのようにして、仮想マシンのネットワーク カードはホストの VMnet8 に接続されます。この...

Docker - コンテナマウントディレクトリを変更する3つの方法のまとめ

方法 1: 設定ファイルを変更する (docker サービスを停止する必要があります) 1. doc...

MySql8 WITH RECURSIVE 再帰クエリ親子コレクションメソッド

背景コメントに似た機能を開発する場合は、必要に応じてすべてのコメントのサブセットをクエリする必要があ...

MySQL の CPU 負荷が高い問題のトラブルシューティング

MySQL による CPU 負荷の上昇今日の午後、MySQL によってサーバーの負荷が高くなる問題を...

Vue プロジェクトで axios をカプセル化する方法 (http リクエストの統合管理)

1. 要件Vue.js フレームワークを使用してフロントエンド プロジェクトを開発する場合、サーバ...