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

如何针对CSS类而非ID实现文字抖动动画?

问题:将文本抖动动画从ID选择器适配到类选择器

原代码通过JavaScript把ID为wiggle的元素内容拆分为单个<span>标签,配合CSS实现波浪抖动动画效果。但将ID改为类选择器(把getElementById替换为getElementsByClassName、#wiggle替换为.wiggle)后动画失效,需要修改JavaScript使其支持多个带有该类的元素,同时保留原有动画功能。

解决方法与修改要点

  • 遍历类元素集合:getElementsByClassName返回的是类数组形式的元素集合,必须逐个遍历处理每个元素,不能像处理单个ID元素那样直接操作
  • 独立处理每个元素的内容:对每个带wiggle类的元素,单独缓存原始HTML内容、清空元素、拆分字符并重新生成带动画延迟的<span>标签
  • 保留原有动画逻辑:字符的动画延迟计算逻辑保持不变,确保每个元素内的字符仍能呈现波浪式抖动效果

修正后的完整代码

JavaScript

function wiggle(){
  // 获取所有带wiggle类的元素
  var parents = document.getElementsByClassName("wiggle");
  
  // 遍历每个元素进行处理
  for (var j = 0; j < parents.length; j++) {
    var parent = parents[j];
    var string = parent.innerHTML;
    parent.innerHTML = "";
    var chars = string.split("");
    var length = chars.length;
    
    for (var i = 0; i < length; i++) {
      parent.innerHTML += "<span style='--n:"+ (100 * i - 10000 + 'ms') + ";'>" + chars[i] + "</span>";
    }
  }
}

wiggle()

CSS

.wiggle span{
  animation-delay: var(--n);
  animation: wave 2s linear infinite forwards running;
  position: relative;
}

@keyframes wave{
  0% {top: 0px;}
  25% {top: -4px;}
  50% {top: 0px;}
  75% {top: 4px;}
  100% {top: 0px;}
}

HTML

<h1 class="wiggle">This text should wiggle...</h1>

<h2 class="wiggle">Now this text should wiggle too!</h2>

效果说明

修改后,所有带有wiggle类的标题元素都会将内部文本拆分为独立的<span>标签,每个字符按顺序应用波浪抖动动画,实现多元素同时生效的动画效果,完全保留了原有的波浪动画节奏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:47:45