ClojureScriptを使用して、どのブラウザー固有のバージョンの「requestAnimationFrame」メソッドが定義されているかを検出しています。私は次のコードを使用します:
(defn animationFrameMethod []
(let [window (dom/getWindow)
options (list #(.-requestAnimationFrame window)
#(.-webkitRequestAnimationFrame window)
#(.-mozRequestAnimationFrame window)
#(.-oRequestAnimationFrame window)
#(.-msRequestAnimationFrame window))]
((fn [[current & remaining]]
(cond
(nil? current) #((.-setTimeout window) % (/ 1000 30))
(fn? (current)) (current)
:else (recur remaining)))
options)))
これは問題なく機能し、ひどいことではありませんが、メソッド名をリストに入れられるようにしたいと思っています。
'(requestAnimationFrame webkitRequestAnimationFrame ...)
次に、リスト内の各シンボルのマクロを呼び出して、無名関数コードを生成します。
私はそのように機能するものが欲しいです:
user> (def name webkitRequestAnimationFrame)
user> (macroexpand '(macros/anim-method name window))
#(.-webkitRequestAnimationFrame window)
しかし、しばらくマクロをいじってみたところ、この効果は得られませんでした。問題の一部は、メソッド名とドット表記が奇妙に機能することであり、これが可能かどうかさえわかりません。
これを機能させるためのヒントはありますか?ありがとう!