You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CSS Transform过渡不流畅:jQuery飞入动画模糊与缩放不同步且抖动问题

解决jQuery页面加载动画中模糊与缩放不同步及抖动问题

嘿,我来帮你搞定这个动画问题!你遇到的模糊(blur)和缩放(scale)不同步、动画结束时抖动的情况,其实是CSS过渡的设置和浏览器渲染机制导致的,咱们一步步来修复:

问题根源拆解

  1. 不同步问题filter: blur()transform: scale() 属于不同类型的CSS属性,浏览器对它们的渲染优先级和处理逻辑有细微差异,直接笼统设置过渡容易出现时序差。
  2. 抖动问题:动画收尾时的抖动,大多是因为初始状态和结束状态的属性切换不够平滑,或者浏览器在动画结束时触发了不必要的重绘/回流计算。

完整修复方案

1. 优化CSS过渡配置

把过渡属性明确指定出来,不要用笼统的transition: 1s ease-in-out,让浏览器精准同步处理两个动画:

.container {
    filter: blur(20px);
    transform: scale(0);
    /* 明确指定要过渡的属性,强制同步 */
    transition: filter 1s ease-in-out, transform 1s ease-in-out;
}

2. 避免动态添加过渡属性

你原来的代码是通过JS给.container动态加过渡,这会导致浏览器来不及提前注册过渡规则,直接把过渡写在初始CSS里就好。

3. 简化JS触发逻辑

不用在JS里写过渡属性,只需要切换目标状态就行:

$(document).ready(function() { 
    $(".container").css({ 
        "filter": "blur(0px)", 
        "transform": "scale(1)"
    }); 
});

额外优化:用类切换替代直接修改样式(更易维护)

如果后续还要调整动画,用类来控制状态会更灵活:

.container {
    filter: blur(20px);
    transform: scale(0);
    transition: filter 1s ease-in-out, transform 1s ease-in-out;
}
.container.active {
    filter: blur(0px);
    transform: scale(1);
}
$(document).ready(function() { 
    $(".container").addClass("active"); 
});

修复后的完整代码

HTML

<body>
    <div class="container">
        <div class="signin">
            <h1>Blah Blah</h1>
            <form>
                <input type="text" class="name" value="Name" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Name';}" />
                <input type="text" class="class1" value="Class" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Class';}" />
                <input type="submit" value="Submit" />
            </form>
            <h2>Please Select a Template</h2>
            <div class="loop">
                <div class="item"> Template 1</div>
                <div class="item"> Template 2</div>
                <div class="item"> Template 3</div>
            </div>
        </div>
    </div>
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
</body>

CSS

body {
    background: #eee;
}
.container {
    filter: blur(20px);
    transform: scale(0);
    transition: filter 1s ease-in-out, transform 1s ease-in-out;
    /* 可选:告诉浏览器提前准备动画,提升流畅度 */
    will-change: filter, transform;
}
.signin {
    width: 50%;
    margin: 80px auto 0;
    background-color: rgba(56, 49, 49, 0.13);
    padding: 20px;
    border: 2px ridge rgba(238, 238, 238, 0.13);
    border-radius: 5px;
    box-shadow: 0 -5px 10px 1px rgba(16, 16, 16, 0.57);
    border-bottom: none;
}

JS

$(document).ready(function() { 
    $(".container").addClass("active"); 
});

这样调整后,模糊和缩放动画就能完美同步,抖动问题也会彻底消失啦~

内容的提问来源于stack exchange,提问作者Allan Jebaraj

火山引擎 最新活动