vue中圖片放大鏡功能

来源:https://www.cnblogs.com/zhengzemin/archive/2019/10/16/vue_photo_Zoom_display.html
-Advertisement-
Play Games

仿淘寶詳情頁圖片滑鼠移過去可對圖片放大顯示在右側 效果圖如下圖,此功能支持PC端與移動端 接下來進入代碼實現環節: 先準備兩張圖片,一張小圖片叫 '土味.jpg',大小160*91;一張大圖片叫 ' 土味Big.jpg ',大小320*181。 大家看圖片名字是什麼就知道我要乾什麼,大家都懂的,接下 ...


仿淘寶詳情頁圖片滑鼠移過去可對圖片放大顯示在右側

效果圖如下圖,此功能支持PC端與移動端

 

接下來進入代碼實現環節:

先準備兩張圖片,一張小圖片叫 '土味.jpg',大小160*91;一張大圖片叫 ' 土味Big.jpg ',大小320*181。

大家看圖片名字是什麼就知道我要乾什麼,大家都懂的,接下來素材準備好了,進入代碼環節:

html結構:

<div class="productLeft">
                <!-- 左側中圖  -->
                <div class="mdImg">
                    <img :src="qall" alt="">
                </div>
                <!-- 遮罩層  -->
                <div v-show="isShow" class="marks" :style="{top:top+'px',left:left+'px'}"></div>
                <!-- 遮罩層 玻璃板 superMarks -->
                <div v-if="isPC==false" @touchstart.prevent="enter" @touchend.prevent="leave"  @touchmove.prevent="marks" @click.prevent="sub()" class="superMarks" ></div>

                <div v-if="isPC==true" @mouseenter="enter" @mouseleave="leave"  @mousemove="marks" @click.prevent="sub()" class="superMarks" ></div>

                <div v-show="isShow" class="lgImg">
                    <img :src="qallBig" alt="" :style="{top:topLgImg+'px',left:leftLgImg+'px'}">
                </div>
            </div>

js部分:

