p5.js中DOM访问元素属性失败,自动模式门背景不更新
解决p5.js蒙提霍尔问题自动模式门变色报错
问题核心
TypeError: pickedDoor.style is not a function的本质是:自动模式中random(doors)返回的是p5.js的p5.Element实例,而非原生DOM元素,不能直接调用原生JS的style属性,得用p5内置的.style()方法。
修复方案
统一样式操作方式
如果你用p5.js的createDiv()创建门元素,数组里存的是p5.Element对象,必须调用p5提供的.style()方法设置样式:// 错误写法(原生DOM操作) pickedDoor.style.backgroundColor = "#ff0000"; // 正确写法(p5.js API) pickedDoor.style('background-color', '#ff0000');若坚持用原生DOM操作,可通过p5.Element的
.elt属性获取底层DOM节点:pickedDoor.elt.style.backgroundColor = "#ff0000";精准调试对象类型
别只用console.log(pickedDoor),改用console.dir(pickedDoor)展开对象结构,或者打印类型信息确认:console.log('对象类型:', typeof pickedDoor); console.log('是否为p5.Element:', pickedDoor instanceof p5.Element);对齐官方实现逻辑
检查官方演示中doors数组的构建方式:- 若官方用
document.querySelectorAll()获取DOM节点,那它的doors存的是原生元素,可直接用style属性; - 若官方用p5.js创建元素,必然用的是
.style()方法,你大概率是混用了两种操作逻辑。
- 若官方用
代码示例(修正版)
假设门的创建逻辑如下:
let doors = []; function setup() { noCanvas(); for (let i = 0; i < 3; i++) { let door = createDiv(`门 ${i+1}`); door.addClass('door'); doors.push(door); } }
自动模式中选择门后的变色代码修正为:
function autoPick() { let pickedDoor = random(doors); // 用p5.js API设置背景色 pickedDoor.style('background-color', '#4CAF50'); }
内容的提问来源于stack exchange,提问作者Ardi
相关产品推荐
相关产品推荐

