逐帧

所谓逐帧,就是把动画帧导出为图片,然后再用代码把没一帧的图片按照一定的频率进行切换,达到动画重组的播放效果。以3s的动画,每秒26帧的速度来计算,需要72张图片才能实现。同理如果帧数要求越高,需要的图片就越多。难度主要涉及到图片素材处理、图片资源加载、逐帧播放不掉帧等等。

视频

视频这个没什么好说的,关键是看怎么播放。因为要达到的效果是看起来像一个页面动画而不是视频播放,所以要求是表面上看不出是视频播放即可。最大的难点也在于此,比如ios下是Safari下,页面的视频播放是会自动脱离页面全屏播放的。

视频代替逐帧的尝试

懒于对素材的处理以及确保动画播放更流畅,决定去尝试通过视频来实现,但最终这是一次失败的尝试,既然花时间尝试,也积累一些经验,在这简单分享下:

1、如何解决ios下视频全屏播放的问题

默认video标签实现的视频播放,在ios下都会全屏播放,脱离页面。

发现了webkit-playsinline这个好东西,只需要在video标签用上这个属性就能实现非全屏下播放视频:

请在支持HTML5 video标签的浏览器中

ios微信测试,恩,ok了!但是可悲的是目前Safari不支持该属性,听说ios10会支持...

那么Safari这个能解决吗?继续搜索,又发现一个好东西iphone-inline-video.browser.js(本次测试的最大惊喜,解决了多年的困惑!!!),已经有大神解决了这个问题。

引入插件后,只需要简单调用即可:

var video = document.querySelector('video');

makeVideoPlayableInline(video);

里面还提到用css干掉video默认居中的那个播放按钮:

css代码如下:

.IIV::-webkit-media-controls-play-button,

.IIV::-webkit-media-controls-start-playback-button {

opacity: 0;

pointer-events: none;

width: 5px;

}

其中上面的IIV是插件给video标签增加的class。

这样在ios基本可以实现完美内联播放视频了(其它什么UC,qq等等这些浏览器没做测试,有需要的自行测试)。

2、安卓下杂乱的表现

在安卓下情况就不乐观了,比如华为荣耀下的自带浏览器(下面没特殊指出都是测试机子的自带浏览器)会强制加上播放控制:

也出现不支持-webkit-media-controls-play-button的情况,居中的播放按钮无法去除。还有一些手机检测到视频播放直接横屏全屏播放了。所以想保留video完美内联播放,安卓机子很多问题。

还有个致命点是,有些机子在播放视频时会把视频置为层级最高,上面无法再覆盖东西了。

那么可以借助canvas来画视频么?

大概的思路是:通过一个隐藏的video视频播放,然后通过一个按钮控制播放,用canvas来绘制画面出来。

video播放

请在支持HTML5 video标签的浏览器中

canvas

播放

var myvideo=document.getElementById("myvideo");

//获取画布对象

var mycanvas=document.getElementById("mycanvas");

var playbtn=document.getElementById("Jplay");

playbtn.addEventListener('click', function () {

if (myvideo.paused) {

myvideo.currentTime = 0;

myvideo.play();

// requestAnimFrame(p);

} else {

myvideo.pause();

}

});

var fps=30/1000;

setInterval(function(){

mycanvas.getContext("2d").drawImage(myvideo,0,0,400,225);

},fps);

效果截图:

video截图

最终还是未能达到预期效果,在ios这种效果结合内联视频播放的处理,是正常的。但是在安卓下有些机子直接不支持canvas绘制视频,有些还是会全屏播放视频等等各种问题。

所以总得来说,这个尝试失败告终,最后还是通过逐帧来解决实际需求。但是Safari的内联解决方案还是收获不少~

