您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關js如何實現購物網站商品放大鏡效果的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
具體內容如下
首先說一下原理,以天貓某商品放大鏡效果為例:
所謂的放大鏡效果,其實也是欺騙我們眼球的一種效果,這里我們可以看到,圖片顯示去下面那一排小圖與遮蓋層的圖片和放大層的圖片其實是一樣的,只是分辨率不同,所以實現放大鏡效果,就需要這么幾組分辨率大小不同,但是圖片內容相同的圖片:
顯然,小圖中放的就是我這里圖片名中帶有small的小圖了,遮蓋層就是正常大小的圖,放大層就是帶有big的放大的圖了,然后再加入適當的位移和顯示效果,就達成我們見到的放大鏡效果了,下面就通過代碼來實現吧:
首先寫出HTML結構:
<div id="box"> <div class="show"> <img src="./images/1.jpg" alt="#"> <div class="drag"></div> </div> <div class="magnify"></div> <ul> <li class="active"><img src="./images/1.small.jpg" alt="#"></li> <li><img src="./images/2.small.jpg" alt="#"></li> </ul> </div> <script type="text/javascript" src="./javascript/mgfyGlass.js"></script> <script> const oBox = document.querySelector('#box'); const imgArr = [ {small: '1.small.jpg', normal: '1.jpg', big: '1.big.jpg'}, {small: '2.small.jpg', normal: '2.jpg', big: '2.big.jpg'} ]; </script>
然后加入css樣式:
body,div,ul,li{ margin: 0; padding: 0; list-style: none; font-size: 0; } img{ display: block; } #box{ width: 650px; position: relative; margin: 0 auto 0 240px; } #box .show{ width: 600px; border: solid 2px hotpink; position: relative; } #box .show img{ width: 100%; } #box .show .drag{ position: absolute; width: 200px; height: 200px; background-color: #e0a8d7; opacity: .4; left: 0; top: 0; display: none; } #box .magnify{ width: 800px; height: 800px; border: solid 2px #7d777b; position: absolute; left: 100%; top: 0; background: url("../images/1.big.jpg") no-repeat 0 0 / 2400px; display: none; } #box ul{ width: 100%; height: 150px; margin-top: 20px; } #box ul::after{ content: ''; display: block; clear: both; } #box ul li{ height: 100%; float: left; margin: 0 8px; border: solid 2px #fff; } #box ul li.active{ border-color: hotpink; } #box ul li img{ height: 100%; }
這里設置css樣式的時候需要注意:
放大層是通過遮蓋層等比放大的,所以放大層的寬高與遮蓋層寬高的比,和,放大層背景圖大小與正常顯示圖片(也就是class=“show” 盒子中的圖片)大小的比是相同的。
這里需要用js來實現幾個效果:
1、鼠標移入正常圖片盒子時遮蓋層和放大層盒子顯示,鼠標移出正常圖片盒子時遮蓋層和放大層盒子隱藏
2、定位遮蓋層位置,讓它隨著鼠標在 正常圖片盒子 內移動,同時放大層圖片對應的在放大層盒子內移動
3、設置小圖切換效果,并在小圖切換的同時,正常圖片和放大圖切換到對應圖片
然后上代碼:
class MgnGlass { constructor(ele, array) { this.ele = ele; this.array = array; this.show = ele.querySelector('.show'); this.showImg = this.show.querySelector('img'); this.drag = ele.querySelector('.drag'); this.magnify = ele.querySelector('.magnify'); this.oUl = ele.querySelector('ul'); this.oUlis = ele.querySelectorAll('ul li'); } // 定義一個方法,來調用之后定義的所有的方法 // 入口函數 init() { this.setMouse(); this.setPosition(); this.setTab(); } // 鼠標的移入移出 setMouse() { // 鼠標移入,圖片區域show,讓遮蓋層和放大鏡顯示 this.show.addEventListener('mouseover', () => { this.drag.style.display = 'block'; this.magnify.style.display = 'block'; }); // 鼠標移出,圖片區域show,讓遮蓋層和放大鏡隱藏 this.show.addEventListener('mouseout', () => { this.drag.style.display = 'none'; this.magnify.style.display = 'none'; }); } // 設置定位效果 // 鼠標在 圖片區域移動 時 // 1,讓遮蓋層,跟隨鼠標移動 --- 類似之前鼠標拖拽的效果 setPosition() { this.show.addEventListener('mousemove', (e) => { e = e || event; // 1,定位 遮蓋層 // 通過 鼠標的定位位置,來計算 遮蓋層 左上角 定位的坐標位置 let x = e.clientX - this.ele.offsetLeft - this.ele.clientLeft - this.drag.clientWidth / 2; let y = e.clientY - this.ele.offsetTop - this.ele.clientTop - this.drag.clientHeight / 2; // 2,設定邊界值 // 最小是 0 最大值 父級div寬高 - 遮蓋層寬高 if (x < 0){ x = 0; } else if (x > (this.show.clientWidth - this.drag.clientWidth)){ x = this.show.clientWidth - this.drag.clientWidth; } if (y < 0){ y = 0; } else if (y > (this.show.clientHeight - this.drag.clientHeight)){ y = this.show.clientHeight - this.drag.clientHeight; } // 3,將數值定位給遮蓋層 this.drag.style.left = x + 'px'; this.drag.style.top = y + 'px'; // 4,需要讓右側放大鏡的背景圖片也一起移動 // 給背景圖片添加定位 // 左側是 圖片不動,遮蓋層動 遮蓋層動 100 100 // 右側是 放大鏡不動,背景圖片動 背景圖動 -100 -100 // 移動時,定位必須是按照比例來設定 // 背景圖片定位 = 背景圖片大小 * 遮蓋層定位 / 圖片大小 // 通過遮蓋層移動的比例,來計算,背景圖片定位的數值 let backX = 2400 * x / 600; let backY = 2400 * y / 600; // 給背景圖片定位 // 給背景圖片進行定位賦值操作 this.magnify.style.backgroundPosition = `-${backX}px -${backY}px`; }) } // 切換效果 // 1,給當前鼠標經過mouseover 的標簽,添加樣式 // 給所有的標簽去除樣式,給當前點擊/經過標簽,添加樣式 setTab() { this.oUlis.forEach((item, key) => { item.addEventListener('mouseover', () => { // 1,給所有的li標簽清除樣式 this.oUlis.forEach((item2) => { item2.className = ''; }); // 2,給當前的標簽添加樣式 item.className = 'active'; // 3,設定圖片 // 當前標簽的索引下標 key 就是對應 圖片數組中,需要顯示的圖片的索引下標 // 1,給圖片標簽,設定路徑 // 通過數組,索引,圖片屬性,獲取對應的圖片名稱 // 標簽.src = 賦值 或者 標簽.setAttribute('src' , 屬性值) 都可以 this.showImg.setAttribute('src', `./images/${this.array[key].normal}`); // 2,給放大鏡區域,背景圖片設定路徑 // 必須把關于背景圖片的所有設定都重新寫一遍 this.magnify.style.background = `url('./images/${this.array[key].big}') no-repeat 0 0 / 2400px`; }) }) } }
要完美實現放大鏡效果,必須注意2個比例:
1、CSS樣式的比例 : 圖片區域大小 : 遮蓋層大小 = 背景圖片大小 : 放大鏡區域大小
2、定位的比例 : 遮蓋層定位 : 圖片區域大小 = 背景圖片定位 : 背景圖片大小
然后在調用我們的構造函數即可得到最終的HTML,執行即可達到我們的放大鏡效果了:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <title>放大鏡</title> <link rel="stylesheet" type="text/css" href="./css/mgfyGlass.css" rel="external nofollow" > </head> <body> <div id="box"> <div class="show"> <img src="./images/1.jpg" alt="#"> <div class="drag"></div> </div> <div class="magnify"></div> <ul> <li class="active"><img src="./images/1.small.jpg" alt="#"></li> <li><img src="./images/2.small.jpg" alt="#"></li> </ul> </div> <script type="text/javascript" src="./javascript/mgfyGlass.js"></script> <script> const oBox = document.querySelector('#box'); const imgArr = [ {small: '1.small.jpg', normal: '1.jpg', big: '1.big.jpg'}, {small: '2.small.jpg', normal: '2.jpg', big: '2.big.jpg'} ]; const mgnGlass = new MgnGlass(oBox, imgArr); mgnGlass.init(); </script> </body> </html>
感謝各位的閱讀!關于“js如何實現購物網站商品放大鏡效果”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。