小编gma*_*man的帖子

总画布内存使用超出最大限制(Safari 12)

我们正在开发一个可视化Web应用程序,它使用d3-force在画布上绘制网络.由于每个节点都包含大量信息,并且由于CPU占用大量资源来重绘每个帧的所有内容,因此我们实现了一种缓存,其中每个节点都在其画布上绘制(未链接到DOM),每个缩放级别一次.然后在节点的位置在主画布(链接到DOM)上绘制那些画布.

我们对速度增益感到满意,即使结果现在是内存密集型(特别是在hidpi显示器(视网膜)上,像素密度可以是2或3).

但现在我们在iOS上遇到了浏览器的问题,在与界面进行少量交互后,进程崩溃了.回想一下,这对于旧版本(iOS12之前)来说不是问题,但是我没有任何未更新的设备来确认这一点.

我认为这段代码总结了这个问题:

const { range } = require('d3-array')

// create a 1MB image
const createImage = () => {
    const size = 512

    const canvas = document.createElement('canvas')
    canvas.height = size
    canvas.width = size

    const ctx = canvas.getContext('2d')
    ctx.strokeRect(0, 0, size, size)
    return canvas
}

const createImages = i => {
    // create i * 1MB images
    let ctxs = range(i).map(() => {
        return createImage()
    })
    console.log(`done for ${ctxs.length} MB`)
    ctxs = null
}

window.cis = createImages …
Run Code Online (Sandbox Code Playgroud)

javascript safari webkit mobile-safari html5-canvas

23
推荐指数
4
解决办法
6444
查看次数

Shadertoy的音频着色器如何工作?

首先,我找不到任何适当的社区来发布这个问题所以我选择了这个.我想知道流行的基于webGL的着色器工具的音频着色器是如何工作的,因为即使我明显听说过"普通"GLSL着色器,我第一次听说过用于程序生成音频的着色器,我很惊讶.有线索吗?

javascript shader webgl

22
推荐指数
1
解决办法
4574
查看次数

如何提高我的Html5 Canvas路径质量?

我一直在写一个小的javascript插件,我在改进画布的渲染整体质量方面遇到了一些麻烦.我在这里和那里搜索过网络,但找不到任何有意义的东西.

从我的曲线创建的线条不平滑,如果你看下面的jsfiddle,你就会理解我的意思.它有点像素化.有没有办法提高质量?或者是否有一个Canvas框架已经使用某种方法来自动提高我在项目中可以使用的质量?

我的画布渲染

不确定这是否有帮助,但我在脚本开头使用此代码:

var c = document.getElementsByClassName("canvas");

  for (i = 0; i < c.length; i++) {
    var canvas = c[i];
    var ctx = canvas.getContext("2d");
    ctx.clearRect(0,0, canvas.width, canvas.height);
    ctx.lineWidth=1;
  }

}
Run Code Online (Sandbox Code Playgroud)

提前致谢

我的曲线代码示例:

var data = {
diameter: 250,
slant: 20,
height: 290
};

for (i = 0; i < c.length; i++) {
  var canvas = c[i];
  var ctx = canvas.getContext("2d");
  ctx.beginPath();
    ctx.moveTo( 150 + ((data.diameter / 2) + data.slant ), (data.height - 3) );
    ctx.quadraticCurveTo( 150 , (data.height - …
Run Code Online (Sandbox Code Playgroud)

html javascript html5-canvas

22
推荐指数
3
解决办法
1512
查看次数

如何将Threejs连接到React?

我使用React并使用画布.我想将画布更改为WebGL(Threejs库).如何将此库连接到React?

我有一些元素,例如

<div ref="threejs"></div>
Run Code Online (Sandbox Code Playgroud)

如何使它成为Threejs库调用的字段?PS:.我不想使用像react-threejs这样的扩展

three.js reactjs

22
推荐指数
3
解决办法
1万
查看次数

HTML5灵活的盒子模型高度计算

在研究了灵活的盒子模型一整天后,我必须说我真的很喜欢它.它以快速,干净的方式实现了我在JavaScript中实现的功能.然而有一件事让我感到困惑:

我不能扩展div来采取灵活的盒子模型计算的全尺寸!

为了说明这一点,我将证明一个例子.在其中两个灵活的位置采用精确的和高度,但其中的div只占用"<p>...</p>"元素的高度.对于这个例子并不重要,但我最初尝试的是在另一个"灵活的盒子模型"中放置一个"灵活的盒子模型",这在我看来一定是可能的

html, body {
  font-family: Helvetica, Arial, sans-serif;
  width: 100%;
  height: 100%;
  margin: 0px;
  padding: 0px;
}

#box-1 {
  background-color: #E8B15B;

}
#box-2 {
  background-color: #C1D652;
}
#main {
  width: 100%;
  height: 100%;
  overflow-x: auto;
  overflow-y: hidden;
}


