圖片放大鏡效果實現過程詳解

發表於2017-03-30

由專案需要,原生寫了個詳情頁圖片放大鏡的效果,扔上程式碼供學習分享,也作為日常筆記…

效果如圖(例子中偷偷鏈了張天貓的圖片,希望沒啥事 -。-):

實現過程教簡單,但我們還是從css開始分析,過程如下(圖片已正方形為例):

css:

上面css中需要注意的就是幾個position和縮放比例,注意調整下即可

寫完樣式,來看看佈局:

html:

接下來是主要的js程式碼,一如既往的帶註解:

js:

補bug圖:

看完後是不是覺得簡直不要太簡單,接下來就來理一理以上程式碼中能夠抽取出來在平常開發中比較實用的知識點:

Element.getBoundingClientRect()

Element.getBoundingClientRect()方法返回元素的大小及其相對於視口的位置

例子:

效果如圖:

從效果圖上不難看出,當我移動檢視後再點選body,列印的物件都能夠正確返回元素的大小及其相對於視口的位置

這個方法也可以用於實現當某元素滾動到底/頂部時觸發對應事件,相當方便。

Event

1.event.target 和 event.currentTarget

target:指向觸發事件的元素

currentTarget:指向被繫結事件控制程式碼的元素

只有當繫結的事件處理程式與觸發該事件處理程式都為同一個物件的時候,兩者相同

例子程式碼:

html:

js:

效果圖:

從效果圖中,我們可以看到,當點選456時,target指向的是456所在的bDiv,currentTarget則指向aDiv,因為事件是繫結在aDiv上,但觸發是在bDiv上,而且bDiv又在aDiv內,當點選123時,則target與currentTarget一致,繫結和觸發都在aDiv上。

2.event.preventDefault() & event.stopPropagation()

preventDefault:如果事件可取消,則取消該事件,而不停止事件的進一步傳播

stopPropagation:阻止捕獲和冒泡階段中當前事件的進一步傳播

3.event.stopPropagation() & event.stopImmediatePropagation()

stopPropagation:阻止捕獲和冒泡階段中當前事件的進一步傳播

stopImmediatePropagation:阻止元素上呼叫相同事件的其他事件監聽並阻止冒泡

兩者區別的例子:

html:

js:

上面程式碼執行結果為:

註釋掉 e.stopImmediatePropagation(); 的結果為:

雖然都是些簡單的知識點,在平常開發中也是很實用的,希望能從細節出發,沒事多複習複習 -。-~

後來一時興起將放大鏡寫的更傻瓜式配置的外掛了… 點我看程式碼(github地址)

相關文章