audio
要素を含む小さなコンポーネントを作成したいと思います。これは一定の間隔でループすることができます。区間の両端は、コンポーネントのプロパティとして定義されます。 timeUpdate
イベントの精度は必ずしも正確ではありません(少なくとも33Hzの保証が必要です)、私はTimerSupport
というバックエンドを使用し、開始点に戻ってcurrentTime
を設定しました。scalajs-reactでオーディオ要素の間隔でループする
val AudioRef = Ref[Audio]("audio")
class PlayerBackend extends TimerSupport
val AudioPlayer = ReactComponentB[String]("AudioPlayer")
.initialState(0L)
.backend(i => new PlayerBackend())
.render_P(url => {
<.audio(
^.ref := AudioRef,
^.autoPlay := true,
^.controls := true,
<.source(^.src := "http://www.stephaniequinn.com/Music/Allegro%20from%20Duet%20in%20C%20Major.mp3"),
"Your browser does not support the audio element."
)
})
.componentDidMount({ c =>
c.backend.setInterval(Callback.log({
if (AudioRef(c).isDefined) ({
AudioRef(c).get.currentTime
}) else "nothing"
}), 1000 millisecond)
}).configure(TimerSupport.install)
.build
それは私がちょうどプレイヤーの現在位置を印刷したいのですが、何らかの理由(コールバックがときに、コンポーネントのマウント時に、バックエンドのコンテキストのコピーの上に閉じ?)AudioRef(c)
ポイントのこの小さな例古いバージョンのオーディオ要素に変換します。どのようにこれを修正するための任意のアイデア?私はScalaJSやReactのどちらも経験していないので、他のデザインにも興味があります。