我们正在开发一个可视化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) 首先,我找不到任何适当的社区来发布这个问题所以我选择了这个.我想知道流行的基于webGL的着色器工具的音频着色器是如何工作的,因为即使我明显听说过"普通"GLSL着色器,我第一次听说过用于程序生成音频的着色器,我很惊讶.有线索吗?
我一直在写一个小的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) 我使用React并使用画布.我想将画布更改为WebGL(Threejs库).如何将此库连接到React?
我有一些元素,例如
<div ref="threejs"></div>Run Code Online (Sandbox Code Playgroud)
如何使它成为Threejs库调用的字段?PS:.我不想使用像react-threejs这样的扩展
在研究了灵活的盒子模型一整天后,我必须说我真的很喜欢它.它以快速,干净的方式实现了我在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)我有一些像这样的结构化JSON数据.让我们假设这是可以互换的,通过JSON.parse():
[
{
"title": "pineapple",
"uid": "ab982d34c98f"
},
{
"title": "carrots",
"uid": "6f12e6ba45ec"
}
]
Run Code Online (Sandbox Code Playgroud)
我需要它看起来像这样,重新映射title到name,并uid以id与结果:
[
{
"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)如果我理解正确,则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)
所以有些问题
在分配后立即更改代码以撤销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)
我猜测答案是"不",因为可能没有任何事情开始 …
我有一些非常简单的代码,它非常适合我想要实现的外观.我有两个显示为"盒子"的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)这个问题似乎在stackoverflow上至少有10次被问到,但其中没有一个实际上有答案.这个问题略有不同,因为问题出现在Firefox中.
我的table身高100%,tr身高100%.我将边界设置为td我能看到的东西.我看到它td是100%的预期.我把div在td并将其设置为高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) 注意:我理解基本的数学.我理解perspective各种数学库中的典型函数会产生一个矩阵,它将-zNear到-zFar的z值转换回-1到+1,但前提是结果除以w
具体的问题是GPU为你做了什么,而不是你必须自己做?
换句话说,可以说的GPU没有神奇划分gl_Position的gl_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)