印象裡我在不同時期曾經用三種語言分別實現過這個案例。所以無論用什麼框架、語言,只要你了解背後的原理,都很容易實現。
全部ui分為三層
當然沒有第二層和第三層是不影響搖桿功能的,但誰叫我是乙個擬物流
的前端偏執狂
呢?
把這三個層通過絕對定位
+z-index
疊起來,通過設定touch
事件讓桿頭可以拖動。為了讓大家看得清楚層級,我們先把桿頭變透明。
搖桿嘛,圓形的洞裡有根桿(不要汙
呀),所以我們必須把拖拽限制在乙個圓形區域裡
ontouchmove(e)
**中比較核心的部分是:我們先通過所在點
和原點
位置求出半徑distance
,以及之間的夾角角度angle
。然後通過限定半徑和夾角角度還原出x
,y
的座標。就可以達到控制拖動在圓形區域內的效果了。
//獲取兩點間直線距離的演算法
var getdistance=function(x1, y1, x2, y2)
杆體是這裡面最麻煩的一塊,需要通過搖桿的拖拽的距離變化長度
,同時根據搖桿的位置旋轉角度。
slot>
view>
view>
夾角轉為旋轉角度演算法angle/(3.14159/180)
,減去90是為了讓度數起點在12點鐘
的位置。
現在搖桿ue基本就完成了,接下來我們要輸出一些數值,畢竟搖桿不能光自己搖
,得用來控制其他的元素進行運動。
方向我們在杆體運動的時候,已經寫完了,就是那個角度angle
。
power = 當前半徑/最大半徑;
搖桿力度這件事在拳皇裡是不存在的,但是在很多遊戲中分輕推
和重推
(其實就是搖桿當前距離和最大距離的比),比如輕推
是走,重推
是跑。gif有點掉幀,大家能看出來運動的快慢嗎?
現在把上面的成果封裝成乙個vue元件,方便復用。
touchradius觸控檢測的實際半徑view>
view>
view>
ezjoystick>
ballmoveradius桿頭的最大移動範圍半徑
transition是否開啟緩動回位
三個slot
三個slot都是非必須的,不填的話,該部分就是空dom。具體可參考原始碼。ball桿頭stick杆體
bottom底
兩個事件
onjoystickupdate有數值變化就會觸發
onjoystickcancel停止觸控時觸發
元件封裝好了,接下來用咱們這個元件實現幾個經典的介面吧模擬十字鍵,核心是把角度轉成4個方向,這裡我隨手寫了一下,應該有更優雅的實現。
在外層關聯旋轉乙個箭頭而已...
clone原始碼後使用hbuilerx開啟可以快速看到例項,或將components複製到vuecli專案中匯入使用
用Vue實現乙個全選指令
下面為實現 全選 data function computed set function value return value 選中的數量 selectcount return i 選中的陣列 checkedgroups return checkedgroups 這種方法用起來不太方便,首先是很難復...
用Vue實現乙個登陸介面
最近由於一些原因,開始學習vue的專案開發,對於我這樣乙個剛剛入行的菜鳥級c 程式設計師,可真踩了不少坑,接下來,廢話少說。本人win10開發環境 資深大佬勿噴,我沒有mac,也沒有安裝linux環境 1.首先安裝node環境,本專案中主要是用來做包管理。傳送門 2.安裝vue 開啟控制台輸入,並等...
01 RPC簡介原理及用Go實現乙個RPC
rpc簡介 本地過程呼叫 正常情況下程式的執行和呼叫情況。例如有如下go語言 package main import fmt func main func add a int,b int int 在上述的go語言 中,我們定義了乙個add方法用於實現兩個數相加的功能,在main方法中通過呼叫add方...