欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用javascript實現(xiàn)放大鏡效果

 更新時間:2022年07月03日 06:08:26   作者:Favour72  
這篇文章主要為大家詳細介紹了用javascript實現(xiàn)放大鏡效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

我們經(jīng)常在一些詳情頁上可以見到放大鏡效果,今天我們也來做一個放大鏡樣式。

先來看一下效果:

圖中的圖片選的不是很好,有些糊了,各位可以重新選擇圖片進行做放大鏡案例

這個案例可以分為三個功能模塊

1.鼠標經(jīng)過小圖片盒子,黃色的遮擋層和大圖片盒子顯示,離開隱藏2個盒子功能
2.黃色的遮擋層跟隨鼠標功能。
3.移動黃色遮擋層,大圖片跟隨移動功能。 

這是我們的html主體部分:

<div class="product_intro clearfix">
?? ??? ??? ?<!-- 預覽區(qū)域 -->
?? ??? ??? ?<div class="preview_wrap fl">
?? ??? ??? ??? ?<div class="preview_img">
?? ??? ??? ??? ??? ?<img src="img/big5.jpg" class="smallImg">
?? ??? ??? ??? ??? ?<div class="mask">
?
?? ??? ??? ??? ??? ?</div>
?? ??? ??? ??? ??? ?<div class="big">
?? ??? ??? ??? ??? ??? ?<img src="img/big5.jpg" class="bigImg">
?? ??? ??? ??? ??? ?</div>
?? ??? ??? ??? ?</div>
? ? ?</div>
</div>

接下來是css樣式部分,這里要注意放大鏡部分大圖和小圖部分的隱藏雨顯示以及定位問題

.preview_wrap {
? ? ? width: 400px;
? ? ? height: 590px;
?? ??? ??? ?}
?
.preview_img {
? ? ? position: relative;
? ? ? height: 398px;
? ? ? border: 1px solid #CCCCCC;
? ? ? background-color: pink;text-align: center;
?? ??? ??? ??? ?
?? ??? ??? ?}
?
.preview_img .smallImg {
? ? ? margin-top: 25%;
? ? ? width: 200px;
?? ??? ??? ?}
?
.mask {
? ? ? ? display: none;
? ? ? ? position: absolute;
? ? ? ? top: left: 0;
? ? ? ? width: 300px;
? ? ? ? height: 300px;
? ? ? ? background-color: yellow;
? ? ? ?opacity: .5;
? ? ? ?border: 1px solid #CCCCCC;
? ? ? ? cursor: move;
?}
?
.big {
? ? ? ?display: none;
? ? ? ?position: absolute;
? ? ? ?left: 410px;
? ? ? ?top: 0;
? ? ? ?width: 500px;
? ? ? ?height: 500px;
? ? ? ?z-index: 999;
? ? ? ?border: 1px solid #ccc;
? ? ? ?overflow: hidden;
}

.big img {
? ? ? ?position: absolute;
? ? ? ?top: 0;
? ? ? ?left: 0;
}

最后來看javascript部分:

如果重新連接一個javascript頁面的話要記得寫好<script src="" type="text/javascript" ></script>

