我已经在JS中开发了一个简单的JS节拍器作为JS练习,也没有必要。可以在这里找到:https://github.com/Greduan/js-metronome/blob/master/js/main.js

我已经将其翻译为CLJS:

(ns mies-2.core
  (:use 'createjs.Sound))

(def assetsPath "assets/")
(def manifest [{:src "Click1.ogg|Click1.mp3" :id 1} {:src "Click2.ogg|Click2.mp3" :id 2}])

(.registerManifest createjs/Sound [manifest assetsPath])

(defn stop []
  ((js/clearInterva(intervalID))
   (.stop createjs/Sound [])
   (.log js/console "Stopped sound(s).")))

(defn playSound [target]
  ;                                           v FIX
  ((def instance (.play createjs/Sound [target.id (.INTERRUPT_NONE createjs/Sound []) 0 0 false 1]))
  ;                                 v FIX
  (or (== instance nil) (== instance.playState (.PLAY_FAILED createjs/Sound)) nil)
  (.log js/console ["Played sound ID:" target.id])))

(defn soundLoop [soundID]
  ;                                                             v FIX
  ((def bpmInput (.querySelector js/document ["[name=\"bpm\"]"] .value))
   (def bpm (/ 60000 bpmInput))
   (.log js/console ["Input:" bpmInput "Delay:" bpm])
   (def intervalID (js/setInterval [fn [] (playSound [soundID]) bpm]))))


我在FIX注释中指出了我需要帮助的地方。 :)

基本上除以thing.function.value或类似的系统,特别是将document.querySelector('[name="bpm"]').value转换为CLJS。

而具有variable.value系统的变量,如何使用CLJS实现呢?

为我指出正确的方向是绰绰有余的,非常感谢。 :)

最佳答案

我已经将您的js应用程序转换为cljs并创建了一个存储库:https://github.com/edbond/cljs-metronome
让我知道它是否不适合您。

关于javascript - 协助将JS转换为CLJS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20083286/

10-13 00:54