博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
canvas实现拖动页面时显示窗口视频
阅读量:5079 次
发布时间:2019-06-12

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

简介

  当前主流的视频网站目前有不少新鲜好玩的功能,最明显的莫过于小视频的显示--当视频不在当前视口范围

时,会在右下角用一个小窗口来显示当前的视频,而且可以拖拽。

  今晚心血来潮,起了动手试试的念头。我的想法很简单,用canvas来获取视频每一帧的数据,并用动画函数

requestAnimationFrame函数(这里没有考虑兼容性)来显示每一帧的视频数据。另外,对canvas绑定拖动的

功能,这样就基本实现了简易的窗口视频。

  本章内容的重点就是requestAnimationFrame函数和canvas的drawImage函数,canvas的drawImage函数

可以获取图片或者视频的帧数据ImageData,可以对其操作,在之前的文章  一文中

已经介绍过该函数。另外就是拖动的实现,之前的文章中也有涉及。

  现将demo呈上:

  

1  5  6 ------------------------------------------------------------------------ 7  8 
9
10
11 12 ------------------------------------------------------------------------13 14 function $(i){
return document.getElementById(i)}15 var v = $("v");16 function fixScrollEvent(el,fn,context){17 var type = "mousewheel";18 context = context || window;19 try{20 document.createEvent("MouseScrollEvents");21 type = "DOMMouseScroll";22 }catch(e){}23 if(type == "mousewheel"){24 el.onmousewheel = function(e){25 e = e || window.event;26 if(window.opera && window.opera.version()<10){27 e.delta = -e.wheelDelta / 30;28 }else{29 e.delta = e.wheelDelta / 30;30 }31 fn.call(context,e);32 }33 }else{34 el.addEventListener("DOMMouseScroll",function(e){35 e.delta = -e.detail;36 fn.call(context,e);37 },false)38 }39 }40 41 fixScrollEvent(window,function(e){42 var dh,cp;43 var c, d,graphic;44 var imageData;45 //视口宽度和高度46 var vpWidth = window.innerWidth || document.documentElement.clientWidth47 || document.body.clientWidth;48 var vpHeight = window.innerHeight || document.documentElement.clientHeight49 || document.body.clientHeight;50 cp = v.getBoundingClientRect();51 dh = cp.top + v.scrollTop + v.clientHeight;52 53 c = $("miniVideo");54 if(dh < document.documentElement.scrollTop){55 if(c){56 c.setAttribute("data-flag",1);57 c.style.display = "";58 }else{59 c = document.createElement("canvas");60 c.id = "miniVideo";61 // Drag 拖动插件必须要确定top和left值,不能使用right和bottom代替。62 c.style.cssText = "width:300px;height:200px;background:black;position:fixed;" +63 "left:"+(vpWidth - 30 - 300)+"px;top:"+(vpHeight - 20 - 200)+"px;";64 c.setAttribute("data-flag",1);65 if(c.innerText !== undefined){66 c.innerText = "Your Browser can not support Canvas!";67 }else{68 c.textContent = "Your Browser can not support Canvas!";69 }70 document.body.appendChild(c);71 new Drag(c)72 73 }74 requestAnimationFrame(function recurse(){75 graphic = c.getContext("2d");76 graphic.drawImage(v,0,0, c.width, c.height);77 if(c.getAttribute("data-flag")){78 requestAnimationFrame(recurse);79 }80 })81 }else{82 if(c){83 //设置空字符串,之前犯了个错误,在html property保存的始终是字符串。84 c.setAttribute("data-flag","");85 c.style.display = "none";86 }87 }88 })

  实例图片:  

  实现虽然简单,但是通过这个demo我又复习了一些基本的canvas用法以及相关的位置参数获取。还是挺有

收获的。

转载于:https://www.cnblogs.com/accordion/p/4211917.html

你可能感兴趣的文章
IOS--沙盒机制
查看>>
使用 JointCode.Shuttle 访问任意 AppDomain 的服务
查看>>
sqlite的坑
查看>>
digitalocean --- How To Install Apache Tomcat 8 on Ubuntu 16.04
查看>>
【题解】[P4178 Tree]
查看>>
Jquery ui widget开发
查看>>
关于indexOf的使用
查看>>
英语单词
查看>>
Mongo自动备份
查看>>
cer证书签名验证
查看>>
新手Python第一天(接触)
查看>>
【bzoj1029】[JSOI2007]建筑抢修
查看>>
synchronized
查看>>
codevs 1080 线段树练习
查看>>
[No0000195]NoSQL还是SQL?这一篇讲清楚
查看>>
【深度学习】caffe 中的一些参数介绍
查看>>
Python-Web框架的本质
查看>>
QML学习笔记之一
查看>>
Window 的引导过程
查看>>
App右上角数字
查看>>