如何在一个html/css网格中显示多个p5.js脚本

How to display multiple p5.js scripts in a HTML/CSS grid(如何在一个html/css网格中显示多个p5.js脚本)
本文介绍了如何在一个html/css网格中显示多个p5.js脚本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有多个p5.js脚本,它们都生成100x100的画布。假设我有9个,这是每个的代码:

var canvas_size = 200

function setup() {
  createCanvas(canvas_size, canvas_size);
  frameRate(300);
}

function draw() {
    background(random(255));
}

现在我希望我的index.html在一个网格中显示9个脚本中的每一个(固定的列数和行数,甚至更好的响应性)。我正在玩最常见的网格的css示例,但实际上没有运气。

这是我的index.html:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Sketch</title>

    <link rel="stylesheet" type="text/css" href="style.css">

    <script src="libraries/p5.min.js"></script>
    <script src="libraries/p5.sound.min.js"></script>
  </head>

  <body>
    <div class="grid-container">
      <div class="grid-item"><script src="sketch1.js"></script></div>
      <div class="grid-item"><script src="sketch2.js"></script></div>
      <div class="grid-item"><script src="sketch3.js"></script></div>
      <div class="grid-item"><script src="sketch4.js"></script></div>
      <div class="grid-item"><script src="sketch5.js"></script></div>
      <div class="grid-item"><script src="sketch6.js"></script></div>
      <div class="grid-item"><script src="sketch7.js"></script></div>
      <div class="grid-item"><script src="sketch8.js"></script></div>
      <div class="grid-item"><script src="sketch9.js"></script></div>
    </div>
  </body>
</html>

和style.css:

html, body {
  margin: 0;
  padding: 0;
}

谢谢!

推荐答案

您的每个草图都需要在instance mode中实现。此方法避免了在全局范围内声明您的setupdraw和其他p5.js生命周期函数,这会导致您的不同草图之间发生冲突。

示例:

// all p5.js functions should be called via the p object
let sketch = function(p) {
  let x = 100;
  let y = 100;

  p.setup = function() {
    p.createCanvas(700, 410);
  };

  p.draw = function() {
    p.background(0);
    p.fill(255);
    p.rect(x, y, 50, 50);
  };
};

let myp5 = new p5(sketch);

要使每个草图出现在特定的网格位置,您可以让每个草图指定一个容器div id。或者您可以使用document.currentSketch.parentElement

数据-lang="js"数据-隐藏="假"数据-控制台="假"数据-巴贝尔="假">
.grid-container {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
}

.grid-item {
  padding: 5px;
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>Sketch</title>

  <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js"></script>
</head>

<body>
  <div class="grid-container">
    <div id="sketchContainer1" class="grid-item">
      <script>
        function sketch1(p) {
          p.setup = () => {
            p.createCanvas(200, 200);
            p.background('cyan');
          };
        }

        new p5(sketch1, "sketchContainer1");
      </script>
    </div>
    <div id="sketchContainer2" class="grid-item">
      <script>
        function sketch2(p) {
          p.setup = () => {
            p.createCanvas(200, 200);
            p.background('magenta');
          };
        }

        new p5(sketch2, "sketchContainer2");
      </script>
    </div>
    <div class="grid-item">
      <script>
        function sketch3(p) {
          p.setup = () => {
            p.createCanvas(200, 200);
            p.background('yellow');
          };
        }

        new p5(sketch3, document.currentScript.parentElement);
      </script>
    </div>
    <div class="grid-item">
      <script>
        function sketch4(p) {
          p.setup = () => {
            p.createCanvas(200, 200);
            p.background('black');
          };
        }

        new p5(sketch4, document.currentScript.parentElement);
      </script>
    </div>
  </div>
</body>

</html>

这篇关于如何在一个html/css网格中显示多个p5.js脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

js文件上传前的预览和删除实例代码,具体如下: !DOCTYPE htmlhtml lang="en" head meta charset="UTF-8" / meta http-equiv="X-UA-Compatible" content="IE=edge" / meta name="viewport" content="width=device-width, initial-scale=1.0" / title文件上传预览和删除/title style #img-box{display: flex;
layui表格:设置表头居中,内容居左的实例代码:表头在属性中控制,内容直接用css样式控制 { field: 'Result', title: '结果', align: 'center', width: '60%', templet: function (d) { return 'div style="text-align:left"' + d.Result + '/div' }},
element el-tree树结构刷新后保留展开状态解决方法 我们在使用element的el-tree组件的时候,当我们给树结构重新赋值后,树节点就全部自动合上了。所以我们要记录展开状态,方法如下 html代码如下: el-tree ref="tree" :data="treeList" :highlight-current="true" :
本文给大家介绍Javascript js中实现和PHP一样的时间戳格式化函数的方法,具有一定的参考借鉴价值,需要的朋友可以参考下,我们知道在php中有一个date()函数,可以方便的把时间戳格式化为时间字符串。可是在js中,我们要想实现这种效果,要写好
需求是模板字符串中不允许出现script 标签、不允许有javascript: 和 .js 文件引用,主要方法如下: clearScriptTag (str) { const reg = /script[^]*([\S\s]*?)\/script/gim; // 清除标签内 相关 xss 安全代码 const reg1 = /javascript:/gim; const reg2 = / *.js/gim; if (reg.test(str)) { str
javascript中Replace全部替换字符用法实例代码,替换1次和多次,主要是正则表达式 var r= "1\n2\n3\n";//将字母\n替换成分号alert(r.replace("\n",";"));//结果:1;2\n3\n 只替换了第一个var r= "1\n2\n3\n";//将字母\n替换成分号alert(r.replace(/\n/g, ";"));//结果:1;2;3; replac