jQuery 放大鏡效果詳解
放大鏡效果在很多網站都在使用,尤其在圖片型別網站或者購物網站。
當然實現放大鏡效果的方式有多種,這裡僅僅是提供一種思路。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> *{margin:0px;padding:0px;} .box{ position:relative; margin:10px auto; padding:10px; border:1px solid #666; background:#CCC; width:250px; } .box .small{ position:relative; text-align:center; background:#FFF; height:167px; } .box .small .mark{ position:absolute; top:0; left:0; z-index:2; width:80px; height:80px; background:#FFFFFF; filter:alpha(opacity:50); opacity:0.5; border:1px solid #333; display:none; } .box .big{ position:absolute; left:0; top:0; display:none; } .boxbig{ position:absolute; left:275px; top:0; width:160px; height:160px; overflow:hidden; } </style> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> <script type="text/javascript"> $(function(){ var mouseX = 0; var mouseY = 0; var maxLeft = 0; var maxTop = 0; var markLeft = 0; var markTop = 0; var perX = 0; var perY = 0; var bigLeft = 0; var bigTop = 0; function updataMark($mark){ if(markLeft<0){ markLeft = 0; } else if(markLeft>maxLeft){ markLeft=maxLeft; } if(markTop<0){ markTop=0; } else if(markTop>maxTop){ markTop=maxTop; } perX=markLeft/$(".small").outerWidth(); perY=markTop/$(".small").outerHeight(); bigLeft=-perX*$(".big").outerWidth(); bigTop=-perY*$(".big").outerHeight(); //設定小框的位置 $mark.css({"left":markLeft,"top":markTop,"display":"block"}); } //改變大圖的位置 function updataBig(){ $(".big").css({"display":"block","left":bigLeft,"top":bigTop}); } //滑鼠移出時 function cancle(){ $(".big").css({"display":"none"}); $(".mark").css({"display":"none"}); } //滑鼠小圖上移動時 function imgMouseMove(event){ var $this = $(this); var $mark = $(this).children(".mark"); //滑鼠在小圖的位置 mouseX=event.pageX-$this.offset().left - $mark.outerWidth()/2; mouseY=event.pageY-$this.offset().top - $mark.outerHeight()/2; //最大值 maxLeft=$this.width()-$mark.outerWidth(); maxTop=$this.height()-$mark.outerHeight(); markLeft=mouseX; markTop=mouseY; updataMark($mark); updataBig(); } $(".small").bind("mousemove",imgMouseMove).bind("mouseleave",cancle); }) </script> </head> <body> <div class="box"> <div class="small"> <span class="mark"></span> <img src="mytest/jQuery/1_s.jpg" alt="" /> </div> <div class="boxbig"> <div class="big"><img src="mytest/jQuery/1_b.jpg" alt="" /></div> </div> </div> </body> </html>
一.實現原理:
原理特別的簡單,兩張等比例的圖片,一張是小圖,一張是大圖,當滑鼠在小圖中移動的時候會出現一個半透明的遮罩圖片,用來標識要放大的區域,這個時候就根據相應的比例,在另一個區域調整大圖的left和top屬性值,來顯示相應的位置,原理大致如此,具體可以參閱程式碼註釋,再加以思考,應該很容易弄明白。
二.程式碼註釋:
(1).$(function(){}),當文件結構完全載入完畢之後再去執行函式中的程式碼。
(2).var mouseX=0,宣告一個變數用來存放半透明遮罩框的左邊緣距離small元素的距離。
(3).var mouseY=0,宣告一個變數用來存放半透明遮罩框的上邊緣距離small元素的距離。
(4).var maxLeft=0,宣告一個變數用來存放半透明遮罩框左邊緣距離samll元素的最大距離。
(5).var maxTop=0,宣告一個變數用來存放半透明遮罩框的上邊緣距離small元素的最大距離。
(6).var markLeft=0,用來存放mouseX值。
(7).var markTop=0,用來存放mouseY值。
(8).var perX=0,用來存放mouseX與samll元素寬度的比例。
(9).var perY=0,用來存放mouseY與samll元素高度的比例。
(10).var bigLeft=0,用來存放big元素left屬性值。
(11).var bigTop=0,用來存放big元素的top屬性值。
(12).function updataMark($mark){},此函式可以控制辦透明遮罩層的位置,引數為半透明物件。
(13).if(markLeft<0){markLeft = 0;},如果半透明遮罩框左邊緣超出small元素的左邊緣,則將markLeft值設定為0,也就是讓半透明遮罩層貼在samll元素內壁上。
(14).else if(markLeft>maxLeft){markLeft=maxLeft;},如果半透明遮罩層右邊緣超出small元素的右邊緣,則將markLeft設定為maxLeft,也就是讓半透明遮罩層貼在small元素的右側內壁。
(15).perX=markLeft/$(".small").outerWidth(),可以計算出半透明遮罩層在small元素中向左移動的尺寸佔small元素寬度的比例,使用這個值再乘以大圖的尺寸就可以計算出大圖相應的移動尺寸,這樣可以確保放大位置和右側出現的放大位置對應。
(16).perY=markTop/$(".small").outerHeight(),和上面同樣的道理。
(17).bigLeft=-perX*$(".big").outerWidth(),計算出big元素左移的尺寸,其實也就是圖片左移的尺寸。
(18).bigTop=-perY*$(".big").outerHeight(),和上面同樣的道理。
(19).$mark.css({"left":markLeft,"top":markTop,"display":"block"}),設定半透明遮罩框的位置,並將其設為可見。
(20).function updataBig(){},設定big元素的定位座標。
(21).$(".big").css({"display":"block","left":bigLeft,"top":bigTop}),設定big元素的left和top屬性值,並將其設定為可見。
(22).function cancle(){},規定當滑鼠移出時的操作。
(23).$(".big").css({"display":"none"}),將big設定為隱藏。
(24).$(".mark").css({"display":"none"}),將半透明遮罩層設定為隱藏。
(25).function imgMouseMove(event){},當滑鼠移動時,用來設定遮罩層的座標。
(26).var $this=$(this),滑鼠移動所在的物件。
(27).var $mark=$(this).children(".mark"),獲取半透明遮罩框物件。
(28).mouseX=event.pageX-$this.offset().left-$mark.outerWidth()/2,設定半透明遮罩框的左邊緣距離samll元素的距離,使用這種方式也可以將滑鼠指標位於遮罩框水平中心位置。
(29).mouseY=event.pageY-$this.offset().top-$mark.outerHeight()/2,和上面同樣的道理。
(30).maxLeft=$this.width()-$mark.outerWidth(),獲取半透明遮罩框左邊緣距離samll元素的最大距離。
(31).maxTop=$this.height()-$mark.outerHeight(),半透明遮罩框的上邊緣距離small元素的最大距離。
(32).$(".small").bind("mousemove",imgMouseMove).bind("mouseleave",cancle),事件處理函式的繫結。
三.相關閱讀:
(1).css()參閱jQuery css()方法一章節。
(2).event.pageX參閱jQuery event.pageX屬性一章節。
(3).event.pageY參閱jQuery event.pageY屬性一章節。
(4).offset()參閱jQuery offset()方法一章節。
(5).outerWidth()參閱jQuery outerWidth()方法一章節。
(6).outerHeight()參閱jQuery outerHeight()方法一章節。
(7).width()參閱jQuery width()方法一章節。
(8).height()參閱jQuery height()方法一章節。
相關文章
- jQuery 放大鏡效果jQuery
- jQuery放大鏡jQuery
- 用JavaScript中jQuery編寫放大鏡效果JavaScriptjQuery
- 圖片放大鏡效果實現過程詳解
- JavaScript 圖片放大鏡效果JavaScript
- JS 文字輸入框放大鏡效果JS
- 離屏Canvas——製作放大鏡效果Canvas
- canvas實現的圖片放大鏡效果Canvas
- jQuery彈幕效果詳解jQuery
- jQuery div拖拽效果詳解jQuery
- jQuery抖動效果詳解jQuery
- 利用 OmniGraffle 實現放大鏡標註效果
- jQuery圖片放大和旋轉效果jQuery
- jQuery星級評分效果詳解jQuery
- jQuery表格隔行變色效果詳解jQuery
- jQuery 倒數計時效果詳解jQuery
- jQuery實進度條效果詳解jQuery
- jQuery表單驗證效果詳解jQuery
- jQuery滑鼠懸浮翻牌效果詳解jQuery
- jQuery滑鼠懸浮聚焦效果詳解jQuery
- Canvas實現放大鏡效果完整案例分析(附程式碼)Canvas
- jQuery 圖片垂直切換效果詳解jQuery
- jquery實現滑動門效果詳解jQuery
- Mac顯示放大鏡Mac
- 淘寶放大鏡實現
- 直播app開發搭建,純javascript實現圖片放大鏡效果APPJavaScript
- iPhone放大模式詳解iPhone模式
- Magnifier.js - 支援滑鼠滾輪縮放的圖片放大鏡效果NifiJS
- win10怎麼關閉放大鏡_windows10怎樣取消放大鏡Win10Windows
- windows10的放大鏡在哪_win10系統如何開啟放大鏡工具WindowsWin10
- win10有放大鏡工具嗎?win10放大鏡工具怎麼開啟Win10
- PS濾鏡功能詳解
- jquery ajax詳解jQuery
- jquery tmpl 詳解jQuery
- 圓形放大的hover效果
- Desktop Lens PRO for mac - 螢幕放大鏡Mac
- jQuery 效果jQuery
- 基於 Vue 的商品主圖放大鏡方案Vue