相关疑难解决方法(0)

当事件保持静止时,防止触摸开始缓慢触发

编辑

我基本上试图创造马里奥风格的跳跃,所以当你触摸/身体上的mousedown时,我有一个开始向上移动的物体,但当你松开时,这个加速停止.这意味着我无法使用FastClick,因为我正在寻找touchstart,touchend事件,而不是单个click事件.

我正试图touchstart在浏览器中回复手机上的活动.目前我正在使用这两个听众:

document.body.addEventListener('touchstart', function(e) {
  e.preventDefault();
  space_on();
  return false;
}, false);

document.body.addEventListener('touchend', function(e) {
  e.preventDefault();
  space_off();
  return false;
}, false);
Run Code Online (Sandbox Code Playgroud)

我本质上是试图模仿我工作得非常好的东西,我使用的东西keydownkeyup事件分别使盒子跳跃和下降.

我遇到的问题是触摸开始,如果你不滑动,实际上是延迟了一会儿.要么是这样,要么计算使我失去帧率.

我已经在使用fastclick了,这并没有影响到这一点(可能是因为它从未打算触发touchstart监听器).你可以在这里看到我的意思:

https://www.youtube.com/watch?v=8GgjSFgtmFk

我刷了3次,盒子立即跳了,然后我点击了3次,你可以看到(特别是在第二个)它失去了一点帧速率或延迟.这是另一个可能更清晰的例子:https://www.youtube.com/watch?v = BAPw1M2Yfig

这里有一个演示:

http://codepen.io/EightArmsHQ/live/7d851f0e1d3a274b57221dac9aebc16a/

请记住,您需要使用手机或触摸设备或模拟镀铬触摸.

任何人都可以帮助我失去在不会变成滑动的触控启动上遇到的帧率下降或延迟吗?

javascript mobile touch

11
推荐指数
1
解决办法
495
查看次数

将HTML5 Canvas序列转换为视频文件

我想将HTML5画布中的动画转换为可以上传到YouTube的视频文件.是否有任何类型的屏幕捕获API或某些东西可以允许我以编程方式执行此操作?

html5 canvas youtube-api screen-capture

7
推荐指数
4
解决办法
1万
查看次数

优化画布画圆

我是 HTML5 画布的新手,希望让一些圆圈沿随机方向移动,以在我的网站上获得奇特的效果。

我注意到当这些圆圈移动时,CPU 使用率非常高。当只有几个圆圈在移动时,通常是可以的,但是当大约有 5 个或更多圆圈时,它就会开始出现问题。

这是在 Safari 中用 5 个圆圈分析几秒钟的屏幕截图。

配置文件结果

这是我迄今为止为我的 Circle 组件编写的代码:

export default function Circle({ color = null }) {
  useEffect(() => {
    if (!color) return

    let requestId = null
    let canvas = ref.current
    let context = canvas.getContext("2d")

    let ratio = getPixelRatio(context)
    let canvasWidth = getComputedStyle(canvas).getPropertyValue("width").slice(0, -2)
    let canvasHeight = getComputedStyle(canvas).getPropertyValue("height").slice(0, -2)

    canvas.width = canvasWidth * ratio
    canvas.height = canvasHeight * ratio
    canvas.style.width = "100%"
    canvas.style.height = "100%"

    let y = random(0, canvas.height)
    let x = …
Run Code Online (Sandbox Code Playgroud)

javascript html5-canvas reactjs

7
推荐指数
1
解决办法
637
查看次数

requestAnimationFrame 实现是递归的吗?

我目前正在试验three.js,它依赖于requestAnimationFrame执行动画。

renderer.render调用立方体旋转和函数之前,以下代码不会导致无限递归吗?

function render() {
    requestAnimationFrame(render);
    cube.rotation.x += 0.1;
    cube.rotation.y += 0.1;
    renderer.render(scene, camera); 
}
render();
Run Code Online (Sandbox Code Playgroud)

代码有效,但我正在努力提高我对 JavaScript 的整体理解。

在我看来,render 是作为回调函数调用的。但这是否意味着 JavaScript停止继续下一次调用之前会继续运行函数中的代码?

javascript animation requestanimationframe

6
推荐指数
1
解决办法
3108
查看次数

将 Rust 编译为 wasm(Web 程序集)时,如何休眠 10 毫秒?

我的 rust 程序正在管理 2d html canvas 上下文的内存,我试图达到 ~60fps。我可以很容易地计算出每帧之间的增量,结果大约是大约 5 毫秒。

我不清楚如何让我的 Rust webassembly 程序在剩余的 11 毫秒内进入睡眠状态。一种选择是让 JavaScript 在每个上调用 RustrequestAnimationFrame并将其用作驱动程序,但我很想尽可能将其全部保留在 Rust 中。

setTimeout(renderNext, 11)在编译到 wasm 目标时,我正在有效地寻找与 JavaScript 等效的 Rust 。

asynchronous settimeout rust requestanimationframe wasm-bindgen

5
推荐指数
1
解决办法
1282
查看次数

Safari requestAnimationFrame 以 30fps 运行

我有一个移动和渲染飞机的基本场景。

  • Chrome 中的帧率为 120 fps
  • Safari 中的帧率为 30 fps

我怎样才能将它们标准化,并在两者上获得相似的性能,最好是达到 120fps 的速率?

Safari 的 30fps 给我的感觉就是杀手。

到目前为止,我已经尝试使用:

this.renderer = new THREE.WebGLRenderer({
  canvas: this.canvas,
  powerPreference: "high-performance",
});
Run Code Online (Sandbox Code Playgroud)

但该powerPreference属性似乎没有任何明显的区别,所以我认为这是requestAnimationFrame我需要修复的时间。

this.renderer = new THREE.WebGLRenderer({
  canvas: this.canvas,
  powerPreference: "high-performance",
});
Run Code Online (Sandbox Code Playgroud)
const mod = (k, n) => ((k %= n) < 0) ? k+n : k;
const lerp = (v0, v1, t) => (1 - t) * v0 + t * v1;
const fpsElem = document.querySelector("#fps");

const ThreeCarousel = {
  clock: …
Run Code Online (Sandbox Code Playgroud)

safari three.js

5
推荐指数
1
解决办法
1289
查看次数

如何使用箭头键在画布中平滑移动对象

我正在制作一个简单的太空游戏,其中一艘船左右移动以躲避小行星。

我从这个视频中学会了左右移动我的船。

但运动非常块状。如何平稳地移动船?

这是我的所有代码:

// JavaScript Document

////// Variables //////
var canvas = {width:300, height:300 };
var score = 0;

var player = {
	x:canvas.width/2,
	y:canvas.height-100,
	speed: 20
};




////// Arrow keys //////

function move(e) {
	
	if(e.keyCode == 37) { 
		player.x -= player.speed;
	}
	if(e.keyCode == 39) {
		player.x += player.speed;	
	}
	
	update();
	
}

document.onkeydown = move;



////// other functions //////


//function to clear canvas
function clearCanvas() {
	ctx.clearRect(0,0,canvas.width,canvas.height);
}

// Draw Player ship.
function ship(x,y) {
	var …
Run Code Online (Sandbox Code Playgroud)

html javascript canvas arrow-keys

2
推荐指数
1
解决办法
9235
查看次数