3 回答
TA贡献1802条经验 获得超10个赞
您的代码很好,但Particles.js代码中存在一个错误,它将您的设置应用于默认值之上。
如果您使用Partific.js的非缩小版本,则可以添加使用调试器在应用设置之前观察值(第139-141行):
/* params settings */if(params){
Object.deepExtend(pJS, params);}Object.deepExtend以递归方式将值从一个对象复制到另一个对象。它在同一个文件中进一步定义:
Object.deepExtend = function(destination, source) {
for (var property in source) {
if (source[property] && source[property].constructor &&
source[property].constructor === Object) {
destination[property] = destination[property] || {};
arguments.callee(destination[property], source[property]);
} else {
destination[property] = source[property];
}
}
return destination;};当源和目标具有相同的形状时,这可以正常工作,如下所示:
var destination ={
old: "no change",
shared: "default"},source ={
shared: "override",
new: "added"}Object.deepExtend(destination, source);/* `destination` will now look like this:
{
old: "no change",
shared: "override",
new: "added"
}
*/源中的字符串,目标中的字符串。就像您的{color: {value: "#f00"}}示例覆盖默认值一样{color: {value: "#fff"}}。
但是当源有一个Object,其中目标有一个字符串(就像你所说的源{color: {value: {r:182, g:25, b:36}和目的地(默认)那样){color: {value: "#fff"}},它的逻辑就会崩溃。
特别是,控制最终到达第1423行:
destination[property] = source[property];
到那个时候,destination设置为一个普通的字符串,所以它做了一些非常奇怪的事情:
"#fff"["r"] = 182;
没错,它r在字符串“#fff”上设置属性。这显然不是你想要的行为:-)
重要的是,这意味着库的文档和库的代码彼此不一致......几乎就是bug的定义。我建议提交一个问题,并试图找出另一种方法来获取你的颜色(一种方法是使用你自己的Particles.js副本并删除默认颜色)。
TA贡献1785条经验 获得超4个赞
这应该工作,它检查h vs r值等。
var item = {
prop: {
"color": {
"value": {
h: 356, // or r: 356
s: 76, // or: s: 76
l: 41 // or b: 41
}
}
}}colorresult = {};var color = item.prop.color;if ((color.value.h || color.value.b) && (color.value.s || color.value.g)&&
(color.value.l || color.value.b)) {
colorresult.rgb = {
r: color.value.h || color.value.r,
g: color.value.s || color.value.g,
b: color.value.l || color.value.b }}console.log(colorresult)添加回答
举报