.flexbox {
  display:-moz-box;
  display:-webkit-box;
  display: box;
  text-align: left;
  overflow: auto;
}
H1 {
  width: auto;
}
#box-1 {
  height: auto;
  -moz-box-orient: vertical;
  -webkit-box-orient: vertical;
  box-orient: vertical;

  -moz-box-flex: 3;
  -webkit-box-flex: 3;
  box-flex: 3;
}
#box-2 {
  height: auto;
  min-width: …
Run Code Online (Sandbox Code Playgroud)

html5

21
推荐指数
2
解决办法
4万
查看次数

在对象数组中有效地重命名/重新映射javascript/json对象键

我有一些像这样的结构化JSON数据.让我们假设这是可以互换的,通过JSON.parse():

[
    {
        "title": "pineapple",
        "uid": "ab982d34c98f"
    },
    {
        "title": "carrots",
        "uid": "6f12e6ba45ec"
    }
]
Run Code Online (Sandbox Code Playgroud)

我需要它看起来像这样,重新映射titlename,并uidid与结果:

[
    {
        "name": "pineapple",
        "id": "ab982d34c98f"
    },
    {
        "name": "carrots",
        "id": "6f12e6ba45ec"
    }
]
Run Code Online (Sandbox Code Playgroud)

最明显的做法是这样的:

str = '[{"title": "pineapple","uid": "ab982d34c98f"},{"title": "carrots", "uid": "6f12e6ba45ec"}]';

var arr = JSON.parse(str);
for (var i = 0; i<arr.length; i++) {
    arr[i].name = arr[i].title;
    arr[i].id = arr[i].uid;
    delete arr[i].title;
    delete arr[i].uid;
}
Run Code Online (Sandbox Code Playgroud)

str = '[{"title": "pineapple","uid": "ab982d34c98f"},{"title": "carrots",    		"uid": "6f12e6ba45ec"}]'; …
Run Code Online (Sandbox Code Playgroud)

javascript arrays json javascript-objects

21
推荐指数
3
解决办法
3万
查看次数

什么时候调用URL.revokeObjectURL是安全的?

如果我理解正确,则URL.createObjectURL创建表示文件或blob的URL.因为URL只是一个字符串,所以浏览器无法知道您何时完成了URL所代表的资源,因此提供了一个URL.revokeObjectURL函数.

MDN显示了这个例子

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

canvas.toBlob(function(blob) {
  var newImg = document.createElement("img");
  var url = URL.createObjectURL(blob);

  newImg.onload = function() {
    // no longer need to read the blob so it's revoked
    URL.revokeObjectURL(url);
  };

  newImg.src = url;
  document.body.appendChild(newImg);
});
Run Code Online (Sandbox Code Playgroud)

所以有些问题

  1. 在分配后立即更改代码以撤销URL是否安全newImg.src

    var canvas = document.getElementById("canvas");
    
    canvas.toBlob(function(blob) {
      var newImg = document.createElement("img");
      var url = URL.createObjectURL(blob);
    
      newImg.src = url;
      // no longer need to read the blob as it's assigned to newImg.src
      URL.revokeObjectURL(url);
      document.body.appendChild(newImg);
    });
    
    Run Code Online (Sandbox Code Playgroud)

    我猜测答案是"不",因为可能没有任何事情开始 …

javascript html5

21
推荐指数
1
解决办法
9056
查看次数

Div框未使用内联块正确对齐