android canvas帧动画,html5视频,canvas,画布相关推荐

  1. html5怎么设置逐帧动画,HTML5 - 逐帧动画不起作用

    我有这个帧动画,其中每个帧在每1/30s被调用.HTML5 - 逐帧动画不起作用 画布根本没有被正确清除.为什么? 下面是代码: var canvas; var stage; var screen_w ...

  2. android 自定义帧动画,Android 自定义方式实现帧动画效果

    前言 首先说下为啥要通过自定义处理的方式去实现Android的帧动画效果,因为通过系统原生支持的xml和java代码这两种方式实现,在播放的图片量很多时,会出现内存溢出,此现象也是在做项目当中有遇到, ...

  3. android 播放gif动画效果,android 通过帧动画方式播放Gif动画

    注意:经过本人测试,这个方法很耗内存, 图片一多就崩了.慎用 <1>用工具(photoshop或者FireWorks)将GIF动画图片分解成多个GIF静态图片,然后保存在res\drawa ...

  4. Android 逐帧动画(Frame)

    Android 逐帧动画(Frame)  很好理解就是将多张图片放到一个容器里面通过控制这些图片一帧一张图片从而形成动画 使用的使用通过AnimationDrawable 加载放好的图片 然后通过调用 ...

  5. Android使用帧动画解决内存溢出问题

    Android使用帧动画解决内存溢出问题 参考文章: (1)Android使用帧动画解决内存溢出问题 (2)https://www.cnblogs.com/mcfawa/p/5192335.html ...

  6. Android逐帧动画——让图片动起来

    Android逐帧动画--让图片动起来 前言:逐帧动画要求开发者把动画过程的每张静态图片都收集起来,然后由android来控制依次显示这些静态图片,然后利用人眼视觉暂留的原理,给用户造成"动 ...

  7. android 创建帧动画,Android 逐帧动画创建实例详解

    Android 逐帧动画创建实例详解 前言: 我们看早期电影的时候,电影通常是一张一张播放,用我们现在专有名词来说,就是一帧帧来,安卓同样有这样动画效果的编排形式. 那么我们先定义逐帧动画xml文件 ...

  8. android 逐帧动画自动播放以及逐帧动画与渐变动画结合的停止问题

    关于逐帧动画的自动播放: android 逐帧动画一般不能直接在onCreat()方法里直接调用.start(),否则只是播放动画的第一帧,可重写onWindowFocusChanged(boolea ...

  9. php3D动画,html5的canvas实现几何模型3D运动动画效果

    html5的canvas实现几何模型3D运动动画效果 JS片段: var {atan2,sqrt,sin,cos,PI,acos} = Math; function project3D(x,y,z,v ...

最新文章

  1. kml 解析 java_KML文件解析显示在地图
  2. 怎么将string list 转成有特殊字符分开字符串
  3. Linux workqueue工作原理 【转】
  4. 解决 The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to have it working
  5. [转]粵語固有辭彙與漢語北方話辭彙對照
  6. Java1.5增加了新特性:可变参数
  7. EMNLP'20最佳论文揭晓!八块肌肉=能打电话?!
  8. 三张图搞懂JavaScript的原型对象与原型链
  9. 使用JAVASCRIPT实现弹出框,过一段时间自动消失
  10. 后台弹框。刷新不提示确认VB或.NET
  11. QThread与QObject的关系
  12. Python 之 单例
  13. 性能测试--jmeter中的函数助手【15】
  14. python中的monkey-patching
  15. Java动态so库修改,Adnroid so文件动态调试技巧
  16. 资源分享|免费注册申请永久的eu.org顶级域名创建属于自己的域名,再也不用给博客域名续费了!...
  17. 【Demo】银行主数据的修改
  18. Java、JSP基于JavaEE的智能化跨境电子商务平台的设计
  19. Task Office for Mac(GTD办公软件)
  20. java switch枚举类,Java 枚举 switch的用法

热门文章

  1. 检查字段是否包含字符串
  2. 如果/否则列表理解?
  3. win11没有uefi如何安装 windows11跳过uefi模式的安装方法
  4. SlideSwitch仿iphone滑动开关组件,仿百度魔图滑动开关组件Android
  5. 打印机提示手动进纸解决办法
  6. 常见移动机器人轮直径校准
  7. git克隆 不带目录_【第1823期】Git子仓库深入浅出
  8. 【Spring第七篇】Java配置类:JavaConfig
  9. Ubuntu 16.04之标题栏实时显示上下行网速、CPU及内存使用率
  10. 关于区块链的解读和简单Python实现