博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTML5 CSS3 诱人的实例 :模仿优酷视频截图功能
阅读量:4980 次
发布时间:2019-06-12

本文共 3481 字,大约阅读时间需要 11 分钟。

一般的视频网站对于用户上传的视频,在用户上传完成后,可以对播放的视频进行截图,然后作为视频的展示图。项目中也可以引入这样的功能给用户一种不错的体验,而不是让用户额外上传一张展示图。

效果图:

看起来还是很不错,下面我给大家分析下,极其核心代码很简单:

_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时,第一个参数可以为video对象,然后就是通过canvas拿到DataUrl,赋值给Img标签了。关键点就这些。

下面来看整个例子:

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");        //创建一个和video相同位置的图片        var $imgBig = $("");        $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);        //创建缩略图,准备加到shotBar        var $img = $("");        $img.attr("src", dataUrl);        $(this).append($img);        var offset = _getOffset($img[0]);        $img.hide();        //添加动画效果        $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();        });    }    /**     * 获取元素在显示区域的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}})();
需要注意的是,video.canplay事件中获取完属性和一些操作后,一定要removeEventLinstener,否则暂停播放会一直调用此方法。点击事件时,会暂停video,然后在video的位置生成一张图片,使用jquery动画移动到缩略图的位置,然后移除文档,缩略图显示,造成的动画效果。

得到图片之后的上传之类的操作,大家可以自己添加。还有很重要的一点:canvas.toDataURL("image/png");可能需要在服务器中访问才能正常使用,我把写好的页面拖到了tomcat中,大家可以随便启动个什么服务器,不然会报安全问题。

好了,如果这篇文章对你有帮助请顶一个,同时也欢迎大家留言~

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/dingxiaoyue/p/4924934.html

你可能感兴趣的文章
九涯的第一次
查看>>
处理器管理与进程调度
查看>>
向量非零元素个数_向量范数详解+代码实现
查看>>
java if 用法详解_Java编程中的条件判断之if语句的用法详解
查看>>
matlab sin函数 fft,matlab的fft函数的使用教程
查看>>
mysql sin() 函数
查看>>
单片机复位电路
查看>>
php json_decode失败,返回null
查看>>
3-day3-list-truple-map.py
查看>>
Edit控件显示多行文字
查看>>
JS第二周
查看>>
dataTable.NET的search box每輸入一個字母進行一次檢索的問題
查看>>
Python 文件处理
查看>>
邻接表详解
查看>>
迭代dict的value
查看>>
eclipse package,source folder,folder区别及相互转换
查看>>
Py 可能是最全面的 python 字符串拼接总结(带注释版)
查看>>
《Java程序设计实验》 软件工程18-1,3 OO实验2
查看>>
【Herding HDU - 4709 】【数学(利用叉乘计算三角形面积)】
查看>>
OPENSSL使用方法
查看>>