小编gma*_*man的帖子

有可能让React移动一个元素而不是在它改变它在DOM中的位置时重新创建它吗?

有可能让React移动一个元素而不是在它改变它在DOM中的位置时重新创建它吗?

让我们假设我正在创建一个2窗格组件,我希望能够隐藏/取消隐藏一个窗格.我们也可以想象窗格本身很重.在我的例子中,每个窗格都有超过2000个元素.

在我的实际代码中,当有2个窗格时,我正在使用分割器.为了只显示一个窗格,我需要删除拆分器并用div替换它.

下面的代码模拟了这一点.如果有一个窗格,则使用a div来包含窗格.如果有2个窗格pre用于包含它们.在我的情况下,它将是div1痛苦和splitter2.

因此,document.createElement我发现不仅创建了容器,而且还重新创建了内部元素.换句话说,在我的代码中,当从splitter-> div开始时,2000+元素窗格将完全重新创建,这很慢.

有没有办法有效地告诉React."嘿,不要重新创建这个组件,只是移动它?"

class TwoPanes extends React.Component {
  constructor(props) {
    super(props);
  }
  render() {
    const panes = this.renderPanes();
    if (panes.length === 2) {
      return React.createElement('pre', {className: "panes"}, panes);
    } else {
      return React.createElement('div', {className: "panes"}, panes);
    }
  }
  renderPanes() {
    return this.props.panes.map(pane => {
      return React.createElement('div', {className: "pane"}, pane);
    });
  }
}

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      panes: [
        "pane …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs

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

如何在puppeter中打印页面的控制台输出,就像在浏览器中一样?

我一直看到这个错误代码

page.on('console', msg => console.log(msg.text()));
Run Code Online (Sandbox Code Playgroud)

这失败

console.log('Hello %s', 'World');
Run Code Online (Sandbox Code Playgroud)

产生

Hello World     // browser
Hello %s World  // puppeteer
Run Code Online (Sandbox Code Playgroud)

好,所以我想也许我可以做到

page.on('console', msg => console.log(...msg.args()));
Run Code Online (Sandbox Code Playgroud)

NOPE:那倒掉了一些巨大的JSHandle东西。

好吧,也许

page.on('console', msg => console.log(...msg.args().map(a => a.toString());
Run Code Online (Sandbox Code Playgroud)

NOPE:打印

JSHandle: Hello %s JSHandle: World
Run Code Online (Sandbox Code Playgroud)

我想我可以通过删除前9个字符来破解它。

我也试过

page.on('console', msg => console.log(...msg.args().map(a => a.jsonValue())));
Run Code Online (Sandbox Code Playgroud)

NOPE:打印

Promise { <pending> } Promise { <pending> }
Run Code Online (Sandbox Code Playgroud)

好吧

page.on('console', async(msg) => {
  const args = Promise.all(msg.args().map(a => a.jsonValue()));
  console.log(...args);
});
Run Code Online (Sandbox Code Playgroud)

不,那是打印

UnhandledPromiseRejectionWarning: TypeError: Found non-callable @@iterator
UnhandledPromiseRejectionWarning: Unhandled …
Run Code Online (Sandbox Code Playgroud)

javascript puppeteer

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

在three.js中勾勒出一个3d对象

在许多视频游戏中,我看到一种模式,当你将鼠标悬停在一个物体上时,它会在物体的2D形状周围显示一个漂亮的渐变高光.我建立了一个相当基本的Three.js场景,里面有一个球体

首先,我设置了raycaster变量:

var projector = new THREE.Projector();
var mouse2D = new THREE.Vector2(0, 0);
var mouse3D = new THREE.Vector3(0, 0, 0);
Run Code Online (Sandbox Code Playgroud)

然后我做了一个raycaster功能

document.body.onmousemove = function highlightObject(event) {
    mouse3D.x = mouse2D.x = mouse2D.x = (event.clientX / window.innerWidth) * 2 - 1;
    mouse3D.y = mouse2D.y = mouse2D.y = -(event.clientY / window.innerHeight) * 2 + 1;
    mouse3D.z = 0.5;

    projector.unprojectVector(mouse3D, camera);
    var raycaster = new THREE.Raycaster(camera.position, mouse3D.sub(camera.position).normalize());
    var intersects = raycaster.intersectObject(mesh);
     if (intersects.length > 0) {
         var obj = intersects[0].object; //the object that was …
Run Code Online (Sandbox Code Playgroud)

javascript three.js

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

如何在 Three.js 中重复纹理而不拉伸?

无论我做什么,我的纹理似乎都会被拉伸/缩放到我应用它们的网格的大小。我已经阅读了这个问题的很多答案,似乎没有一个解决方案可以为我解决问题,所以我发布了一个新的解决方案。只是一点信息,

  • 我的纹理都是 64x64 像素
  • 我正在预加载所有纹理
  • 我正在使用 Web GL 渲染器

这是我的代码

makeTestObject:function()
{
    var scope = this,
        tileGeometry = new THREE.BoxGeometry(TILE_SIZE , TILE_HEIGHT , TILE_SIZE),
        texture = new THREE.Texture(preloadedImageObject),
        textureMaterial = new THREE.MeshLambertMaterial({map:texture}),
        tile = new THREE.Mesh(tileGeometry , new THREE.MeshFaceMaterial(
        [
            textureMaterial, // +x
            textureMaterial, // -x
            textureMaterial, // +y
            textureMaterial, // -y
            textureMaterial, // +z
            textureMaterial // -z
        ]));

    texture.wrapS = THREE.RepeatWrapping;
    texture.wrapT = THREE.RepeatWrapping;

    tile.position.y = BASE_HEIGHT * 2;
    tile.castShadow = true;
    tile.receiveShadow = true;
    texture.needsUpdate = true;
    scope.scene.add(tile); …
Run Code Online (Sandbox Code Playgroud)

javascript textures texture-mapping three.js

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

使用Three.js提高性能

我目前正在编写我的第一个Three.js/WebGL应用程序,它在我的PC(Chrome)上运行得非常好.遗憾的是,在许多其他PC上,帧速率通常会低于每秒30帧.

由于应用程序实际上并不复杂,我想询问一些与应用程序相关的提示,以提高性能.该应用程序的一个版本可以在这里找到:

www.wrodewald.de/StackOverflowExample/

该应用程序包含一个使用64²顶点的动态(变形)平面.矩阵用于存储静态高度图和波形图.每个帧都会更新波形图以重新计算自身,一些过滤器用于与每个顶点相比"均匀".因此,必须更新平面的每个帧(颜色和顶点位置),这可能是性能问题的原因

第二个对象(菱形)不应该是一个问题,静止,移动一点但没有什么特别的.

有三个灯(环境,方向,球形),没有阴影,倾斜移位着色器和晕影着色器.

以下是每帧调用的函数:

var render = function() {
    requestAnimationFrame( render );
    var time = clock.getDelta();

    world.updateWorld(time);
    diamond.rotate(time);
    diamond.update(time);
    control.updateCamera(camera, time);
    composer.render();      
    stats.update();
}
Run Code Online (Sandbox Code Playgroud)

这是什么world.updateWorld(time)呢

//in world.updateWorld(time) where
// accmap: stores acceleration and wavemap stores position
// this.mapSize stores the size of the plane in vertices (64)

// UPDATE ACCELERATION MAP
for(var iX = 1; iX < (this.mapSize-1); iX++) {
    for(var iY = 1; iY < (this.mapSize-1); iY++) {
        accmap[iX][iY] -=  dT * (wavemap[iX][iY]) * …
Run Code Online (Sandbox Code Playgroud)

javascript performance three.js

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

如何为 HttpWebRequest 或 WebRequest C# 强制使用 ipv6 或 ipv4

来自 node.js 我可以这样做来告诉 node.js 使用 ipv6 和 ipv4 发出请求

var http = require("http");
var options = {
  hostname: "google.com",
  family: 4, // set to 6 for ipv6
};
var req = http.request(options, function(res) {
  .. handle result here ..
});
req.write("");
req.end();
Run Code Online (Sandbox Code Playgroud)

设置family为4强制 ipv4,将其设置为6强制 ipv6。不设置它可以让任何一个工作。

我如何在 C# (.NET 3.5) 中做同样的事情

我可以想到一种方法,即自己为 A 或 AAAA 记录发出 DNS 请求,发出直接 IP 请求并设置host:标头。有没有更好的办法?

c# network-programming ipv4 ipv6

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

Three.js 场景在 Safari 11.0.2 中无法渲染

我试图确定为什么 Three.js 场景无法在 Safari 11.0.2 (OSX 10.12.6) 中呈现。

/**
  * Generate a scene object with a background color
  **/

function getScene() {
  var scene = new THREE.Scene();
  scene.background = new THREE.Color(0x111111);
  return scene;
}

/**
  * Generate the camera to be used in the scene. Camera args:
  *   [0] field of view: identifies the portion of the scene
  *     visible at any time (in degrees)
  *   [1] aspect ratio: identifies the aspect ratio of the
  *     scene in width/height
  * …
Run Code Online (Sandbox Code Playgroud)

browser safari standards webgl three.js

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

我可以从深度和RGB图像创建点云吗?

我是3js的新手,我有2个图像,即RGB图像和深度图像。我可以使用3js创建将这两者结合在一起的点云吗?如果是,那怎么办?

point-clouds three.js

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

Pixi.js Container.width 不返回宽度

我遇到了一些问题:我试图访问已添加精灵的容器的宽度,但它似乎返回为 1。但是,当我在控制台中检查对象时,它给了我合适的宽度。

我写了一个代码笔来显示这个问题,但它是这样的:

var container = new PIXI.Container();
app.stage.addChild(container);

var sprite = PIXI.Sprite.fromImage('https://i2.wp.com/techshard.com/wp- 
content/uploads/2017/05/pay-1036469_1920.jpg?ssl=1&w=200');
container.addChild(sprite);

console.log(container.height);
console.log(container);
Run Code Online (Sandbox Code Playgroud)

第一个控制台日志返回 1,而如果我进入第二个日志中的对象,它会返回 141。

我正在尝试像演示中那样将容器居中。演示容器返回正确的宽度,除非您尝试仅对一只“兔子”执行此操作(用互联网图像替换兔子纹理,并且 for 循环也被注释掉)。

有关于此的正确方法有什么建议吗?干杯

pixi.js

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

三.JS更新透视相机的fov值并保持相同的相机距离

我想在动画过程中修改相机的 FOV 值。不幸的是,一旦我实现了 FOV 值,我就可以观察到我的场景变得更小。

所以我一直想知道,FOV 值和透视相机的距离位置之间的数学联系是什么?

这个想法是在 FOV 值发生变化时拥有相同的场景(通过修改相机位置来实现相同的大小)。

非常感谢。

编辑1:

这是说明我的问题的片段:当我实现相机的 FOV 值(从 4 到 45)时,我的方块和相机之间的距离发生了变化。我该如何预防呢?

        let W = window.innerWidth, H = window.innerHeight;
        
        let renderer = new THREE.WebGLRenderer( { antialias: true, alpha: true } );
        renderer.setPixelRatio( window.devicePixelRatio );
        renderer.setSize( W, H );

        document.body.appendChild( renderer.domElement );

        let camera = new THREE.PerspectiveCamera( 4, W/H, 1, 100 );
        let scene = new THREE.Scene();

        camera.position.set(0,0,14);
        camera.lookAt(0,0,0);

        let geo = new THREE.BoxGeometry(0.5, 0.5, 0.5);
        let mat = new THREE.MeshNormalMaterial();
        let mesh = new …
Run Code Online (Sandbox Code Playgroud)

javascript camera three.js

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