并且要加上window.addEventListener('load', function() {},它的作用是當頁面全部加載執(zhí)行完畢后再執(zhí)行js代碼

接下來是代碼步驟及思路,并且在js代碼里也會標注好

1.鼠標經(jīng)過小圖片盒子,黃色的遮擋層和大圖片盒子顯示,離開隱藏2個盒子功能,就是顯示與隱藏
2.鼠標移動的時候,讓黃色的盒子跟著鼠標來走
3.把鼠標坐標給遮擋層不合適。因為遮當層坐標以父盒子為準。
4.首先是獲得鼠標在盒子的坐標
5.之后把數(shù)值給遮擋層做為left和top值。盒子高度 300的一半 150
6.此時用到鼠標移動事件,但是還是在小圖片盒子內(nèi)移動。mask移動的距離
7.遮擋層不能超出小圖片盒子范圍
8.大圖片的移動距離=遮擋層移動距離*大圖片最大移動距離/遮擋層的最大移動距離

// 整個案例可以分為三個功能模塊
// 鼠標經(jīng)過小圖片盒子,黃色的遮擋層和大圖片盒子顯示,離開隱藏2個盒子功能
// 黃色的遮擋層跟隨鼠標功能。
// 移動黃色遮擋層,大圖片跟隨移動功能。
?
// 1.鼠標經(jīng)過小圖片盒子,黃色的遮擋層和大圖片盒子顯示,離開隱藏2個盒子功能
// 就是顯示與隱藏
?
// 當頁面全部加載執(zhí)行完畢后再執(zhí)行js代碼
window.addEventListener('load', function() {
?? ??? ??? ?var preview_img = document.querySelector('.preview_img');
?? ??? ??? ?var mask = document.querySelector('.mask');
?? ??? ??? ?var big = document.querySelector('.big');
?
?? ??? ??? ?//2.當我們鼠標經(jīng)過 preview_img 就顯示和隱藏mask遮擋層和 big 大盒子
?? ??? ??? ?preview_img.addEventListener('mouseover', function() {
?? ??? ??? ??? ?mask.style.display = 'block';
?? ??? ??? ??? ?big.style.display = 'block';
?? ??? ??? ?})
?? ??? ??? ?preview_img.addEventListener('mouseout', function() {
?? ??? ??? ??? ?mask.style.display = 'none';
?? ??? ??? ??? ?big.style.display = 'none';
?? ??? ??? ?})
?
?? ??? ??? ?// 黃色的遮擋層跟隨鼠標功能。
?? ??? ??? ?// 把鼠標坐標給遮擋層不合適。因為遮當層坐標以父盒子為準。
?? ??? ??? ?// 首先是獲得鼠標在盒子的坐標
?? ??? ??? ?// 之后把數(shù)值給遮擋層做為left和top值。
?? ??? ??? ?// 此時用到鼠標移動事件,但是還是在小圖片盒子內(nèi)移動。
?
?? ??? ??? ?// 2.鼠標移動的時候,讓黃色的盒子跟著鼠標來走
?? ??? ??? ?preview_img.addEventListener('mousemove', function(e) {
?? ??? ??? ??? ?//(1).先計算出鼠標在盒子里的坐標
?? ??? ??? ??? ?// 先算出鼠標在頁面中的坐標,減去盒子距離左側(cè)的距離,就是鼠標在盒子里的坐標
?? ??? ??? ??? ?// 但是這里要注意:
?? ??? ??? ??? ?// 要看他有沒有父元素,并且父元素有沒有定位
?
?? ??? ??? ??? ?var x = e.pageX - this.offsetLeft;
?? ??? ??? ??? ?var y = e.pageY - this.offsetTop;
?? ??? ??? ??? ?// console.log(x,y)
?? ??? ??? ??? ?//(2)盒子高度 300的一半 150
?? ??? ??? ??? ?// (3)mask移動的距離
?? ??? ??? ??? ?var maskX = x - mask.offsetWidth / 2;
?? ??? ??? ??? ?var maskY = y - mask.offsetHeight / 2;
?
?? ??? ??? ??? ?// (4)遮擋層不能超出小圖片盒子范圍
?? ??? ??? ??? ?// 如果小于0,就把坐標設置為0
?
?? ??? ??? ??? ?//遮擋層的最大一定距離,因為都是正方形,所以高也適用
?? ??? ??? ??? ?var maskMax = preview_img.offsetWidth - mask.offsetWidth;
?? ??? ??? ??? ?if (maskX <= 0) {
?? ??? ??? ??? ??? ?maskX = 0
?? ??? ??? ??? ??? ?//如果大于遮擋層最大的移動距離,就把坐標設置為最大的移動距離
?? ??? ??? ??? ??? ?//遮擋層的最大移動距離:小圖片盒子寬度減去遮擋層盒子寬度
?? ??? ??? ??? ?} else if (maskX >= maskMax) {
?? ??? ??? ??? ??? ?maskX = maskMax;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?if (maskY <= 0) {
?? ??? ??? ??? ??? ?maskY = 0;
?? ??? ??? ??? ??? ?//如果大于遮擋層最大的移動距離,就把坐標設置為最大的移動距離
?? ??? ??? ??? ??? ?//遮擋層的最大移動距離:小圖片盒子寬度減去遮擋層盒子寬度
?? ??? ??? ??? ?} else if (maskY >= maskMax) {
?? ??? ??? ??? ??? ?maskY = maskMax;
?? ??? ??? ??? ?}
?
?? ??? ??? ??? ?mask.style.left = maskX + 'px';
?? ??? ??? ??? ?mask.style.top = maskY + 'px';
?
?
?? ??? ??? ??? ?// 移動黃色遮擋層, 大圖片跟隨移動功能
?? ??? ??? ??? ?// 求大圖片的移動距離公式:
?? ??? ??? ??? ?// ?? ?遮擋層移動距離 / 遮擋層最大移動距離 = 大圖片移動距離 / 大圖片最大移動距離
?? ??? ??? ??? ?// 3.大圖片的移動距離=遮擋層移動距離*大圖片最大移動距離/遮擋層的最大移動距離
?? ??? ??? ??? ?var bigImg = document.querySelector('.bigImg'); //大圖
?? ??? ??? ??? ?//大圖片最大移動距離
?? ??? ??? ??? ?var bigMax = bigImg.offsetWidth - big.offsetWidth;
?? ??? ??? ??? ?//大圖片最大移動距離
?? ??? ??? ??? ?var bigX = maskX * bigMax / maskMax;
?? ??? ??? ??? ?var bigY = maskY * bigMax / maskMax;
?? ??? ??? ??? ?bigImg.style.left = -bigX + 'px';
?? ??? ??? ??? ?bigImg.style.top = -bigY + 'px';
?? ??? ??? ?})
?
?})

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • JavaScript實現(xiàn)簡單的Markdown語法解析器

    JavaScript實現(xiàn)簡單的Markdown語法解析器

    Markdown 是一種輕量級標記語言, 它允許人們使用易讀易寫的純文本格式編寫文檔,然后轉(zhuǎn)換成有效的 XHTML(或者HTML)文檔。本文將利用JavaScript實現(xiàn)簡單的Markdown語法解析器,感興趣的可以了解一下
    2023-03-03
  • 解決layui表格的表頭不滾動的問題

    解決layui表格的表頭不滾動的問題

    今天小編就為大家分享一篇解決layui表格的表頭不滾動的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JavaScript+Canvas實現(xiàn)簡單的柱狀圖

    JavaScript+Canvas實現(xiàn)簡單的柱狀圖

    這篇文章主要為大家詳細介紹了JavaScript如何利用Canvas實現(xiàn)繪制簡單的柱狀圖,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-10-10
  • JsRender for object語法簡介

    JsRender for object語法簡介

    這篇文章主要介紹了JsRender for object語法,以實例形式講述了for Object的用法,需要的朋友可以參考下
    2014-10-10
  • 詳解webpack分離css單獨打包

    詳解webpack分離css單獨打包

    這篇文章主要介紹了詳解webpack分離css單獨打包,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 理解JS綁定事件

    理解JS綁定事件

    這篇文章主要幫助大家深入理解JS綁定事件,介紹了六種JS綁定事件的情況,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Rxjs?中處理錯誤和抓取錯誤的代碼案例

    Rxjs?中處理錯誤和抓取錯誤的代碼案例

    這篇文章主要介紹了Rxjs?中怎么處理和抓取錯誤,本文,我們學習了如何使用?catchError?在數(shù)據(jù)流中抓取錯誤,怎么去修改和返回?observable,或者使用?EMPTY?不去觸發(fā)組件中的錯誤,需要的朋友可以參考下
    2022-08-08
  • js實現(xiàn)點擊每個li節(jié)點,都彈出其文本值及修改

    js實現(xiàn)點擊每個li節(jié)點,都彈出其文本值及修改

    本篇文章主要分享了js實現(xiàn)點擊每個li節(jié)點,都彈出其文本值及修改的實例代碼,具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • 基于js實現(xiàn)抽紅包并分配代碼實例

    基于js實現(xiàn)抽紅包并分配代碼實例

    這篇文章主要介紹了基于js實現(xiàn)抽紅包并分配代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • js實現(xiàn)固定區(qū)域內(nèi)的不重疊隨機圓

    js實現(xiàn)固定區(qū)域內(nèi)的不重疊隨機圓

    這篇文章主要為大家詳細介紹了js實現(xiàn)固定區(qū)域內(nèi)的不重疊隨機圓,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10

最新評論