오디오 요소 중 어떤 사건이 발생할지 조사

14006 단어 JavaScript
Audio 요소의 규격은 22개의 이벤트로 브라우저에서 이벤트가 발생하는 시기와 발생하는 이벤트의 유형에 따라 다르다.
아이폰의 사파리에서도 안드로이드 브라우저에서는 전혀 일어나지 않는 사건도 있다.
프로그램 라이브러리를 사용하지 않은 상태에서 오디오 이벤트 제어를 할 때 주의해야 한다.
다음 코드 출력 불러오기 시작 후 몇 밀리초 동안 어떤 이벤트가 발생했습니까?
<!DOCTYPE html>
<html>
<head>
  <title>Audio/Video Event Checker</title>
<meta charset="utf-8" />
<meta name="viewport" content="user-scalable=no,width=device-width,initial-scale=1,maximum-scale=1"/>
<style>
body{
    background:black;
    color:lime;
    line-height:1.5;
    width:320px;
    box-sizing:border-box;
    -webkit-box-sizing:border-box;
    font-size: 13px;
    margin:0;
    padding:0;
    padding-left:5px;
}
</style>
</head>

<body>
    <button id="load">play</button><button id="clear">clear log</button>
    <section id="log"></section>
<script>

document.addEventListener('DOMContentLoaded',function(){

    // 起こりうる22のイベント
    var event_list = [
        "abort","canplay","canplaythrough","durationchange","emptied",
        "ended","error","loadeddata","loadedmetadata","loadstart",
        "pause","play","playing","progress","ratechange","seeking",
        "seeked","stalled","suspend","timeupdate","volumechange","waiting"
    ];

    // イベント全部にリスナーを登録
    function addEvents(etarget){
        var _leng = event_list.length;
        for(var _i = 0; _i < _leng; _i++){
            etarget.addEventListener(event_list[_i],function(event){
                log(event.type+"\t:\t",Date.now() - window.start_time + "ms");
            });
        }
    }

    var lasttype = "";

    // ログの出力
    function log(type,time){
        var pnode = document.getElementById('log');
        var fchild = pnode.firstChild;

        time ? time : time = "";

        // 同じイベントが連続する場合つなげて表示
        if(type===lasttype){
            var _elem = document.createElement('span');
            _elem.innerText = ", "+time;
            fchild.appendChild(_elem);
        }else{
            lasttype = type;
            var _elem = document.createElement('div');
            _elem.innerText = type + time;
            pnode.insertBefore(_elem,fchild);
        }
    }

    var audio = new Audio();
    addEvents(audio);

    document.getElementById('load').addEventListener('click',function(){
        log("-------------------------------------");
        window.start_time = Date.now();
        audio.src = "audio.mp3";
        audio.play();
    });
    document.getElementById('clear').addEventListener('click',function(){
        document.getElementById('log').innerHTML = "";
    });

});
</script>
</body>
</html>

코드를 > 파일로 복사합니다.라고 말한 뒤 스마트폰으로 접근해 사건 발생 상황을 조사할 수 있다.
audio.mp3 재생할 수 없는 터미널입니다. 재생할 미디어를 지정하십시오.
액션 화면
動作画面
브라우저에 따라 행동도 크게 다르기 때문에 보자마자 멍해졌다.
참조 링크
  • HTML Audio and Video DOM Reference
  • iOS의 HTML5 audio 요소에 대한 제한 극복
  • 좋은 웹페이지 즐겨찾기