动态改变背景颜色
Dynamically Change Background Color
如果我有一个元素,我正在监听文档上的单击(可以在任何地方,这部分无关紧要),并且每次单击,我希望元素的颜色变深,我如何在逻辑上或数字上改变它?
这是我尝试过的:
on('click', function() {
var myElementBG = myElement.backgroundColor;
myElement.style.backgroundColor = myElementBG - 101010;
});
这里的问题是,myElementBG返回"#707070",所以试图从它减去101010产生NaN错误,因为'#'是值的一部分。
任何想法?
试试这个:
JsFiddle
function subtractColorsHex(a, b) {
a = a.replace('#', '');
// We don't expect '#' symbol in b
var decA = parseInt(a, 16);
var decB = parseInt(b, 16);
var resultDec = decA - decB;
var resultHex = Math.abs(resultDec).toString(16);
return "#" + "000000".substring(0, 6 - resultHex.length) + resultHex;
}
用法:
subtractColorsHex('#070707', '101010');
您可以使用hsl()值,其中l部分表示亮度,其中0%为黑色,100%为白色。除ie8及以下浏览器外,所有主流浏览器都有良好的支持
我会把颜色的值(不带'#')保存在另一个地方,例如作为div的属性。然后你可以很容易地增加/减少这个值,并将其设置为实际的背景色。
我已经做了一个例子(我使用jQuery来说明这一点,但这个想法在纯javascript中也是有效的)。
小提琴
$(document).ready(function(){
$("div").attr("data-color", "F0F0F0");
paintBackground();
$(document).click(function(){
makeDivDarker();
});
});
function makeDivDarker(){
$div = $("div");
var currentColor = parseInt($div.attr("data-color"), 16);
var newColor = currentColor - parseInt("101010", 16);
$div.attr("data-color", newColor.toString(16));
paintBackground();
}
function paintBackground(){
var $div = $("div");
$div.css("background-color", "#" + $div.attr("data-color"));
}
与其使用HEX代码,不如使用RGB颜色作为背景,然后您可以使用Jquery逐渐减少每个值(RGB)。
相关文章:
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 如何使用jquery更改html中的背景颜色
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- JS幻灯片与CSS背景颜色变化
- DT数据表背景颜色为黑色,但仍有悬停和选择颜色
- Javascript通过列表项的函数和css来更改背景颜色
- Javascript没有从数组中选择背景颜色
- 使用圆中的数组更改背景颜色项目
- 如何用jquery动画改变背景颜色,就像一个过渡
- 使用jquery交换并保存背景颜色
- j查询如何设置/取消设置下拉菜单的背景颜色
- 使用angularjs根据时间更改背景颜色
- 设置Dojo量表的背景颜色
- 如何使用颜色选择器来更改背景中的文本
- charts js更改折线图轴的字体大小/颜色和背景线
- javascript样式的背景颜色在设置时闪烁.ASP.NET
- 在背景颜色背景图像之间分层文本
- sliicknav菜单,每个li都有特定的颜色背景
- 尝试根据当前背景更改背景颜色:背景颜色没有值
- jQuery中的颜色/背景颜色改变动画