CSS的Transition只能计算数值型的变量,但颜色本身其实也是数值,不过遵循的变化规律不同而已。以十六位数字而非RGB表示颜色,可以用JS模拟出COLOR的渐变过程。
技术点:
- 条件下setTimeout调用自身来渐变。
- 通过设置内部变量作为flag,决定变化的方式。
var b = document.body.style
function changeColor (s,interval){
s.backgroundColor = '#ffffcc'
var level = 2
var changepoint = false
var step = function(){
if(level === -1 && changepoint){
return;
}
var hex = level.toString(16)
if(changepoint){
//console.log('now change')
s.backgroundColor = '#ff' + hex + hex + 'ff'
}
else {
s.backgroundColor = '#ffff' + hex + hex
}
if(level <16 && !changepoint) {
level ++
if(level === 16 ) {
changepoint = true
}
}
if(level >= 0 && changepoint){
level--
}
setTimeout(step,interval)
//console.log(level,changepoint)
}
setTimeout(step,interval)
}
changeColor(b,50)