- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近使用 requestAnimFrame
创建了一个 Canvas 动画,并且对 Chrome 中的结果非常满意,但在 FF 中,看起来正在运行幻灯片。我不知道是什么导致了这个问题。
此外,当我将粒子数量从 500 减少到 <50 时,FF 中的动画很平滑,但仍达不到 60FPS。这是我的代码:
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function( callback ){
window.setTimeout(callback, 1000 / 60);
};
})();
var canvas = document.getElementById("canvas"),
ctx = canvas.getContext("2d"),
W = window.innerWidth,
H = window.innerHeight,
circles = [];
canvas.width = W;
canvas.height = H;
//Random Circles creator
function create() {
//Place the circles at the center
this.x = W/2;
this.y = H/2;
//Random radius between 2 and 6
this.radius = 2 + Math.random()*3;
//Random velocities
this.vx = -10 + Math.random()*20;
this.vy = -10 + Math.random()*20;
//Random colors
this.r = Math.round(Math.random())*255;
this.g = Math.round(Math.random())*255;
this.b = Math.round(Math.random())*255;
}
for (var i = 0; i < 500; i++) {
circles.push(new create());
}
function draw() {
//Fill canvas with black color
ctx.globalCompositeOperation = "source-over";
ctx.fillStyle = "rgba(0,0,0,0.15)";
ctx.fillRect(0, 0, W, H);
//Fill the canvas with circles
for(var j = 0; j < circles.length; j++){
var c = circles[j];
//Create the circles
ctx.beginPath();
ctx.globalCompositeOperation = "lighter";
ctx.arc(c.x, c.y, c.radius, 0, Math.PI*2, false);
ctx.fillStyle = "rgba("+c.r+", "+c.g+", "+c.b+", 0.5)";
ctx.fill();
c.x += c.vx;
c.y += c.vy;
c.radius -= .05;
if(c.radius < 0)
circles[j] = new create();
}
}
function animate() {
requestAnimFrame(animate);
draw();
}
animate();
和here's the live demo 。我在这里做错了什么吗?
最佳答案
以下是在没有 globalCompositeOperation
引用的情况下它的工作原理:
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function( callback ){
window.setTimeout(callback, 1000 / 60);
};
})();
var canvas = document.getElementById("canvas"),
ctx = canvas.getContext("2d"),
W = window.innerWidth,
H = window.innerHeight,
circles = [];
canvas.width = W;
canvas.height = H;
//Random Circles creator
function create() {
//Place the circles at the center
this.x = W/2;
this.y = H/2;
//Random radius between 2 and 6
this.radius = 2 + Math.random()*3;
//Random velocities
this.vx = -10 + Math.random()*20;
this.vy = -10 + Math.random()*20;
//Random colors
this.r = Math.round(Math.random())*255;
this.g = Math.round(Math.random())*255;
this.b = Math.round(Math.random())*255;
}
for (var i = 0; i < 500; i++) {
circles.push(new create());
}
function draw() {
//Fill canvas with black color
ctx.fillStyle = "rgba(0,0,0,0.15)";
ctx.fillRect(0, 0, W, H);
//Fill the canvas with circles
for(var j = 0; j < circles.length; j++){
var c = circles[j];
//Create the circles
ctx.beginPath();
ctx.arc(c.x, c.y, c.radius, 0, Math.PI*2, false);
ctx.fillStyle = "rgba("+c.r+", "+c.g+", "+c.b+", 0.5)";
ctx.fill();
c.x += c.vx;
c.y += c.vy;
c.radius -= .05;
if(c.radius < 0)
circles[j] = new create();
}
}
function animate() {
requestAnimFrame(animate);
draw();
}
animate();
<canvas id="canvas"></canvas>
关于javascript - requestAnimFrame 在 Chrome 中为 60FPS,在 FF 中为 1FPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11367067/
我正在解析一个 XML 文件,其中包含一些条目,如下所示: FF FF FF FF FF FF FF FF 我将它们保存到 HashMap现在我想转换 String我进入int[] . 但我不知道该怎
我有一个这样的数组: unsigned char array[] = {'\xc0', '\x3f', '\x0e', '\x54', '\xe5', '\x20'}; unsigned char a
输入的正则表达式应该是什么: FF a b FF 其中a和b可以是下面给出的任意组合- FF 1 2 FF FF A C FF FF F D3 FF FF EF 1C FF 我尝试使用 /(FF [a
作为我们的 rebase-heavy 工作流程的一部分,我希望在 master 分支上使用 merge 。特别是,我只想在主题分支重新基于最近的主提交时才 merge ,从而使任何 merge 成为快
在 Qt 项目中,我必须通过以下分隔符拆分 QString 壮举。 壮举。 专长 壮举 特色 特色。 特色 特色 我最好的尝试是 (?: [Ff]eat[.]? )|(?: [[Ff]eaturing
我的网络应用程序在接受上传的图像之前会根据文件扩展名检查前四个字节。一位同事向我展示了他 iPhone 上的图像,但这些图像被拒绝了。它们具有不同的第四个字节(e1 = 225,而不是预期的 e0 =
为什么我在 Firefox Mac 和 Firefox Windows 中有不同的换行行为。如何确保我在两个平台上有相同的换行符? 使用小数位对我来说很重要。 你可以看到我的示例代码和我的截图on J
请检查此屏幕截图! alt text http://img267.imageshack.us/img267/1391/difference.png 这是在 Linux FF(左侧)和 Windows
我有时想做一个--ff-only merge ,制表符完成有点尴尬,因为--ff存在。但是--ff是默认行为,我无法想象想要明确指定它。我可以制作 --ff --ff-only 的同义词?我知道我可以
我编写了一个 jQuery 脚本来检查浏览器高度并与内容面板的高度进行比较。如果面板大于窗口高度,则脚本会使所有内容变小。 它在 Chrome 和 Safari 中运行良好。在 Firefox 上它根
在 IE 中,您可以像以前的渲染引擎一样查看页面。您使用 9 并查看为 8、7、6。 如果这在 Firefox 中可行?我正在使用 FF7,我想看看网站在 3.6 中的显示方式。 这是可能的还是我需要
对我来说,一个典型的 git 工作流程是克隆一个远程存储库并使用 git pull 来保持它是最新的。我不想在 pull 时 merge 提交,所以我使用 --ff-only 选项。 我还为特色工作创
我们可以让 ff-find-other-file 在 ff-search-directories 列出的目录中递归搜索吗? 它不仅会在/usr/include 中搜索,还会在/usr/include/
我遇到了 Java Scripting API together with JavaScript 的问题在某些电脑上。分析转储文件后,我注意到“FF FF”在某些 PC 上被打印为“FD”。下面是代码
这个问题已经有答案了: Why don't flex items shrink past content size? (7 个回答) 已关闭 2 年前。 我们在桌面应用程序(例如 Web 应用程序)中
public class Ex51 { public static void main(String args[]) { Scanner input = new Scanner
这个问题在这里已经有了答案: Why don't flex items shrink past content size? (5 个答案) 关闭 2 年前。
我希望 git merge 默认为 --no-ff 并且 git pull 使用 --ff 当它 merge 获取的分支时。 有没有办法配置 git 自动执行此操作? 最佳答案 我建议设置 merge
假设我有一堆在 Linux 和 Firefox 上运行的 Selenium 测试。现在,我遇到了一些问题,我想查看 FF GUI 来调查这个问题。是否可以连接到服务器,即使用 VNC 查看器查看我的测
我正在使用 jquery 创建命名空间事件。当我使用以下带有 code=112 的函数(函数 bool=false)时,FF 中一切正常,并且 F1 键提交到我的函数,并且该事件不会冒泡以在新选项卡中
我是一名优秀的程序员,十分优秀!