【发布时间】:2017-03-07 20:02:00
【问题描述】:
我正在尝试编写一个试剂组件,它抽象出 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)]))
画布似乎以相应的大小正确渲染。但是渲染函数不绘制任何东西。有人知道如何解决/处理这个问题吗?
【问题讨论】:
标签: canvas clojurescript reagent