最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

我們經(jīng)常在一些詳情頁(yè)上可以見(jiàn)到放大鏡效果,今天我們也來(lái)做一個(gè)放大鏡樣式。

先來(lái)看一下效果:

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

這個(gè)案例可以分為三個(gè)功能模塊

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

這是我們的html主體部分:

<div class="product_intro clearfix">
?? ??? ??? ?<!-- 預(yù)覽區(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>

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

.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;
}

最后來(lái)看javascript部分:

如果重新連接一個(gè)javascript頁(yè)面的話要記得寫(xiě)好<script src="" type="text/javascript" ></script>

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

接下來(lái)是代碼步驟及思路,并且在js代碼里也會(huì)標(biāo)注好

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

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • console.log()的作用與實(shí)現(xiàn)方式

    console.log()的作用與實(shí)現(xiàn)方式

    這篇文章主要介紹了console.log()的作用與實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 微信小程序?qū)崿F(xiàn)多行文字滾動(dòng)

    微信小程序?qū)崿F(xiàn)多行文字滾動(dòng)

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)多行文字滾動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • js實(shí)現(xiàn)文字滾動(dòng)效果

    js實(shí)現(xiàn)文字滾動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)文字滾動(dòng)效果,類(lèi)似于新聞板塊中的公示公告,,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 基于JavaScript實(shí)現(xiàn)跳轉(zhuǎn)提示頁(yè)面

    基于JavaScript實(shí)現(xiàn)跳轉(zhuǎn)提示頁(yè)面

    這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)跳轉(zhuǎn)提示頁(yè)面 的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • csdn 博客的css樣式 v3

    csdn 博客的css樣式 v3

    僅相隔一天就出了個(gè)v3。 修正了一個(gè)bug,firefox左側(cè)內(nèi)容寬度錯(cuò)誤。
    2009-02-02
  • js實(shí)現(xiàn)消滅星星(web簡(jiǎn)易版)

    js實(shí)現(xiàn)消滅星星(web簡(jiǎn)易版)

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)web簡(jiǎn)易版的消滅星星,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 跨域表單提交狀態(tài)的變相判斷代碼

    跨域表單提交狀態(tài)的變相判斷代碼

    通過(guò)表單在iframe內(nèi)向一個(gè)跨域的url提交的時(shí)候,如何判斷提交成功了呢?這個(gè),基本上,很難,因?yàn)闉g覽器安全沙箱的限制,我們沒(méi)有辦法通過(guò)獲得iframe內(nèi)部不同域頁(yè)面的信息。
    2009-11-11
  • javascript實(shí)現(xiàn)簡(jiǎn)易聊天室

    javascript實(shí)現(xiàn)簡(jiǎn)易聊天室

    這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)簡(jiǎn)易聊天室,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • js完美實(shí)現(xiàn)@提到好友特效(兼容各大瀏覽器)

    js完美實(shí)現(xiàn)@提到好友特效(兼容各大瀏覽器)

    本文給大家分享的是一則使用javascript完美實(shí)現(xiàn)兼容各大瀏覽器的@好友自動(dòng)提示的特效,是根據(jù)百度貼吧的效果模仿來(lái)的,推薦給小伙伴們,希望大家能夠喜歡。
    2015-03-03
  • 使用JavaScript實(shí)現(xiàn)一個(gè)交互式音樂(lè)播放器

    使用JavaScript實(shí)現(xiàn)一個(gè)交互式音樂(lè)播放器

    JavaScript,作為前端開(kāi)發(fā)的重要語(yǔ)言,可以實(shí)現(xiàn)許多復(fù)雜的功能,在這篇文章中,我們將一起創(chuàng)建一個(gè)交互式的音樂(lè)播放器,快跟隨小編一起學(xué)習(xí)一下吧
    2024-01-01

最新評(píng)論

桃园县| 株洲市| 德昌县| 正蓝旗| 黄龙县| 岳普湖县| 集贤县| 岳池县| 鹤壁市| 靖安县| 翼城县| 仙居县| 玉林市| 同心县| 辽中县| 茂名市| 永和县| 霍山县| 浦江县| 舞钢市| 白城市| 大英县| 兰溪市| 东乌珠穆沁旗| 扶风县| 阿克| 化德县| 元朗区| 荆州市| 乌兰县| 隆德县| 顺义区| 全椒县| 喀什市| 弥渡县| 文化| 昆山市| 荆门市| 横山县| 杭锦旗| 屏边|