1. 程式人生 > 程式設計 >vue實現tab切換的放大鏡效果

vue實現tab切換的放大鏡效果

本文例項為大家分享了實現tab切換的放大鏡效果的具體程式碼,供大家參考,具體內容如下

廢話不多說先看效果圖

vue實現tab切換的放大鏡效果

1.我這裡並沒有加遮罩層,如有需要請自行加上

2.圖片建議使用4k高清圖片,不然放大後模糊,影響觀看心情

3.不用拘泥於樣式,關注實現原理即可

4.可能我的方法並不簡便,但是也是一種思路,請大家參考

實現原理

第一肯定需要vue.

第二需要兩張圖片

左邊為現實圖www.cppcns.com片,右邊放大後的效果圖其實一直存在,只不過滑鼠移入現實,滑鼠移出消失

放大的圖片並不是真正的放大,而是在img標籤外套了一個父元素,將img標籤的寬高都設定為百分之一百以上,至於放大多少你就設定多少,然後給父元素設定超出隱藏,再設定display:none讓元素隱藏,等到滑鼠移入左邊大圖的時候再顯示

至於如何讓滑鼠移動放大的圖http://www.cppcns.com片也會移動就是要獲取滑鼠在元素上移動的位置,用滑鼠移動事件觸發,然後給放大後的圖片設定相對定位然後將滑鼠的移動的X軸位置和Y軸位置分別賦值給大圖的left和top

-----------------------------------萬能分割線----------------------------------------

簡單來說,放大後的圖片本來就存在只不過設定為隱藏,滑鼠移入的後再顯示,然後獲取滑鼠移動的位置賦值給大圖的相對定位值,這就是放大鏡的實現原理

tab切換就更簡單了

需要用到vue的v-show來實現
在data中建立一個數組將圖片地址存在陣列中,通過v-for將圖片地址遍歷到img標籤中

在data中建立一個nowindex,將圖片索引賦值給nowindex通過v-show=“nowindex == index“來控制圖片顯示隱藏

下面就是程式碼

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>Document</title>
    <script src="./vue/vue.js"></script>
    <style>
        body {
            margin: 0;
            padding: 0;
            background-color: #ccc;
        }
        
        #app {
            height: 245px;
            width: 556px;
            /* border: 3px solid; */
            position: relative;
            margin: 200px auto;
            box-sizing: border-box;
        }
        
        .content {
            height: 150px;
            width: 250px;
            border-bottom: 5px solid white;
        }
        
        .imgs {
            height: 90px;
            width: 248px;
            box-sizing: border-box;
            display: flex;
            justify-content: space-between;
        }
        
        .imger {
            height: 99%;
            width: 49.6%;
        }
        
        .content>img {
            height: 100%;
            width: 100%;
        }
        
        .active {
            box-shadow: 0px 8px 8px black;
            opacity: 0.7;
        }
        
        .fdj {
            display: none;
        }
        
        .block {
            height: 240px;
            width: 300px;
            position: absolute;
            top: 0px;
            right: -10px;
            overflow: hidden;
            z-index: 100;
            border-radius: 8px;
        }
        
        .block>img {
            height: 600%;
            width: 600%;
            position: relative;
        }
    </style>
</head>

<body>
    <div id="app">
        <div class="content" @mouseover="over" @mouseout="out" @mousemove='move($event)'>
            <img :src
=item v-for="(item,index) in url" v-show='index == nowindex'> </div> <div class="imgs"> <img :src=item v-for="(item,index) in url" class="imger" @click="change(index)" :class="{active:index == nowindex}"> </div> <div :class="blocks"> <img :src=item v-for="(item,index) in url" v-show='index == nowindex' :style='positions'> </div> </div> <script> var vm = new Vue({ el: "#app",data: { //圖片地址 url: ['./img/11.jpg',"./img/9.jphttp://www.cppcns.comg"],nowindex: 0,blocks: "fdj",//相對定位的值 positions: { top: 0,left: 0 } },methods: { change(index) { //圖片的切換 gUGJNiVHe this.nowindex = index; },over() { //通過更改類名實現顯示隱藏 this.blocks = "block" },out() { this.blocks = "fdj" },move(e) { //將滑鼠移動位置賦值給圖片相對定位的值,實現滑鼠移動圖片移動 this.positions.top = (e.offsetY * -7.9) + "px"; this.positions.left = (e.offsetX * -6) + "px"; } },}) </script> </body> </html>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。