canvas 或 requestAnimationFrame 在移动设备中很慢
canvas or requestAnimationFrame is slow in mobile
我在移动浏览器中遇到问题。我制作了一个没有任何js库或框架的画布图表,但它的动画在移动设备上非常非常慢
我将这个函数用于请求动画框架:
(function () {
var lastTime = 0;
var vendors = ['ms', 'moz', 'webkit', 'o'];
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
}
if (!window.requestAnimationFrame) window.requestAnimationFrame = function (callback, element) {
var currTime = new Date().getTime();
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
var id = window.setTimeout(function () {
callback(currTime + timeToCall);
},
timeToCall);
lastTime = currTime + timeToCall;
return id;
};
if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) {
clearTimeout(id);
};
}());
requestAnimationFrame(myFunc);
function myFunc(){
//any code
.
.
requestAnimationFrame(myFunc);
})
我该怎么办?
首先,您没有发布相关代码。你如何在画布上绘画几乎可以肯定是你的问题。有一些技巧可以使其更好:
- 绘制到屏幕外画布并一次复制所有图像数据。
- 将上述内容与多个画布相结合,仅绘制已更改的图层,例如,图形图层可能已更改,但标签/图例未更改。
- 绘制到较小的画布并将其放大。
老实说,由于各种原因(热量和功耗是两个相当大的原因),移动浏览器比桌面浏览器慢得多。如果你想要流畅的动画,你必须编写一些高性能的渲染代码(可能在WebGL中)或使用其他人(例如pixi.js)。
相关文章:
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 正在SharePoint 2013母版页中添加JQuery移动文件
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- FabricJs-限制主对象内添加对象的移动区域
- 如何从画布上的某个移动事件中获取X和Y
- 触摸移动时切换到新元素
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 停止jQuery UI滑块移动超过给定值
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- JQuery移动动态分区页面
- XMLHttpRequest在移动设备上的chrome上不起作用
- 如何使bxslider仅在移动视图中处于活动状态
- css停止图像在滚动中移动
- jquery移动对齐按钮取决于内容大小
- 背景图像顶部的滚动图像不移动
- 如何在react js中移动第二个组件
- DataTables在表之间移动行
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标