HTML5+CSS3模擬優(yōu)酷視頻截圖功能示例
2017/7/13 14:16:48來源:互聯(lián)網(wǎng)
一樣平常的視頻網(wǎng)站對于用戶上傳的視頻,在用戶上傳完成后,可以對播放的視頻進(jìn)行截圖,然后作為視頻的展示圖。項(xiàng)目中也可以引入如許的功能給用戶一種不錯(cuò)的體驗(yàn),而不是讓用戶額外上傳一張展示圖。
結(jié)果圖:
看起來照舊很不錯(cuò),下面我給大家分析下,極其核心代碼很簡單:
_canvas = document.createElement("canvas"); _ctx = _canvas.getContext("2d"); _ctx.fillStyle = '#ffffff'; _ctx.fillRect(0, 0, _videoWidth, _videoWidth); _ctx.drawImage(_video, 0, 0, _videoWidth, _videoHeight, 0, 0, _videoWidth, _videoHeight); var dataUrl = _canvas.toDataURL("image/png");
核心代碼就這幾行,行使了ctx.drawImage時(shí),第一個(gè)參數(shù)可以為video對象,然后就是通過canvas拿到DataUrl,賦值給Img標(biāo)簽了。關(guān)鍵點(diǎn)就這些。
下面來看整個(gè)例子:
HTML:
<!DOCTYPE html> <html> <head> <title></title> <meta charset="utf-8"> <style type="text/css"> html { overflow: hidden; } body { background-color: #999; } video { display: block; margin: 60px auto 0; } #shotBar { position: absolute; bottom: 5px; height: 120px; width: 98%; background-color: #000; box-shadow: -5px -5px 10px #fff; border-radius: 5px; padding: 2px; overflow: auto; } #shotBar img { border: 3px solid #fff; border-radius: 5px; height: 110px; width: 210px; margin-left: 4px; } </style> <script type="text/javascript" src="../../../jquery-1.8.3.js"></script> <script type="text/javascript" src="videoshot.js"></script> <script type="text/javascript"> $(function () { ZhangHongyang.click2shot.init(); }); </script> </head> <body> <video src="media/style.mp4" controls id="video"> </video> <div id="shotBar"> </div> </body> </html>
html和css都是相稱簡單的。
重要看Js的代碼:
/** * Created with JetBrains WebStorm. * User: zhy * Date: 14-6-18 * Time: 上午12:24 * To change this template use File | Settings | File Templates. */ var ZhangHongyang = {}; ZhangHongyang.click2shot = (function () { var _ID_VIDEO = "video"; var _ID_SHOTBAR = "shotBar"; var _videoWidth = 0; var _videoHeight = 0; var _canvas = null; var _ctx = null; var _video = null; function _init() { _canvas = document.createElement("canvas"); _ctx = _canvas.getContext("2d"); _video = document.getElementById(_ID_VIDEO); _video.addEventListener("canplay", function () { _canvas.width = _videoWidth = _video.videoWidth; _canvas.height = _videoHeight = _video.videoHeight; console.log(_videoWidth + " , " + _videoHeight); _ctx.fillStyle = '#ffffff'; _ctx.fillRect(0, 0, _videoWidth, _videoWidth); $("#" + _ID_SHOTBAR).click(_click2shot); _video.removeEventListener("canplay", arguments.callee); }); } function _click2shot(event) { _video.pause(); _ctx.drawImage(_video, 0, 0, _videoWidth, _videoHeight, 0, 0, _videoWidth, _videoHeight); var dataUrl = _canvas.toDataURL("image/png"); //創(chuàng)建一個(gè)和video雷同位置的圖片 var $imgBig = $("<img/>"); $imgBig.width(_videoWidth).height(_videoHeight).css({position: "absolute", left: _video.offsetLeft, top: _video.offsetTop, width: _videoWidth + "px", height: _videoWidth + "px"}).attr("src", dataUrl); $("body").append($imgBig); //創(chuàng)建縮略圖,預(yù)備加到shotBar var $img = $("<img>"); $img.attr("src", dataUrl); $(this).append($img); var offset = _getOffset($img[0]); $img.hide(); //添加動(dòng)畫結(jié)果 $imgBig.animate({left: offset.x + "px", top: offset.y + "px", width: $img.width() + "px", height: $img.height() + "px"}, 200, function () { $img.attr("src", dataUrl).show(); $imgBig.remove(); _video.play(); }); } /** * 獲取元素在表現(xiàn)區(qū)域的leftOffset和topOffset * @param elem * @returns {{x: (Number|number), y: (Number|number)}} * @private */ function _getOffset(elem) { var pos = {x: elem.offsetLeft, y: elem.offsetTop}; var offsetParent = elem.offsetParent; while (offsetParent) { pos.x += offsetParent.offsetLeft; pos.y += offsetParent.offsetTop; offsetParent = offsetParent.offsetParent; } return pos; } return {init: _init} })();
必要細(xì)致的是,video.canplay事件中獲取完屬性和一些操作后,肯定要removeEventLinstener,否則停息播放會一向調(diào)用此方法。點(diǎn)擊事件時(shí),會停息video,然后在video的位置生成一張圖片,使用jquery動(dòng)畫移動(dòng)到縮略圖的位置,然后移除文檔,縮略圖表現(xiàn),造成的動(dòng)畫結(jié)果。
得到圖片之后的上傳之類的操作,大家可以本身添加。還有很緊張的一點(diǎn):canvas.toDataURL("image/png");可能必要在服務(wù)器中訪問才能正常使用,我把寫好的頁面拖到了tomcat中,大家可以隨便啟動(dòng)個(gè)什么服務(wù)器,不然會報(bào)安全題目。
以上就是本文的悉數(shù)內(nèi)容,盼望對大家的學(xué)習(xí)有所幫助,也盼望大家多多支持圖趣網(wǎng)。
[教程作者:鴻洋_]
免責(zé)聲明:本站文章系圖趣網(wǎng)整理發(fā)布,如需轉(zhuǎn)載,請注明出處,素材資料僅供個(gè)人學(xué)習(xí)與參考,請勿用于商業(yè)用途!
本文地址:http://m.likemindfilms.com/tutorial/wd222.html
本文地址:http://m.likemindfilms.com/tutorial/wd222.html
這些是最新的
- 專訪:石墨文檔產(chǎn)品總監(jiān)羅穎
- UI設(shè)計(jì)不得不知的移動(dòng)端UI尺寸適
- 光音移動(dòng)設(shè)計(jì)規(guī)范 — 表單類
- 體驗(yàn)設(shè)計(jì)中的排序問題
- 網(wǎng)頁設(shè)計(jì)精粹 網(wǎng)頁中那些迷人的按
- aliued:響應(yīng)式設(shè)計(jì)的現(xiàn)狀與趨勢
- 10個(gè)智能對象處理的ps技巧
- 網(wǎng)頁UI - 原子設(shè)計(jì)理論(上)
- 如何通過設(shè)計(jì)提升banner點(diǎn)擊率?
- 晉小彥視覺設(shè)計(jì)系列文章(二):全屏
最熱門的教程