第一次寫文章有些緊張。。嘿嘿嘿!
通過滑鼠的滾動來實現圖片的放大和縮小,沒錯,像我這樣不思進取的小白,從來不會自己動手擼一遍。第一時間直接上Google。看到一篇部落格 https://blog.csdn.net/tomcat_2014/article/details/49818079 原來是這樣實現的。然後自己在草稿上抄了一遍,雖然他的是jq寫的,不過大同小異。
主要的功能函式:
一開始還挺納悶為什麼沒有傳入event引數也可以在函式中訪問到,想起曾經是要傳入一個event/e的呀,後來百度了一下,事件event是window裡的東西。
然後回到react專案中,首先是要獲取到img的真實的dom元素,使用了ref。
獲取到真實的DOM元素後,然後再將功能函式放上去就可以了;
嘿嘿,任務完成。拜拜!
其實,我應該可以早點下班回去的。
然後,想把這個再寫一遍,放到自己的GitHub上。
就在下班之際,我create-react-app搭建了一個學習用的react。
然後開開心心的將程式碼從專案上覆制過去,然後結果功能函式裡報錯了:
然後就開始一臉矇蔽了,怎麼會就找不到event了,明明使用的都是react框架呀,怎麼就錯了呢,因為專案我是接手的,所以我就猜想是不是裝了什麼外掛,而我的react可是什麼都沒有呀,我的老天鵝。。。百思不得其姐。
報的錯誤是:Unexpected use of 'event' no-restricted-globals;
然後複製貼上百度
結果這一堆東西,好像沒有我想要的答案。
然後又回到了程式碼上,給它傳了一個引數event:
我以為這樣應該是可以了,確實沒有報錯了,但是滾動滑鼠沒有圖片沒有放大縮小。
問題繼續。。。
然後我將兩個的imgDom和event列印出來一看,發現了不同的地方:
失敗的event是Class,成功的event是WheelEvent;
然後我再將失敗的event.wheelDelta給列印出來是undefined
這就使我非常納悶了,怎麼會這樣呢?
然後又是各種百度。。。結果搜不到,也可能是自己百度的功底還有待加強。
一看時間,靠,十點半了,撤。。不然廣州的地鐵就要休息了。
第二天下午我問了問隔壁的同事,他也和我一樣一開始有點矇蔽,誰叫我們都那麼的白呢。
然後,我們倆就開始繼續折騰這個問題。
他叫我點開Class和WheelEvent對比一下,看看有什麼不同,確實它們的大部分屬性都是相同的,然後繼續點開_proto_,然後在Class到Object之間發現了 _proto_:SyntheticEvent;這個東西引起他的注意,於是他叫我百度了一下這個單詞,然後進入了react的文件:合成事件(SyntheticEvent);感覺這篇文件就是答案的關鍵。然後耐下心來看完這篇文件,這個內容還是第一次看。確實文件中還有很多的東西沒有看,自己也就看了主要概念,高階指南也只看了點點。
那麼SyntheticEvent是什麼呢?看看中文文件的概述:
然後通過event.antiveEvent就可以訪問到Class中的WheelEvent,這樣就可以使用滾輪事件了。不過說來也真實蠢,命名Class的log裡type前面就有nativeEvent:WheelEvent;但是自己心瞎就是看不到。然後我將event改成了event.nativeEvent就成功了:
然後我不傳入event了,直接使用window.event:
也成功了。
原來react的合成事件是將事件event合併到了它的事件了,直接訪問是event是
不可以訪問到window下的event事件。
但是有一點還是想不明白,那就是兩個都是react寫的,為什麼一個可以,一個卻不行?
後來看了兩個react的版本號:
一個是16.4.0的:
一個是16.6.3的:
如果不是某些外掛導致的,或許就是版本號的問題了。
第一次寫文章,亂七八糟的。。。哈哈!