Spin-Wheel

實現(xiàn)鼠標(biāo)在網(wǎng)頁上轉(zhuǎn)圈時記錄轉(zhuǎn)動圈數(shù)的小程序,每轉(zhuǎn)一圈記錄一次,同時要是順時針方向的。

問題分析與實現(xiàn)

這個小程序的難點在于如何知道鼠標(biāo)完成了一個轉(zhuǎn)圈的動作,而且人工使用鼠標(biāo)劃圈時也不會是一個標(biāo)準(zhǔn)的圓,通常都是很不規(guī)律的。這點上我網(wǎng)上找了找發(fā)現(xiàn)瀏覽器的鼠標(biāo)手勢實現(xiàn)了。

而且我找了一個人實現(xiàn)的手勢識別,是通過計算兩個點形成的角度來判斷,我開始也覺得這種方法不錯。但是我在具體實現(xiàn)的時候想到了另一個方法。

我的實現(xiàn)方法:把一個圓分為4個等分,也就是扇區(qū):左上,左下,右上,右下。然后通過記錄鼠標(biāo)經(jīng)過的點與前一個點坐標(biāo)來判斷是在哪個扇區(qū),只要四個扇區(qū)都經(jīng)過了就表示劃了一個圓。這樣做的話對鼠標(biāo)軌跡要求不高,只要走的方向?qū)托辛恕?/p>

電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

如何計算扇區(qū)

那么來看看如何知道是在哪個扇區(qū)呢?因為鼠標(biāo)在剛開始時只是在某一個點上,只有移動了一段距離后才知道在哪。我們看一下下面的圖:
電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

這里面我標(biāo)識了10個點,我們可以發(fā)現(xiàn)鼠標(biāo)在經(jīng)過這10個點說明就是畫了一個圈,對吧。然后我們看這些點有哪些規(guī)律?

比如,假如我們鼠標(biāo)是從P1開始移動的,然后移動到P2,再到P3,可以發(fā)現(xiàn)x軸是越來越大的,同時y軸也是越來越大。也就是說我們只要將鼠標(biāo)移動的軌跡記錄下來,然后逐個點進行分析,只要符合上面規(guī)律的就可以理解為在【右上扇區(qū)】。

同理,我們再看P3->P6,則發(fā)現(xiàn)x軸是越來越小,而y軸是越來越大的,說明是【右下扇區(qū)】,后面兩個扇區(qū)以此類推。

然后考慮順時針問題

上面說了每個扇區(qū)的計算方式,但是這個如果不考慮時針方向是不成立的,上面的計算方式必須是順時針才行。如果是逆時針則要反過來計算,所以一旦鼠標(biāo)逆時針轉(zhuǎn)到,那么也會計算扇區(qū),只不過計算的扇區(qū)就不是自己想要的結(jié)果啦。

在此我的解決方法是,在計算了扇區(qū)后進行一次檢查,如果發(fā)現(xiàn)前一個扇區(qū)不是連續(xù)的就說明時針方向錯了,重新開始記錄軌跡。還是以上面那個圖為例子:

當(dāng)P1-P3開始移動后,說明在【右上扇區(qū)】,然后判斷前一個扇區(qū)是否有經(jīng)過,如果沒有經(jīng)過說明當(dāng)前扇區(qū)可能是開始扇區(qū),然后判斷后一個扇區(qū)是否有經(jīng)過,如果沒有經(jīng)過說明確實是首扇區(qū),是正常的軌跡。反之則說明鼠標(biāo)轉(zhuǎn)反了。

其他的扇區(qū)以此類推。

最后發(fā)一下代碼

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負責(zé)任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式