P5 创建 <main></main>,我该如何防止这种情况发生?
P5 creates <main></main>, how do I prevent that?
每次执行我的 p5 脚本时,它都会将一个空的主标记放入正文中。
可能是我设置的原因(但我不这么认为):
function setup() {
let canv = createCanvas(400, 400), // TODO https://p5js.org/reference/#p5.Element/parent
mainFrame = createElement('main'),
mainDiv = createDiv();
mainDiv.parent(mainFrame);
canv.parent(mainDiv);
.
.
.
}
结果如下:
<body>
<main></main>
<main>
<div>
<canvas id="defaultCanvas0" class="p5Canvas" width="400" height="400" style="width: 400px; height: 400px;"></canvas>
</div>
</main>
.
.
.
</body>
有没有类似preventDefault()
的东西?
此行:mainFrame = createElement('main')
创建一个标签 main
并将其添加到 DOM。这就是您看到的添加到 DOM.
中的内容
您可以简单地将您发布的所有代码替换为:
function setup(){
let canvas = createCanvas(400,400);
}
就是这样!其余代码只做您不希望它做的事情。如果您想将 canvas 放在另一个元素中,只需将父元素的 id
作为参数传递给 canvas.parent()
例如:
HTML:
<div id = "canvas-container"></div>
JavaScript:
function setup(){
let canvas = createCanvas(400,400);
canvas.parent("canvas-container");
}
在将其设置为另一个之前保留对前一个容器的引用,稍后删除前一个容器。
function setup() {
let mainFrame = createElement('main'),
let canv = createCanvas(400, 400);
// keep a reference
let originParent = canv.parent();
canv.parent(mainFrame);
// delete it now
originParent.remove();
}
如果你是 instance mode
中的 运行,你可以像这样将 node
传递给 p5() 构造函数。这将阻止 main
首先被创建。
const s = p => {
p.setup = function() {
p.createCanvas(400, 400);
};
p.draw = function() {
};
};
new p5(s, document.body);
未来阅读有关如何在 global mode
中创建它的信息。
global mode
通过new p5()
创建元素,source, without passing a node
as a parameter like we did in the example above in instance mode
, so here, source你会看到main
节点是如何创建的,
if (this._userNode) {
// user input node case
this._userNode.appendChild(c);
} else {
//create main element
if (document.getElementsByTagName('main').length === 0) {
let m = document.createElement('main');
document.body.appendChild(m);
}
//append canvas to main
document.getElementsByTagName('main')[0].appendChild(c);
}
把_userNode
赋值给了我们传入的参数,也就是global mode
它不存在,所以它创建了一个main
元素作为容器
每次执行我的 p5 脚本时,它都会将一个空的主标记放入正文中。
可能是我设置的原因(但我不这么认为):
function setup() {
let canv = createCanvas(400, 400), // TODO https://p5js.org/reference/#p5.Element/parent
mainFrame = createElement('main'),
mainDiv = createDiv();
mainDiv.parent(mainFrame);
canv.parent(mainDiv);
.
.
.
}
结果如下:
<body>
<main></main>
<main>
<div>
<canvas id="defaultCanvas0" class="p5Canvas" width="400" height="400" style="width: 400px; height: 400px;"></canvas>
</div>
</main>
.
.
.
</body>
有没有类似preventDefault()
的东西?
此行:mainFrame = createElement('main')
创建一个标签 main
并将其添加到 DOM。这就是您看到的添加到 DOM.
您可以简单地将您发布的所有代码替换为:
function setup(){
let canvas = createCanvas(400,400);
}
就是这样!其余代码只做您不希望它做的事情。如果您想将 canvas 放在另一个元素中,只需将父元素的 id
作为参数传递给 canvas.parent()
例如: HTML:
<div id = "canvas-container"></div>
JavaScript:
function setup(){
let canvas = createCanvas(400,400);
canvas.parent("canvas-container");
}
在将其设置为另一个之前保留对前一个容器的引用,稍后删除前一个容器。
function setup() {
let mainFrame = createElement('main'),
let canv = createCanvas(400, 400);
// keep a reference
let originParent = canv.parent();
canv.parent(mainFrame);
// delete it now
originParent.remove();
}
如果你是 instance mode
中的 运行,你可以像这样将 node
传递给 p5() 构造函数。这将阻止 main
首先被创建。
const s = p => {
p.setup = function() {
p.createCanvas(400, 400);
};
p.draw = function() {
};
};
new p5(s, document.body);
未来阅读有关如何在 global mode
中创建它的信息。
global mode
通过new p5()
创建元素,source, without passing a node
as a parameter like we did in the example above in instance mode
, so here, source你会看到main
节点是如何创建的,
if (this._userNode) {
// user input node case
this._userNode.appendChild(c);
} else {
//create main element
if (document.getElementsByTagName('main').length === 0) {
let m = document.createElement('main');
document.body.appendChild(m);
}
//append canvas to main
document.getElementsByTagName('main')[0].appendChild(c);
}
把_userNode
赋值给了我们传入的参数,也就是global mode
它不存在,所以它创建了一个main
元素作为容器