我正在制作一个博客主题,当作者发布他们的帖子时,它会使用特色图片和特色的混合物。我想让脚本经历三件事:
我有一段几乎的JavaScript代码,我认为我在if
语句中使用的逻辑可能存在问题。
脚本
$(".post").each(function randomColor() {
var bgCol = $(".post").css('backgroundColor');
if ( bgCol != "rgb(0,0,0)" || (bgCol.attr('style').indexOf('image') !== -1 )) {
var color = "#"+(Math.random()*0xFFFFFF<<0).toString(16);
$(this).css("background-color", color)
}
else { return }
});
我设置了jsFiddle to demonstrate the problem。它会保留图像,但如果设置了则会覆盖特色。
有关如何改进if
循环的任何想法?
我有blog theme的演示(非常稀疏),所以你可以看到我想要的东西。
答案 0 :(得分:2)
<强> jsBin demo 强>
我会检查计算出的样式:
$(".post").each(function() {
var cs = window.getComputedStyle(this);
if (cs.backgroundImage==="none" &&
cs.backgroundColor==="transparent" ||
/0\)$/.test(cs.backgroundColor) ) {
var color = "hsl("+ ~~(Math.random()*360) +",60%,70%)";
$(this).css("background-color", color);
}
});
这一行/0\)$/.test(cs.backgroundColor)
只测试rgba
值是否以0 alpha不透明0)
结尾(Webkit返回rgba(0,0,0,0)而不是&#34;透明& #34;基本相同)。
使用hsl()
色调,饱和度,亮度(而不是十六进制#
)将让您更好地控制随机生成的颜色强度(因此您最适合它一般网站的轻盈和感觉)。
答案 1 :(得分:0)
$(".post").each(function randomColor() {
var bgCol = $(".post").css('backgroundColor');
console.log(bgCol);
if ( bgCol == "rgba(0, 0, 0, 0)") {
var color = "#"+(Math.random()*0xFFFFFF<<0).toString(16);
$(this).css("background-color", color)
}
else { return }
});
以下是代码,因为css应用的所有更改都需要查找没有背景的元素并生成随机颜色。