通过闭包和setTimeout让背景颜色从黄变白再变紫红

本文介绍如何使用JavaScript模拟CSS颜色渐变效果,通过设置内部变量控制变化方式,利用setTimeout实现颜色从#ffffcc到#ff00ff的平滑过渡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CSS的Transition只能计算数值型的变量,但颜色本身其实也是数值,不过遵循的变化规律不同而已。以十六位数字而非RGB表示颜色,可以用JS模拟出COLOR的渐变过程。

技术点:

  1. 条件下setTimeout调用自身来渐变。
  2. 通过设置内部变量作为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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值