放大鏡

放大鏡

1.理解什麼是放大鏡?
當鼠標移動到圖片上時,會把該區域圖片放大,讓用戶更清晰看見。
2.思路
設置一個大的div模塊zoom,裏面包含兩個小div模塊(用來放兩張圖片,一個是原始圖,一個是鼠標移動所放大的局部圖)。css

 


先對主體body進行搭建
html代碼:
html

 


css部分樣式代碼:
前端

 


瀏覽器運行效果以下:
瀏覽器

 


補充:對上述css代碼進行補充,去掉我所註釋代碼,把big(div)模塊多餘隱藏。
效果以下:
學習

 


接下來咱們須要寫一個原生JS代碼,需知足的功能有
1.當鼠標移動到small塊時,紅色的遮擋層出現,同時big塊出現。
2.當鼠標移除small塊時,紅色的遮擋層消失,同時big塊消失。
3.當鼠標移動時,紅色遮擋層跟隨鼠標移動,同時big塊裏大圖跟隨移動。
敲重點!!!!這裏需注意幾個思想
a)小圖/大圖=遮擋層/大圖顯示區(big塊)
遮擋層=大顯示區*(小圖/大圖)
b)遮擋層的移動範圍=small(div塊)的寬/高-遮擋層的寬/高
大圖的移動範圍=大圖的寬/高-big(塊的寬高)
spa

 


上圖代碼以下,0.5是由於鼠標在遮擋層的中間htm

 

//獲取鼠標位置(賦值給遮罩層的)
var x=event.clientX-small.offsetLeft-span.offsetWidth*0.5;
var y=event.clientY-small.offsetTop-span.offsetHeight*0.5;
 

好難寫,直接看代碼分析吧blog

//獲取元素
var span=document.querySelector(".mark");//獲取遮擋層
var small=document.querySelector(".one");//獲取左邊第一個盒子
var big=document.querySelector(".two");//第二個盒子
var pic=big.querySelector(".two .pic");`//大盒子裏面的原圖,由於後面要對它進行設置

 

//鼠標移入
small.onmouseover=function(){
//當鼠標移入時,span和big出現,由於css裏面設置的是display:none
span.style.display="block";
big.style.display="block";
}

  

.zoom .one .mark{
position: absolute;
width: 50px;
height: 50px;
top: 0;
left: 0;
background: silver;
/*//透明度 兼容*/
opacity: .5;
display: none;
}

  

.zoom .two{
width: 200px;
height: 200px;
background-color: darkblue;
overflow: hidden;
position: relative;
/*left: 500px;*/
float: right;
display: none;
}

 

//鼠標移除,遮擋層和big塊消失
//鼠標移動移出
small.onmouseout=function(){
span.style.display="none";
big.style.display="none";
}

  

重點來了,好好看,我有註釋!seo

//鼠標移動
small.onmousemove=function(event){
//設置瀏覽器兼容
var event=event||window.event;

  

//獲取鼠標位置(賦值給遮罩層的)
var x=event.clientX-small.offsetLeft-span.offsetWidth*0.5;
var y=event.clientY-small.offsetTop-span.offsetHeight*0.5;

  

//設置邊界
//由於遮擋層只能在small裏面移動,因此給個邊界限定
if(x<0){
x=0
}
if(x>(small.offsetWidth-span.offsetWidth)){
x=(small.offsetWidth-span.offsetWidth);
}
if(y<0){
y=0
}
if(y>(small.offsetHeight-span.offsetHeight)){
y=(small.offsetHeight-span.offsetHeight);
}

  

//把鼠標位置給遮罩層
//把鼠標獲取的位置賦值給遮擋層,
span.style.left=x+"px";
span.style.top=y+"px";

  

//比例計算
//x,y是在變化的 算出它與可移動範圍的比值,同等大圖也是該比例係數移動的
var w=x/(small.offsetWidth-span.offsetWidth);
var h=y/(small.offsetHeight-span.offsetHeight);

  

//大圖能夠移動的位置
pic.style.left=w*(big.offsetWidth-pic.offsetWidth)+"px";
pic.style.top=h*(big.offsetHeight-pic.offsetHeight)+"px";
}

  

最終效果以下:
圖片

 


看不懂請給我留言,如無緊急狀況,每晚都會解答。

或者關注CSDN 博客:前端小小小怪

看到都會解答,一塊兒學習。

相關文章
相關標籤/搜索