vue實現(xiàn)tab切換的放大鏡效果
本文實例為大家分享了vue實現(xiàn)tab切換的放大鏡效果的具體代碼,供大家參考,具體內(nèi)容如下
廢話不多說先看效果圖
1.我這里并沒有加遮罩層,如有需要請自行加上
2.圖片建議使用4k高清圖片,不然放大后模糊,影響觀看心情
3.不用拘泥于樣式,關注實現(xiàn)原理即可
4.可能我的方法并不簡便,但是也是一種思路,請大家參考
實現(xiàn)原理
第一肯定需要vue.js
第二需要兩張圖片
左邊為現(xiàn)實圖片,右邊放大后的效果圖其實一直存在,只不過鼠標移入現(xiàn)實,鼠標移出消失
放大的圖片并不是真正的放大,而是在img標簽外套了一個父元素,將img標簽的寬高都設置為百分之一百以上,至于放大多少你就設置多少,然后給父元素設置超出隱藏,再設置display:none讓元素隱藏,等到鼠標移入左邊大圖的時候再顯示
至于如何讓鼠標移動放大的圖片也會移動就是要獲取鼠標在元素上移動的位置,用鼠標移動事件觸發(fā),然后給放大后的圖片設置相對定位然后將鼠標的移動的X軸位置和Y軸位置分別賦值給大圖的left和top
-----------------------------------萬能分割線----------------------------------------
簡單來說,放大后的圖片本來就存在只不過設置為隱藏,鼠標移入的后再顯示,然后獲取鼠標移動的位置賦值給大圖的相對定位值,這就是放大鏡的實現(xiàn)原理
tab切換就更簡單了
需要用到vue的v-show來實現(xiàn)
在data中創(chuàng)建一個數(shù)組將圖片地址存在數(shù)組中,通過v-for將圖片地址遍歷到img標簽中
在data中創(chuàng)建一個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.jpg"], nowindex: 0, blocks: "fdj", //相對定位的值 positions: { top: 0, left: 0 } }, methods: { change(index) { //圖片的切換 this.nowindex = index; }, over() { //通過更改類名實現(xiàn)顯示隱藏 this.blocks = "block" }, out() { this.blocks = "fdj" }, move(e) { //將鼠標移動位置賦值給圖片相對定位的值,實現(xiàn)鼠標移動圖片移動 this.positions.top = (e.offsetY * -7.9) + "px"; this.positions.left = (e.offsetX * -6) + "px"; } }, }) </script> </body> </html>
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
vue?Router(v3.x)?路由傳參的三種方式場景分析
vue?路由傳參的使用場景一般都是應用在父路由跳轉(zhuǎn)到子路由時,攜帶參數(shù)跳轉(zhuǎn),傳參方式可劃分為?params?傳參和?query?傳參,而?params?傳參又可分為在?url?中顯示參數(shù)和不顯示參數(shù)兩種方式,這就是vue路由傳參的三種方式,感興趣的朋友跟隨小編一起看看吧2023-07-07vue.js將unix時間戳轉(zhuǎn)換為自定義時間格式
這篇文章主要介紹了vue.js將unix時間戳轉(zhuǎn)換為自定義時間格式的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01keep-Alive搭配vue-router實現(xiàn)緩存頁面效果的示例代碼
這篇文章主要介紹了keep-Alive搭配vue-router實現(xiàn)緩存頁面效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06Vue中Class和Style實現(xiàn)v-bind綁定的幾種用法
項目開發(fā)中給元素添加/刪除 class 是非常常見的行為之一, 例如網(wǎng)站導航都會給選中項添加一個 active 類用來區(qū)別選與未選中的樣式,那么在 vue 中 我們?nèi)绾翁幚磉@類的效果呢?下面我們就一起來了解一下2021-05-05vue3 拖拽hooks(可兼容移動端)和自定義指令拖拽的實現(xiàn)代碼
這篇文章主要介紹了vue3 拖拽hooks(可兼容移動端)和自定義指令拖拽的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考借鑒價值,需要的朋友參考下吧2024-01-01Vue2.0實現(xiàn)組件數(shù)據(jù)的雙向綁定問題
這篇文章主要介紹了Vue2.0實現(xiàn)組件數(shù)據(jù)的雙向綁定問題,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2018-03-03