css3实用指南(css3截图_动力节点Java学院整理)
类别:Web前端 浏览量:1299
时间:2022-01-24 00:52:11 css3实用指南
css3截图_动力节点Java学院整理一般的视频网站对于用户上传的视频,在用户上传完成后,可以对播放的视频进行截图,然后作为视频的展示图。项目中也可以引入这样的功能给用户一种不错的体验,而不是让用户额外上传一张展示图。
_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:
<!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> <li id="shotBar"> </li> </body> </html>
html和css都是相当简单的。
主要看Js的代码:
/** * Created with JetBrains WebStorm. * User: zhy * Date: 16-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 = $("<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); //创建缩略图,准备加到shotBar var $img = $("<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中,大家可以随便启动个什么服务器,不然会报安全问题。
您可能感兴趣
- css3三维模型(CSS3系列之3D制作方法案例)
- css3设置字体阴影(简单掌握CSS3将文字描边及填充文字颜色的方法)
- css3水平移动效果(利用css3 translate完美实现表头固定效果)
- css3伸缩布局教学(css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效)
- css3定义自定义字体(CSS3字体效果的设置方法小结)
- 用css3实现阴影(CSS3中文字镂空、透明值、阴影效果设置示例小结)
- css3背景渐变动画效果(css3制作的背景渐变动画效果)
- web前端css总结(前端面试必备之CSS3的新特性)
- css3粒子特效(利用CSS3实现毛玻璃效果示例源码)
- html5表单元素自带验证功能(纯CSS3实现表单验证效果非常不错)
- css3实现120度的箭头(使用css实现任意大小、任意方向和任意角度的箭头示例)
- CSS3 border-radius实现边框圆角
- css3伸缩布局及使用方法(利用CSS3的flexbox实现水平垂直居中与三列等高布局)
- css3边框阴影的属性(css3 border-radius属性详解)
- css3 图片边框(css3图片边框border-image的用法)
- css3中基本选择符(CSS3 clip-path 用法介绍详解)
- 河南尉氏县因地制宜发展果蔬种植 水坡镇绿宝甜瓜变 金瓜(河南尉氏县因地制宜发展果蔬种植)
- 谢广坤,你这么欺负谢腾飞,良心不会痛吗(你这么欺负谢腾飞)
- 乡村爱情15 宋晓峰怀疑自己孩子,腾飞与姜奶奶亲子鉴定出结果(宋晓峰怀疑自己孩子)
- 《乡村爱情13》开播,新版刘能以假乱真,编剧思维进入瓶颈(新版刘能以假乱真)
- 当年的 白洋淀战神 练肌肉 嘎子哥也成为行走的荷尔蒙(当年的白洋淀战神)
- 肌肉小子陈康, 亚洲巨兽 黄哲勋,哪个才是你的菜(肌肉小子陈康亚洲巨兽)
热门推荐
- linux系统内核参数优化(Linux 系统优化的一些建议内核优化)
- vue验证码怎么用(vue验证码组件使用方法详解)
- phpstudy怎么配置php环境(使用phpStudy搭建php环境及安装各种php程序实战教程)
- 如何使用docker启动tomcat(Docker容器上用DockerFile部署多个tomcat服务的步骤)
- sqlserver2014怎么重新激活(解决Windows 10家庭版安装SQL Server 2014出现.net 3.5失败问题)
- 如何设置虚拟主机(虚拟主机空间怎么选择?)
- mysql整体架构设计(MySQL 整体架构介绍)
- mysql索引优化有哪些(MySQL如何基于Explain关键字优化索引功能)
- idea关联mysql数据库(IDEA无法连接mysql数据库的6种解决方法大全)
- nginx学习需要哪些知识(一篇文章搞懂Nginx是什么,能干什么)