当前位置:首页 > JavaScript

js 实现简单特效

2026-04-07 15:53:45JavaScript

淡入淡出效果

通过修改元素的透明度实现淡入淡出动画效果:

function fadeIn(element, duration = 500) {
  element.style.opacity = 0;
  let start = performance.now();
  function animate(timestamp) {
    let progress = (timestamp - start) / duration;
    if (progress > 1) progress = 1;
    element.style.opacity = progress;
    if (progress < 1) requestAnimationFrame(animate);
  }
  requestAnimationFrame(animate);
}

function fadeOut(element, duration = 500) {
  let start = performance.now();
  function animate(timestamp) {
    let progress = 1 - (timestamp - start) / duration;
    if (progress < 0) progress = 0;
    element.style.opacity = progress;
    if (progress > 0) requestAnimationFrame(animate);
  }
  requestAnimationFrame(animate);
}

滑动效果

实现元素的上下滑动动画:

function slideDown(element, duration = 500) {
  element.style.height = 'auto';
  const targetHeight = element.offsetHeight;
  element.style.height = '0px';
  element.style.overflow = 'hidden';

  let start = performance.now();
  function animate(timestamp) {
    let progress = (timestamp - start) / duration;
    if (progress > 1) progress = 1;
    element.style.height = `${progress * targetHeight}px`;
    if (progress < 1) requestAnimationFrame(animate);
  }
  requestAnimationFrame(animate);
}

function slideUp(element, duration = 500) {
  const startHeight = element.offsetHeight;
  element.style.overflow = 'hidden';

  let start = performance.now();
  function animate(timestamp) {
    let progress = 1 - (timestamp - start) / duration;
    if (progress < 0) progress = 0;
    element.style.height = `${progress * startHeight}px`;
    if (progress > 0) requestAnimationFrame(animate);
  }
  requestAnimationFrame(animate);
}

鼠标悬停放大效果

为元素添加鼠标悬停时的放大效果:

function addHoverScaleEffect(element, scale = 1.1, duration = 300) {
  element.style.transition = `transform ${duration}ms ease`;
  element.addEventListener('mouseenter', () => {
    element.style.transform = `scale(${scale})`;
  });
  element.addEventListener('mouseleave', () => {
    element.style.transform = 'scale(1)';
  });
}

点击波纹效果

实现类似Material Design的点击波纹效果:

function addRippleEffect(element) {
  element.addEventListener('click', function(e) {
    const ripple = document.createElement('span');
    ripple.className = 'ripple';
    element.appendChild(ripple);

    const rect = element.getBoundingClientRect();
    const x = e.clientX - rect.left;
    const y = e.clientY - rect.top;

    ripple.style.left = `${x}px`;
    ripple.style.top = `${y}px`;

    setTimeout(() => {
      ripple.remove();
    }, 600);
  });
}

/* CSS部分需要添加:
.ripple {
  position: absolute;
  background: rgba(255,255,255,0.7);
  border-radius: 50%;
  transform: scale(0);
  animation: ripple 600ms linear;
  pointer-events: none;
}

@keyframes ripple {
  to {
    transform: scale(4);
    opacity: 0;
  }
}
*/

滚动视差效果

创建简单的视差滚动效果:

function setupParallax(element, speed = 0.5) {
  window.addEventListener('scroll', () => {
    const scrollPosition = window.pageYOffset;
    element.style.transform = `translateY(${scrollPosition * speed}px)`;
  });
}

打字机效果

模拟打字机逐字显示文本的效果:

js 实现简单特效

function typeWriter(element, text, speed = 100) {
  let i = 0;
  function type() {
    if (i < text.length) {
      element.innerHTML += text.charAt(i);
      i++;
      setTimeout(type, speed);
    }
  }
  element.innerHTML = '';
  type();
}

标签: 特效简单
分享给朋友:

相关文章

下雪特效vue实现

下雪特效vue实现

下雪特效的 Vue 实现方法 使用 CSS 动画和 Vue 动态渲染 在 Vue 中可以通过动态生成雪花的 DOM 元素,结合 CSS 动画实现下雪效果。创建一个 Vue 组件,随机生成雪花的位置、大…

vue实现简单拖拽

vue实现简单拖拽

Vue 实现简单拖拽功能 在 Vue 中实现拖拽功能可以通过 HTML5 的拖放 API 或第三方库(如 vuedraggable)来完成。以下是两种常见的实现方式: 使用 HTML5 拖放 API…

实现简单的vue

实现简单的vue

创建Vue项目 使用Vue CLI快速初始化项目,确保已安装Node.js和npm/yarn: npm install -g @vue/cli vue create my-vue-app cd my…

vue简单实现删除

vue简单实现删除

Vue 删除功能实现 使用 v-for 和 splice 方法删除数组元素 <template> <div> <ul> <li v-…

vue底部导航简单实现

vue底部导航简单实现

使用 Vue Router 实现底部导航 在 Vue 项目中,可以通过 Vue Router 和自定义组件实现底部导航。以下是一个简单的实现示例: 安装 Vue Router(如果尚未安装):…

vue简单的列表实现

vue简单的列表实现

实现简单的 Vue 列表 在 Vue 中实现列表功能通常使用 v-for 指令。以下是一个基础的列表实现示例: <template> <div> <…