0
我正試圖編寫一個試劑組件,它對HTML Canvas元素需要一些絕對像素大小的事實進行了抽象。我寧願總是使用最高分辨率的畫布。試劑畫布組件
最後,我會使用該組件是這樣的:
[Canvas {:width "100%"
:height "100%"
:render (fn [ctx [w h]]
(.fillRect ctx 0 0 (/ w 2) (/ h 2)))}]
這是我的方法:
(defn Canvas [{:keys [width height render]}]
(let [state (r/atom {:size nil})
update-size (fn [el]
(when el
(let [size (get-real-size el)
ctx (.getContext el "2d")]
(swap! state assoc :size size)
(render ctx size))))]
(fn []
(let [{:keys [size]} @state]
[:canvas {:style {:width width :height height}
:ref update-size
:width (nth size 0)
:height (nth size 1)}]))))
而:
(defn get-real-size [el]
(let [bb (.getBoundingClientRect el)]
[(.-width bb) (.-height bb)]))
畫布似乎是正確呈現與相應的大小。但渲染函數不會繪製任何東西。有人知道如何解決/處理這個問題嗎?