Html_JQuery之放大鏡

最近學了JQuery的一些簡單知識,跟着教學作了個放大鏡功能的網頁。內容是將鼠標放在一張圖片上,對應位置放大後顯示出來。javascript

原理是用兩張成比例的圖片,小圖片上對應的某塊區域,顯示出來的放大區域其實是大圖片上的位置(小圖片上對應的某塊區域的位置大小乘以兩張圖片的倍數)??css

or(當小圖片上對應區域移動時,顯示放大的區域的背景圖片的位置反向移動)html

下面是代碼:java

首先定義網頁的佈局:#fangdajing下有#left 和 #right ide

#left下有img 、#float 、#mask函數

#left :放小圖片、要放大的區域float 、一個圖片區域mask佈局

#right:放大的區域this

<div id="fangdajing">
			<div id="left">
				<img src="imgs/small.jpg" >
				<div id="float"></div>
				<div id="mask"></div>
			</div>
			<div id="right"></div>
		</div>

設置元素的style:url

#fangdajing #left{//設置大小爲小圖片的大小
	width: 300px;
	height: 168px;
	float:left;
	position: relative;//位置爲絕對,以便等下要放大的區域只在#left裏面
}
#fangdajing #left #img{
	width: 300px;
	height: 168px;
}
#fangdajing #left #mask{
	width: 100%;
	height: 100%;
	position: absolute;
	left: 0;
	top: 0;
	background-color: black;
	opacity: 0;
}
#fangdajing #left #float{
	width: 50px;
	height: 50px;
	background-color: #FFFF00;
	opacity: 0.5;
	position: absolute;
	left: 0;
	top: 0;
	display: none;
}
#fangdajing #right{//大小爲#float * 兩張圖片大小的倍數
	width: 200px;
	height: 200px;
	background-image: url(imgs/big.jpg);
	float:left;
	margin-left: 80px;
	display: none;
}

設置完樣式後,接下來就是實現放大效果:插件

咱們在當即執行函數(function($){}(jQuery)裏面實現,形參傳$,實參傳jQuery 這樣解決接下來寫Jquery插件命名衝突的問題。在當即執行函數裏面編寫插件fangdajing()方法

(function($){
	$.fn.extend({
			fangdajing:function(){
				this.each(function(){//遍歷全部調用fangdajing()的jQuery對象
					var that = this;//記錄當前調用fangdajing()的jQuery對象
                    //把$('#left')限定在當前調用fangdajing()的jQuery對象(選取當前jQuery對象下的#left標籤)
					$('#left',this).mousemove(function(evt){//調用鼠標移動方法
						var float = $('#float',this);//把float 限定在$('#left')
						var x = evt.offsetX;//取鼠標在left裏面的x座標
						var y = evt.offsetY;//取鼠標在left裏面的y座標
						x = x - float.width()/2;//進行此計算是爲了下面把float的中心x座標設置爲鼠標的x座標
						y = y - float.height()/2;//與上同理
						
						//限定float在left裏面
						if(x<0){
							x=0;
						}
						if(y<0){
							y=0;
						}
						
						//此時的$(this)就是 $('#left',this)
						if(x > $(this).width() - float.width()){
							x = $(this).width() - float.width();
						}
						if(y > $(this).height() - float.height()){
							y = $(this).height() - float.height();
						}
						//設置鼠標指針在float的中心
						float.css({
							left:x,
							top:y
						})
						//設置right
						$('#right',that).css({
                 //float與right的大小倍數爲4,而後 * -1  將right的背景圖位置與float在left中的位置相對應
                 //也就是當left向右移動n px,right的背景圖就向左移動n*4 px 
							backgroundPosition: x * -4 +'px ' + y * -4 + 'px' 
						})
					}).mouseover(function(){//鼠標移到小圖片上時, 顯示小方塊和 放大的區域
						$('#left #float,#right',that).show();
					}).mouseout(function(){//鼠標移出小圖片時, 隱藏小方塊和 放大的區域
						$('#left #float,#right',that).hide();
					});
				})
			}
		})
})(jQuery)

表述得很爛,但大概就是如此啦,若有錯誤,請大佬指正。

相關文章
相關標籤/搜索