1. 程式人生 > >HTML5 單個或者多個Video標籤視訊載入第一幀方法(poster屬性)

HTML5 單個或者多個Video標籤視訊載入第一幀方法(poster屬性)

最近在做這個前端視訊載入第一幀的功能,查了很多資料基本上有兩種思路:

一、canvas畫圖取base64格式編碼設定poster屬性的方法;
二、給定圖片設定在視訊上方,點選圖片隱藏起來,視訊追加播放事件。

我就在此提供方法一所需要的程式碼,也是自己用到的,不足之處,還望指教。

1、單個video標籤

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>video</title>
</head>
<body>
<video
id="video" controls="controls" src="YOUR VIDEO URL">
很抱歉,您的瀏覽器不支援播放標籤! </video> <script src="js/jquery-2.1.4.min.js"></script> <script type="text/javascript"> (function() { "use strict";//嚴格模式 var video;//video標籤 var scale = 0.8;//第一幀圖片與源視訊的比例 video = $("#video"
).get(0);//賦值標籤 video.on("loadeddata", function () {//載入完成事件,呼叫函式 var canvas = document.createElement("canvas");//canvas畫布 canvas.width = video.videoWidth * scale; canvas.height = video.videoHeight * scale; canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);//畫圖
video.setAttribute("poster", canvas.toDataURL("image/png"));//關鍵一步 —— 設定標籤的 poster 屬性的值為 base64 編譯過後的canvas繪圖。 }) }());
</script> </body> </html>

2、多個video標籤

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>video</title>
</head>
<body>
<div id="video">

</div>
<script src="js/jquery-2.1.4.min.js"></script>
<script type="text/javascript">
    $.ajax({
        url: "",
        data: "",
        success: function (data) {
            var videoContent = "";//宣告鍋子接收後臺返回列表
            var count = 0; //宣告變數 為了拼接不同的ID值方便查詢新增poster屬性值
            var list = data.list;
            if(list.length>0){//這些大家應該都知道,是後臺返回值,我們遍歷。
                for(var i=0;i<list.length;i++){
                    videoContent+="<video  id='videoId"+count+"' src='"+list[i].url+"'controls width='100%' ></video>";
                }
                $("#video").html(videoContent);

                //敲黑板 重點來了 就不註釋了、跟單個video標籤差不多。

                for(var j=0; j<count; j++) {
                    $("#videoId"+j).on("loadeddata", function (e) {
                        var obj = e.target;
                        var scale = 0.8;
                        var canvas = document.createElement("canvas");
                        canvas.width = obj.videoWidth * scale;
                        canvas.height = obj.videoHeight * scale;
                        canvas.getContext('2d').drawImage(obj, 0, 0, canvas.width, canvas.height);
                        obj.setAttribute("poster", canvas.toDataURL("image/png"));
                    } )
                }

            }else{
                alert("沒有查到視訊內容");
            }
        },
        error: function () {
            alert("emmmmmmm...")
        }
    })
</script>
</body>
</html>

注: 移動端專案webApp中用到的功能,但是實際測試,不支援部分機型,還希望各路大神不吝賜教,感謝!