js實(shí)現(xiàn)放大鏡效果

前言:在拿到一個(gè)需求之前赏壹,我們要先進(jìn)行分析帜乞,再設(shè)計(jì),最后實(shí)現(xiàn)代碼的編寫以及調(diào)試牡昆。

放大鏡的原理分析

  • 鼠標(biāo)在小圖片上移動(dòng)時(shí),通過捕獲鼠標(biāo)在小圖片上的位置,定位大圖片的相應(yīng)位置

放大鏡特效設(shè)計(jì)

  • 頁面元素
  • 技術(shù)點(diǎn):事件捕獲、定位
  • 難點(diǎn):計(jì)算

代碼編寫,Github源碼下載 [https://github.com/galyean-gong/function.git ]

<!DOCTYPE html>
<html>
<head>
   <title>放大鏡特效</title>
</head>
<style type="text/css">
      * {
           margin: 0;
           padding: 0
       }

       #demo {
           display: block;
           width: 400px;
           height: 255px;
           margin: 50px;
           position: relative;
           border: 1px solid #ccc;
       }

       #small-box {
           position: relative;
           z-index: 1;
       }

       #float-box {
           display: none;
           width: 160px;
           height: 120px;
           position: absolute;
           background: #ffffcc;
           border: 1px solid #ccc;
           filter: alpha(opacity=50);
           opacity: 0.5;
       }

       #mark {
           position: absolute;
           display: block;
           width: 400px;
           height: 255px;
           background-color: #fff;
           filter: alpha(opacity=0);
           opacity: 0;
           z-index: 10;
       }

       #big-box {
           display: none;
           position: absolute;
           top: 0;
           left: 460px;
           width: 400px;
           height: 300px;
           overflow: hidden;
           border: 1px solid #ccc;
           z-index: 1;;
       }

       #big-box img {
           position: absolute;
           z-index: 5
       }
</style>
<body>
<div id="demo">
   <div id="small-box">
       <div id="mark"></div>
       <div id="float-box"></div>
       ![](image/saml.jpg)
   </div>
   <div id="big-box">
       ![](image/big.jpg)
   </div>
</div>
<!-- offsetLeft 子元素想當(dāng)父元素的左位移 
offsetTop 子元素想當(dāng)父元素的上位移
offsetWidth 盒子本身的寬高 不包括滾動(dòng)條
event.clientX 鼠標(biāo)的X憔辫,Y軸相對(duì)與整個(gè)頁面,而非子元素
-->
<script type="text/javascript">

    //頁面加載完畢后執(zhí)行
       window.onload = function () {

           var objDemo = document.getElementById("demo");
           var objSmallBox = document.getElementById("small-box");
           var objMark = document.getElementById("mark");
           var objFloatBox = document.getElementById("float-box");
           var objBigBox = document.getElementById("big-box");
           var objBigBoxImage = objBigBox.getElementsByTagName("img")[0];

           objMark.onmouseover = function () {
               objFloatBox.style.display = "block"
               objBigBox.style.display = "block"
           }

           objMark.onmouseout = function () {
               objFloatBox.style.display = "none"
               objBigBox.style.display = "none"
           }

           objMark.onmousemove = function (ev) {

               var _event = ev || window.event;  //兼容多個(gè)瀏覽器的event參數(shù)模式

               var left = _event.clientX - objDemo.offsetLeft - objSmallBox.offsetLeft - objFloatBox.offsetWidth / 2;
               var top = _event.clientY - objDemo.offsetTop - objSmallBox.offsetTop - objFloatBox.offsetHeight / 2;

               if (left < 0) {
                   left = 0;
               } else if (left > (objMark.offsetWidth - objFloatBox.offsetWidth)) {
                   left = objMark.offsetWidth - objFloatBox.offsetWidth;
               }

               if (top < 0) {
                   top = 0;
               } else if (top > (objMark.offsetHeight - objFloatBox.offsetHeight)) {
                   top = objMark.offsetHeight - objFloatBox.offsetHeight;

               }

               objFloatBox.style.left = left + "px";   //oSmall.offsetLeft的值是相對(duì)什么而言
               objFloatBox.style.top = top + "px";

               var percentX = left / (objMark.offsetWidth - objFloatBox.offsetWidth);
               var percentY = top / (objMark.offsetHeight - objFloatBox.offsetHeight);

               objBigBoxImage.style.left = -percentX * (objBigBoxImage.offsetWidth - objBigBox.offsetWidth) + "px";
               objBigBoxImage.style.top = -percentY * (objBigBoxImage.offsetHeight - objBigBox.offsetHeight) + "px";
           }
       }
</script>


</body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末仿荆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子坏平,更是在濱河造成了極大的恐慌拢操,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舶替,死亡現(xiàn)場(chǎng)離奇詭異令境,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)顾瞪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門舔庶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人陈醒,你說我怎么就攤上這事惕橙。” “怎么了钉跷?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵弥鹦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我爷辙,道長(zhǎng)彬坏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任膝晾,我火速辦了婚禮栓始,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘血当。我一直安慰自己幻赚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布歹颓。 她就那樣靜靜地躺著坯屿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪巍扛。 梳的紋絲不亂的頭發(fā)上领跛,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音撤奸,去河邊找鬼吠昭。 笑死喊括,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的矢棚。 我是一名探鬼主播郑什,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蒲肋!你這毒婦竟也來了蘑拯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤兜粘,失蹤者是張志新(化名)和其女友劉穎申窘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孔轴,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剃法,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了路鹰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贷洲。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晋柱,靈堂內(nèi)的尸體忽然破棺而出优构,到底是詐尸還是另有隱情,我是刑警寧澤雁竞,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布俩块,位于F島的核電站,受9級(jí)特大地震影響浓领,放射性物質(zhì)發(fā)生泄漏玉凯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一联贩、第九天 我趴在偏房一處隱蔽的房頂上張望漫仆。 院中可真熱鬧,春花似錦泪幌、人聲如沸盲厌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吗浩。三九已至,卻和暖如春没隘,著一層夾襖步出監(jiān)牢的瞬間懂扼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阀湿,地道東北人赶熟。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像陷嘴,于是被迫代替她去往敵國(guó)和親映砖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容