Elm에서 Video Element 및 Audio Element의 Media Event를 다루는 방법

12446 단어 Elm
Elm 을 처음 만져 보았습니다만, Video 요소등의 취급은 어떨까, 슬랙 로 물어 보았더니 「 custom dom event handler 만들기 」라고 말해졌으므로 구현해 보았습니다.



h tp // // 에 lm-㎁ g. 오 rg/try로 복사하면 현재 탐색 시간과 비디오 재생 상태를 얻을 수 있습니다.
import Html exposing (..)
import Html.Events exposing (..)
import Html.Attributes exposing (..)
import Json.Decode as Json

main =
  Html.program
    { init = init
    , view = view
    , update = update
    , subscriptions = subscriptions
    }


-- MODEL

type alias Model = { videoState : String
                   , currentTime : Float }

init : (Model, Cmd Msg)
init = (Model "loading" 0, Cmd.none)

-- UPDATE

type Msg = CurrentTime Float
         | Loading
         | Playing
         | Paused
         | Seeking

update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
  case msg of
    CurrentTime currentTime ->
      ({ model | currentTime = currentTime }, Cmd.none)
    Loading ->
      ({ model | videoState = "loading" }, Cmd.none)
    Paused ->
      ({ model | videoState = "paused" }, Cmd.none)
    Playing ->
      ({ model | videoState = "playing" }, Cmd.none)
    Seeking ->
      ({ model | videoState = "seeking" }, Cmd.none)

-- SUBSCRIPTIONS

subscriptions : Model -> Sub Msg
subscriptions model = Sub.none

-- VIEW

targetCurrentTime : Json.Decoder Float
targetCurrentTime = Json.at ["target", "currentTime"] Json.float

view : Model -> Html Msg
view model =
  div [] [
    video [ src "http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_1mb.mp4"
          , on "timeupdate" (Json.map CurrentTime targetCurrentTime)
          , on "seek" (Json.map CurrentTime targetCurrentTime)
          , on "seek" (Json.succeed Seeking)
          , on "seeking" (Json.succeed Seeking)
          , on "seekend" (Json.succeed Paused)
          , on "playing" (Json.succeed Playing)
          , on "play" (Json.succeed Playing)
          , on "pause" (Json.succeed Playing)
          , on "ended" (Json.succeed Paused)
          , on "loadedmetadata" (Json.succeed Paused)
          , controls True] [],
    div [] [text (toString model.currentTime)],
    div [] [text (toString model.videoState)]
  ]

소관



Elm은 입출력이 증가하면 Msg가 어려울 것이라고 생각했습니다 (초등학생의 감상

참고


  • htps : // 로보 ts. 넉넉한 t. 코 m / 부이 l ぢ g-ku s와 m-do m e ゔ ぇ t-sun dぇ rs- an-e lm
  • htps : // 기주 b. 이 m/에 lm-㎁g/HTML/Bぉb/2. 에 lm # L251
  • h tp : // Pac 게이지. 에 lm-ㅁ g. rg / pac c gaze s / e lm- g / html / 2.0.0 / Htm-e ゔ ts
  • h tp : // Pac 게이지. 에 lm-ㅁ g. 오 rg / pa c 게 s / 에 lm- g / 이것 / 5.1.1 / J 그런데
  • 좋은 웹페이지 즐겨찾기