原生js實現放大鏡效果

来源:http://www.cnblogs.com/heyujun-/archive/2017/04/22/6750039.html
-Advertisement-
Play Games

放大鏡效果主要涉及3個滑鼠事件: 1.onmouseover,滑鼠移入浮動小方塊和顯示放大的區域顯示; 2.onmousemove,滑鼠移動,小方塊和放大區域一起移動; 3.onmouseout,滑鼠移除小方塊和放大區域消失。 其實放大鏡效果最主要的是小方塊與放大區域的比例及位置: js代碼: 效果 ...


 放大鏡效果主要涉及3個滑鼠事件:

1.onmouseover,滑鼠移入浮動小方塊和顯示放大的區域顯示;

2.onmousemove,滑鼠移動,小方塊和放大區域一起移動;

3.onmouseout,滑鼠移除小方塊和放大區域消失。

其實放大鏡效果最主要的是小方塊與放大區域的比例及位置:

	<div id="small_box">
		<div class="small_Pic">
			<div id="float_box"></div>
			<img src="1.png" alt="" />
		</div>
	</div>
	<div id="big_box">
		<div class="big_Pic">
			<img src="1.png" alt="" />
		</div>
	</div>
	*{padding: 0;margin: 0;}
	img{border: none;}
	#small_box{
		width: 350px;
		height: 175px;
		border: 1px solid #666;
		overflow: hidden;
		position: relative;
		top:200px;
		left: 100px;
		display: inline-block;
	}
	.small_Pic img{
		width: 350px;
		height: 175px;
	}
	#big_box{
		width: 350px;
		height: 175px;
		border: 1px solid #666;
		position: absolute;
		top:200px;
		left: 500px;
		overflow: hidden;
		display: none;
	}
	.big_Pic img{
		width: 1400px;
		height: 700px;
		position: absolute;
	}
	#float_box{
		width: 100px;
		height: 50px;
		background-color: #000;
		opacity: 0.5;
		position: absolute;
	    display: none;
		cursor: move;
		z-index: 99;
	}

js代碼:

	window.onload=function(){
		/*獲取頁面元素*/
		var small_box=document.getElementById('small_box');
		var float_box=document.getElementById('float_box');
		var big_box=document.getElementById('big_box');
		var big_box_img=big_box.getElementsByTagName('img')[0];

        /*滑鼠移入時,放快與放大區域顯示*/
		small_box.onmouseover=function(e){
			float_box.style.display='block';
			big_box.style.display='block';
		}

		/*滑鼠移動時觸發*/
		small_box.onmousemove=function(e){
			e=e||window.event;  
			//e.clientX是被觸發時滑鼠指針向對於瀏覽器頁面的水平坐標
			var float_box_left=e.clientX-small_box.offsetLeft-50;  //求出滑鼠位於浮動層的中心
			var float_box_top=e.clientY-small_box.offsetTop-25;

			var left=float_box.offsetLeft*big_box_img.offsetWidth/small_box.offsetWidth;//求上圖的x2值,即圖片偏移方框的左距
			var top=float_box.offsetTop*big_box_img.offsetHeight/small_box.offsetHeight;//求上圖的x2值,即圖片偏移方框的高度
			 big_box_img.style.left=-left+'px';
			 big_box_img.style.top=-top+'px';

			 /*控制浮動層不能超出方框的範圍*/
			if(float_box_left<0){
				float_box.style.left=0;
			}
			else if(float_box_left>(small_box.offsetWidth-100)){
				float_box.style.left=small_box.offsetWidth-100+'px';
			}
			else{
				float_box.style.left=float_box_left+'px';
			}
			if(float_box_top<0){
				float_box.style.top=0;
			}
			else if(float_box_top>(small_box.offsetHeight-50)){
				float_box.style.top=small_box.offsetHeight-50+'px';
			}
			else{
				float_box.style.top=float_box_top+'px';
			}
		}

		/*滑鼠移出時觸發*/
		small_box.onmouseout=function(){
			float_box.style.display='none';
			big_box.style.display='none';
		}
	}

效果是實現了,但是由於除數時有小數點的偏差,可能效果也有一點偏差,大致就是這樣。最重要的還是實現效果中的思維邏輯。

推薦網址:http://www.imooc.com/learn/32,放大鏡教學視頻。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 理論 "架構漫談系列" "分散式一致性演算法——paxos" "關於分散式事務、兩階段提交協議、三階提交協議" 中間件、庫、框架 "Spring Cloud" "Spring Cloud 中文網" "JWT——生成token" 案例 "如何設計一個小而美的秒殺系統" "秒殺系統的架構解決之道" ...
  • 正則是用來處理字元串的規則 通過規則可以驗證字元串是否匹配(test)對應的格式;也可以把正則匹配的結果在字元串中捕獲(exec)到 正則的元字元分為:普通元字元;特殊元字元;量詞元字元 普通元字元:用/ /包起來的除了具有特殊意義的,其餘的都是代表本身意義的普通元字元 特殊元字元:\d =>0-9 ...
  • 今天看到一個朋友在github上面的issue大概問題就是怎麼在不同的電腦上面使用git有個這麼個東西Submoudle中文叫做子模塊具體使用教程看這裡Git-工具-子模塊這裡只說怎麼搞hexo多主題切換和換電腦啥的開始首先分兩種情況1. 主題的出了配置文件 或者其他文件沒有DIY過,都是直接clo... ...
  • 本文轉載自不蒜子不如靜態網站建站現在有很多快速的技術和平臺,但靜態是優點也有缺點,由於是靜態的,一些動態的內容如評論、計數等等模塊就需要藉助外來平臺,評論有“多說”,計數有“不蒜”!>“不蒜子”與百度統計谷歌分析等有區別:“不蒜子”可直接將訪問次數顯示在您在網頁上(也可不顯示);對於已經上線一段時間... ...
  • window.onload = function() { // console.log('ok'); //正規的創建函數 function test(abc, d) { return abc(d); } function jack(testString) { console.log(testStri... ...
  • 1 //閉包實現累加功能 2 function fn1() { 3 var n = 1; 4 add = function() { 5 n += 1; 6 } 7 8 function fn2() { 9 n += 1; 10 ... ...
  • jquery 的 each 方法中 return 的坑 Chapter 0 在項目中使用 jquery 的 each 方法時想在 each 的迴圈中返回一個布爾類型的值於是掉進一個坑中... Chapter 1 最初的代碼: 這裡的代碼,雖然return 了,但是並未實際 return 值作為方法的 ...
  • a標簽自帶的下劃線對於字體來說太近了,如果有個p的字母時這一豎可以從下劃線穿出去,這樣很難看,這時就有需求了,怎麼設置下劃線與字體的距離呢? 行內元素不能設置高,但是可以設置內邊距吧,所以給padding-bottom來上那麼小小的幾個像素,再設置一px的下邊框border-bottom,這不就是想 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...