我有一些非常简单的代码,它非常适合我想要实现的外观.我有两个显示为"盒子"的div,它们包含在一个外部div中,它是boxContainer.我把盒子放在彼此旁边,而不是一个放在另一个上面,它们在屏幕中间完美对齐.随着浏览器宽度变小/变大,框宽度缩小/增长,如果浏览器窗口变得太小,则框重新定位为一个在另一个上面,同时保持在页面上居中.完善.

唯一的问题是盒子在底部而不是顶部对齐.因为第二个框中的文本较少,所以它会在页面下方向下推,以与第一个框的底部对齐.我希望它们在顶部对齐.

我相信这是由display:inline-block引起的,但我不知道为什么,我不知道如何修复它并保留我上面列出的相同功能.

如果你可以帮助我,我一定会很感激!!

#boxContainer {
    width:80%;
    margin:0 auto;
    text-align:center;
}
.box {
    display:inline-block;
    width:35%;
    margin:20px;
    border:solid 5px;
    border-radius:40px;
}
Run Code Online (Sandbox Code Playgroud)
<div id="boxContainer">
    <div class="box">
        <h3>BOX 1</h3>
        <p>TEXT GOES HERE, blaha dlfjas fakfasldfjas fkdf lasfjwio we dklajdakfliwo wklw jdkas fdsaj fjdsfwoif ajkdl kdalfej woja dklf woef adkiweoj daljidw odal fjwe ewew kalwoie ea falk blaha dlfjas fakfasldfjas fkdf lasfjwio we dklajdakfliwo wklw jdkas fdsaj fjdsfwoif ajkdl kdalfej woja dklf woef adkiweoj daljidw odal fjwe ewew kalwoie ea falk</p>
    </div>

    <div class="box"> …
Run Code Online (Sandbox Code Playgroud)

html css alignment

20
推荐指数
2
解决办法
2万
查看次数

如何在100%的td内获得div高度100%

这个问题似乎在stackoverflow上至少有10次被问到,但其中没有一个实际上有答案.这个问题略有不同,因为问题出现在Firefox中.

我的table身高100%,tr身高100%.我将边界设置为td我能看到的东西.我看到它td是100%的预期.我把divtd并将其设置为高100%.它在Chrome中是100%.在Firefox中它不是100%.

我该如何解决?

<!DOCTYPE html>
<html>
<head>
<style>
body, html {
    width: 100%;
    height: 100%;
    padding: 0px;
    margin: 0px;
}
.full {
    width: 100%;
    height: 100%;
    border: 10px solid red;
}
#content {
    width: 100%;
    height: 100%;
}

#content>table {
    width: 100%;
    height: 100%;
}
#content>table>tbody>tr>td {
    border: 10px solid blue;
    width: 50%;
}
#container {
    width: 100%;
    height: 100%;
    border: 10px solid black;
}
</style>
</head> …
Run Code Online (Sandbox Code Playgroud)

css

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

为什么GL将'gl_Position`除以W而不是让你自己做?

注意:我理解基本的数学.我理解perspective各种数学库中的典型函数会产生一个矩阵,它将-zNear到-zFar的z值转换回-1到+1,但前提是结果除以w

具体的问题是GPU为你做了什么,而不是你必须自己做?

换句话说,可以说的GPU没有神奇划分gl_Positiongl_Position.w,并且代替你不得不做手工,如

attribute vec4 position;
uniform mat4 worldViewProjection;

void main() {
  gl_Position = worldViewProjection * position;

  // imaginary version of GL where we must divide by W ourselves
  gl_Position /= gl_Position.w;
}
Run Code Online (Sandbox Code Playgroud)

由于这个原因,这个想象中的GL会打破什么?它是否有效或是否有一些关于在被除以之前传递值的东西,它w为GPU提供了额外需要的信息?

请注意,如果我实际执行此操作,纹理映射透视图会中断.

"use strict";
var m4 = twgl.m4;
var gl = twgl.getWebGLContext(document.getElementById("c"));
var programInfo = twgl.createProgramInfo(gl, ["vs", "fs"]);

var bufferInfo = twgl.primitives.createCubeBufferInfo(gl, 2);

var tex = twgl.createTexture(gl, {
  min: gl.NEAREST,
  mag: gl.NEAREST,
  src: [
    255, 255, 255, 255, …
Run Code Online (Sandbox Code Playgroud)

opengl opengl-es glsl

19
推荐指数
2
解决办法
3254
查看次数