基于javascript實(shí)現(xiàn)放大鏡特效
本文實(shí)例為大家分享了javascript實(shí)現(xiàn)放大鏡特效的具體代碼,供大家參考,具體內(nèi)容如下
我們?cè)诠鋚c端商城時(shí),鼠標(biāo)放到商品上經(jīng)常會(huì)看到一個(gè)類似放大鏡效果的蒙層,
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
* {
margin: 0px;
padding: 0px;
}
#min {
width: 350px;
height: 350px;
border: 1px solid #ccc;
position: absolute;
left: 50px;
top: 50px;
}
#min img {
width: 350px;
height: 350px;
}
#max {
width: 500px;
height: 500px;
position: absolute;
left: 500px;
top: 50px;
border: 1px solid #ccc;
overflow: hidden;
display: none;
}
#max img {
position: absolute;
left: 0;
top: 0;
}
#mask {
width: 200px;
height: 200px;
background: rgba(255, 0, 0, 0.5);
position: absolute;
left: 0px;
top: 0px;
cursor: pointer;
display: none;
}
</style>
</head>
<body>
<div id="min">
<img src="img/min.jpg" alt="" />
<div id="mask"></div>
</div>
<div id="max">
<img src="img/max.jpg" id="maxImg" />
</div>
<script type="text/javascript">
// 1.鼠標(biāo)經(jīng)過(guò)小盒子,遮罩層出現(xiàn),大盒子出現(xiàn)
// 2.遮罩層跟隨鼠標(biāo)移動(dòng)
// 3.遮罩層移動(dòng),大盒子里的圖片反方向移動(dòng)
var oMin = document.getElementById('min');
var oMax = document.getElementById('max');
var oMask = document.getElementById('mask');
var oMaxImg = document.getElementById('maxImg');
oMin.onmousemove = function(e) {
// 1.鼠標(biāo)經(jīng)過(guò)小盒子,遮罩層和大盒子出現(xiàn)
oMask.style.display = 'block';
oMax.style.display = 'block';
// 2.拿到鼠標(biāo)在小盒子上的坐標(biāo)
var minX = e.clientX - oMin.offsetLeft;
var minY = e.clientY - oMin.offsetTop;
// 3.將鼠標(biāo)放置在遮罩層的中間
minX = minX - oMask.offsetWidth / 2;
minY = minY - oMask.offsetHeight / 2;
// 4.遮罩層可以移動(dòng)的最大距離
var maxWidth = oMin.offsetWidth - oMask.offsetWidth;
var maxHeight = oMin.offsetHeight - oMask.offsetHeight;
// 限定遮罩層的位置
if (minX > maxWidth) {
minX = maxWidth;
} else if (minX <= 0) {
minX = 0;
}
if (minY > maxHeight) {
minY = maxHeight;
} else if (minY <= 0) {
minY = 0;
}
// 設(shè)定遮罩層的偏移
oMask.style.left = minX + 'px';
oMask.style.top = minY + 'px';
// 大圖片移動(dòng)的距離=遮罩層移動(dòng)的距離/遮罩層可以移動(dòng)的最大距離*大圖片最大移動(dòng)距離
var ratioX = minX / maxWidth;
var ratioY = minY / maxHeight;
// 計(jì)算出大圖片的移動(dòng)距離
oMaxImg.style.left = -ratioX * (oMaxImg.offsetWidth - oMax.offsetWidth) + 'px';
oMaxImg.style.top = -ratioY * (oMaxImg.offsetHeight - oMax.offsetHeight) + 'px';
};
// 鼠標(biāo)移開,遮罩層和大盒子消失
oMin.onmouseout = function() {
oMask.style.display = 'none';
oMax.style.display = 'none';
}
</script>
</body>
</html>
效果圖:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
javascript仿php的print_r函數(shù)輸出json數(shù)據(jù)
輸出json數(shù)據(jù),php的print_r函數(shù)可以輕松實(shí)現(xiàn),下面為大家介紹下javascript也可以模仿print_r函數(shù)輸出json數(shù)據(jù),具體實(shí)現(xiàn)如下,感興趣的朋友可以了解下2013-09-09
JavaScript 數(shù)組中插入元素的實(shí)例方法
這篇文章主要介紹了如何在 JavaScript 數(shù)組中插入元素,在本文中,我們學(xué)習(xí)了使用?splice()?方法將元素添加到數(shù)組的開始、末尾或任何位置的各種方法,需要的朋友可以參考下2023-09-09
使用typescript推導(dǎo)已有變量的盲盒類型詳情
這篇文章主要介紹了使用typescript推導(dǎo)已有變量的盲盒類型詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
Javascript實(shí)現(xiàn)真實(shí)字符串剩余字?jǐn)?shù)提示的實(shí)例代碼
這篇文章介紹了Javascript實(shí)現(xiàn)真實(shí)字符串剩余字?jǐn)?shù)提示的實(shí)例代碼,有需要的朋友可以參考一下2013-10-10
js實(shí)現(xiàn)多選項(xiàng)切換導(dǎo)航菜單的方法
這篇文章主要介紹了js實(shí)現(xiàn)多選項(xiàng)切換導(dǎo)航菜單的方法,可實(shí)現(xiàn)動(dòng)態(tài)生成多選項(xiàng)切換導(dǎo)航菜單的功能,是非常實(shí)用的技巧,需要的朋友可以參考下2015-02-02
jQuery實(shí)現(xiàn)div浮動(dòng)層跟隨頁(yè)面滾動(dòng)效果
這篇文章主要介紹了jQuery實(shí)現(xiàn)div浮動(dòng)層跟隨頁(yè)面滾動(dòng)效果,需要的朋友可以參考下2014-02-02