export default{
        name : 'blog-header',
        data(){
            return{
                isPC:true,
                // 大圖片
                qall: '../../static/image/土味.jpg',
                qallBig: '../../static/image/土味Big.jpg',
                isShow:false,   //控制遮罩層marks和大圖片是否顯示"
                left:0,       //marks左移位置
                top:0,         //marks下移位置
                leftLgImg:0,       //大圖lgImg移動的位置
                topLgImg:0         //大圖lgImg移動的位置
            }
            
        },
        methods:{
          //滑鼠進入和離開
        enter(){
            this.isShow=true;
        },
        leave(){
            this.isShow=false;
        },
        //遮罩層放大鏡
        marks(e){
            var marksWidth=48;//marks的寬
            var marksHeight=48;//marks的高
           if(this.isPC==true){
            //PC端
                this.left=e.offsetX-marksWidth/2;   
                this.top=e.offsetY-marksHeight/2;
                if(this.left<0){
                    this.left=0;
                }else if(this.left>160){
                    this.left=160;
                }
                if(this.top<0){
                    this.top=0;
                }else if(this.top>160){
                    this.top=160;
                }
                
                //大d圖片除以小的圖片的寬高
                this.leftLgImg=-this.left*320/160;
                this.topLgImg=-this.top*181/91;
            }else{
                //移動端
                this.left=e.changedTouches[0].clientX-marksWidth/2;   
                this.top=e.changedTouches[0].clientY-marksHeight/2;
                if(this.left<0){
                    this.left=0;
                }else if(this.left>160){
                    this.left=160;
                }
                if(this.top<0){
                    this.top=0;
                }else if(this.top>45){ 
            //45就是小圖片的高度的一半,91/2
this.top=45; } //大d圖片除以小的圖片的寬高 this.leftLgImg=-this.left*320/160; this.topLgImg=-this.top*181/91; } } }, mounted(){ if (navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i,)) { this.isPC = false; } else { console.log('PC端') } } }

css部分:

/* 左側大小圖樣式 160*91  320*181*/
    .productLeft{

        width:160px;
        position: relative;

    }
    /* 左側中圖 */
    .mdImg,.mdImg>img{
        width:160px;
        height:91px;
        margin-left: 15px;
    }
    /*遮罩層superMarks */
    .superMarks{
        width:160px;
        height:91px;
        background-color:rgba(220, 220, 220, 0);
        position:absolute;
        top:0px;
        left:0px;

    }
    /* 遮罩層 */
    .marks{
        width:48px;
        height:48px;
        position:absolute;
        background-color:rgba(220, 220, 220, 0.5);
        /*top:0px;  //內聯設置了動態的top,left
        left:0px;*/
    }
    
    /* 左側隱藏大圖 */
    .lgImg{
        width:160px;
        height:91px;
        overflow: hidden;
        position:absolute;
        top:0px;
        left:195px;
        border:2px solid #aaa;
        background-color:#fff;
    }
    .lgImg img{
        width:320px;
        height:181px;
        position:absolute;
        /*top:100px;
        left:100px;*/
    }

相容:移動端可f12選擇移動端查看(滑鼠長按移動查看效果),pc端滑鼠移動查看效果

大家的圖片的路徑記得要寫對!!!

 

還有第二種方法(vue的寫法)

vue-piczoom

先安裝此插件:

 # 安裝 install npm install vue-piczoom --save 

使用:

# 使用 use
--script
import PicZoom from 'vue-piczoom'
export default {
  name: 'App',
  components: {
    PicZoom
  }
}

--html
<pic-zoom url="static/aze.jpg" :scale="3"></pic-zoom>

Suggest 註意事項

組件預設是100%的高寬,所以建議將組件包含在一個有固定高寬的容器內。如:

<div class="pic-box"> <!--pic-box:width:500px;height:500px-->
     <pic-zoom url="static/imac2.jpg" :scale="3"></pic-zoom>
</div>

相容:支持pc端,不支持移動端

Github

雖然以上的兩種方法已經可以滿足我們了,

但還為大家在網上搜索到以下的實現方法,大家有興趣可以移步觀看:

  1. 使用vue photo zoom pro:https://codepen.io/xbup/project/editor/AjnEgE
  2. js仿淘寶主圖放大鏡功能:https://www.moyublog.com/codes/2019-07-06/4.html
  3. vue.js手機端圖片點擊放大展示代碼:https://www.sucaihuo.com/js/3144.html

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前兩篇講了solr安裝和導入數據,這篇講如何整合到SSM中。 一、整合SSM 1.1 引入依賴 1.2 初始化solr 1.3 寫service 1.4 寫控制層 1.5 查詢 二、IK分詞器 2.1.添加jar包 下載地址:https://search.maven.org/search?q=com ...
  • 1 前言 在使用Kylin的時候,最重要的一步就是創建cube的模型定義,即指定度量和維度以及一些附加信息,然後對cube進行build,當然我們也可以根據原始表中的某一個string欄位(這個欄位的格式必須是日期格式,表示日期的含義)設定分區欄位,這樣一個cube就可以進行多次build,每一次的 ...
  • Flink 的 API 大體上可以劃分為三個層次:處於最底層的 ProcessFunction、中間一層的 DataStream API 和最上層的 SQL/Table API,這三層中的每一層都非常依賴於時間屬性。時間屬性是流處理中最重要的一個方面,是流處理系統的基石之一,貫穿這三層 API。在 ...
  • --創建測試表 if object_id(N'T_Test',N'U') is null CREATE TABLE [dbo].[T_Test] ( [ID] int IDENTITY(1, 1) PRIMARY key NOT NULL, [Grouping] varchar(50) NOT NU... ...
  • 1.如果要用子查詢,那就用EXISTS替代IN、用NOT EXISTS替代NOT IN。因為EXISTS引入的子查詢只是測試是否存在符合子查詢中指定條件的行,效率較高。無論在哪種情況下,NOT IN都是最低效的。因為它對子查詢中的表執行了一個全表遍歷。 2.對查詢進行優化,應儘量避免全表掃描,首先應 ...
  • 背景 在如今的互聯網環境下,海量數據已隨處可見並且還在不斷增長,對於如何存儲處理海量數據,比較常見的方法有兩種: 垂直擴展:通過增加單台伺服器的配置,例如使用更強悍的 CPU、更大的記憶體、更大容量的磁碟,此種方法雖然成本很高,但是實現比較簡單,維護起來也比較方便。 水平擴展:通過使用更多配置一般的服 ...
  • Mysql+Keepalived雙主熱備高可用操作記錄 環境: ubuntu18.04.2 mysql5.7.21 實現高可用之前確保自己的mysql已經是主備或者互為主備了,mysql互為主備操作請看我上篇文章: https://www.cnblogs.com/-admin-/p/11654318 ...
  • 昨天我拿了本《安卓開發大全》的書,把它放進了冰箱,你猜怎麼樣? 它涼了。 記得2013年的時候,安卓崛起,一夜之間遍地談論安卓這個奇怪的機器人。 安卓受寵的原因,主要圍繞著: 1 應用商城,給與每個開發者足夠的誘惑,是公司員工可以業餘一展技能的時刻。 百花齊放的開發應用,以及如饑似渴的市場,給與了安 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...