当前位置:首页 > JavaScript

js怎么实现抖动

2026-04-04 15:44:52JavaScript

JavaScript 实现抖动效果

抖动效果(Shake Effect)通常用于吸引用户注意力或提示错误操作。以下是几种实现方法:

使用 CSS 动画

通过 CSS 定义抖动动画,再用 JavaScript 触发:

js怎么实现抖动

.shake {
  animation: shake 0.5s cubic-bezier(.36,.07,.19,.97) both;
}

@keyframes shake {
  0%, 100% { transform: translateX(0); }
  10%, 30%, 50%, 70%, 90% { transform: translateX(-5px); }
  20%, 40%, 60%, 80% { transform: translateX(5px); }
}
function shakeElement(element) {
  element.classList.add('shake');
  setTimeout(() => element.classList.remove('shake'), 500);
}

纯 JavaScript 实现

通过定时器动态修改元素位置:

function shake(element, intensity = 5, duration = 500) {
  const startTime = Date.now();
  const interval = setInterval(() => {
    const elapsed = Date.now() - startTime;
    const progress = elapsed / duration;

    if (progress >= 1) {
      clearInterval(interval);
      element.style.transform = '';
      return;
    }

    const shakeX = intensity * Math.sin(progress * 20) * (1 - progress);
    element.style.transform = `translateX(${shakeX}px)`;
  }, 16);
}

使用第三方库

使用 jQuery 实现抖动效果:

js怎么实现抖动

$.fn.shake = function() {
  this.css('position','relative');
  for(let x = 1; x <= 3; x++) {
    this.animate({left: -5}, 50)
      .animate({left: 0}, 50)
      .animate({left: 5}, 50)
      .animate({left: 0}, 50);
  }
};

应用场景示例

表单验证失败时抖动输入框:

document.querySelector('form').addEventListener('submit', (e) => {
  const input = document.querySelector('#username');
  if (!input.value) {
    shake(input);
    e.preventDefault();
  }
});

性能优化建议

使用 transform 而非 left/top 进行动画,因为 transform 不会触发重排。对于频繁触发的抖动效果,建议使用 CSS 硬件加速:

.shake {
  will-change: transform;
  backface-visibility: hidden;
  perspective: 1000px;
}

以上方法可根据具体需求选择,CSS 动画实现最简单,纯 JavaScript 方案最灵活,第三方库适合已有 jQuery 的项目。

标签: js
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promise…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…