You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

谷歌恐龙项目:如何用SCSS/JS实现仙人掌动画时长与延迟随机化

解决方案

由于SCSS是预编译工具,无法生成运行时的随机值,所以需要通过JavaScript配合CSS来实现动画参数的随机化,以下是两种可行方案:

方案1:直接用JavaScript设置动画属性

先简化CSS类,只保留固定的动画规则:

.cactus-anim {
    animation-name: cactus-move;
    animation-timing-function: linear;
    animation-iteration-count: infinite;
}

@keyframes cactus-move {
    0% {
        left: 700px;
    }
    100% {
        left: -40px;
    }
}

再用JavaScript为每个仙人掌元素动态生成随机的时长和延迟:

// 生成指定区间的随机数
function getRandom(min, max) {
    return Math.random() * (max - min) + min;
}

// 处理页面中已有的仙人掌元素
const cacti = document.querySelectorAll('.cactus-anim');
cacti.forEach(cactus => {
    const randomDuration = `${getRandom(1, 2)}s`;
    const randomDelay = `${getRandom(0, 0.7)}s`;
    
    cactus.style.animationDuration = randomDuration;
    cactus.style.animationDelay = randomDelay;
});

// 如果游戏中会动态生成新仙人掌,在创建元素时同步设置参数
function createCactus() {
    const cactus = document.createElement('div');
    cactus.classList.add('cactus-anim');
    // 这里可添加仙人掌的其他样式/逻辑
    
    const randomDuration = `${getRandom(1, 2)}s`;
    const randomDelay = `${getRandom(0, 0.7)}s`;
    cactus.style.animationDuration = randomDuration;
    cactus.style.animationDelay = randomDelay;
    
    document.body.appendChild(cactus);
}

方案2:CSS变量 + JavaScript(更易维护)

用CSS变量承载动态参数,让CSS结构更清晰:

.cactus-anim {
    animation: cactus-move var(--duration) var(--delay) linear infinite;
}

@keyframes cactus-move {
    0% {
        left: 700px;
    }
    100% {
        left: -40px;
    }
}

再通过JavaScript为每个元素赋值CSS变量:

function getRandom(min, max) {
    return Math.random() * (max - min) + min;
}

// 处理已有仙人掌
document.querySelectorAll('.cactus-anim').forEach(cactus => {
    cactus.style.setProperty('--duration', `${getRandom(1, 2)}s`);
    cactus.style.setProperty('--delay', `${getRandom(0, 0.7)}s`);
});

// 动态生成仙人掌时的逻辑
function createCactus() {
    const cactus = document.createElement('div');
    cactus.classList.add('cactus-anim');
    
    cactus.style.setProperty('--duration', `${getRandom(1, 2)}s`);
    cactus.style.setProperty('--delay', `${getRandom(0, 0.7)}s`);
    
    document.body.appendChild(cactus);
}

内容的提问来源于stack exchange,提问作者Oleh Andrishko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:32:08