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 のスケジュールされた自動バックアップを実装する方法

推薦する

変換を使用して純粋な CSS ポップアップ メニューを実装するためのサンプル コード

序文トップメニューを作成する場合、ポップアップのセカンダリメニューを作成する必要があります。 以前の...

Vue 日付時刻ピッカーコンポーネントの使い方の詳細な説明

この記事の例では、Vue の日付時刻ピッカーコンポーネントの具体的なコードを参考までに紹介します。具...

Vueは右上隅の時間表示のリアルタイム更新を実装します

この記事の例では、右上隅の時間表示のリアルタイム更新を実現するためのVueの具体的なコードを紹介しま...

MySQLとOracleの違いのまとめ(機能性能の比較、選択、使用時のSQLなど)

1. 同時実行性同時実行性は OLTP データベースの最も重要な機能ですが、同時実行性にはリソース...

Vueログイン機能の実装

目次前面に書かれたログインの概要ログインビジネスプロセスログインサービスの関連技術ポイントログイント...

MySQL で重複を削除するには、distinct または group by を使用する必要がありますか?

序文group by と distinctive のパフォーマンス比較について: インターネット上の...

MySQL の遅いクエリ操作の例の分析 [有効化、テスト、確認など]

この記事では、MySQL のスロー クエリ操作について例を挙げて説明します。ご参考までに、詳細は以下...

jsのイベントオブジェクトを深く理解しましょう

JS でよく使用されるイベントは次の通りです。ページイベント: load;フォーカス イベント: フ...

vue-element-admin プロジェクトのインポートとエクスポートの実装

vue-element-admin インポートコンポーネントのカプセル化テンプレートとスタイルまず、...

MySQL 起動エラー 1067 および文字セットを変更して再起動した後の無効な回復

公式サイトからmysql-5.6.37-winx64.zipの解凍バージョンをダウンロードし、構成フ...

MySQL 半同期レプリケーションの原理構成と導入の詳細な説明

環境の紹介: Ubuntu Server 16.04.2+MySQL 5.7.17 コミュニティ サ...

Vue3 AST パーサー - ソースコード分析

目次1. AST抽象構文木を生成する2. ASTのルートノードを作成する3. 子ノードの解析4. テ...

ES6のシンボルデータ型について詳しく説明します

目次シンボルデータタイプシンボルが表示される理由シンボルの特徴シンボルの応用rbオブジェクトにupメ...

MySQL挿入パフォーマンスを最適化する方法の例

MySQL パフォーマンスの最適化MySQL パフォーマンスの最適化とは、リソースを合理的に配置し、...

Docker-compose を使用して Django アプリケーションをオフラインでデプロイする方法

目次開発環境用のDocker-ceをインストールする開発環境用のDocker-composeをインス...