当前位置:首页 > 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 实现交互特效的方法 Vue.js 提供了丰富的工具和指令,可以轻松实现各种交互特效。以下是几种常见的实现方式: 使用 Vue 过渡和动画 Vue 的 <transition> 和…

vue实现简单分页

vue实现简单分页

实现基础分页功能 在Vue中实现简单分页需要几个核心步骤:数据分片、页码计算、翻页逻辑。以下是一个基于Vue 3的示例实现方案: <template> <div>…

vue实现简单的store

vue实现简单的store

Vue 实现简单的 Store 在 Vue 中可以通过多种方式实现简单的状态管理(Store),以下介绍几种常见方法: 使用 Vue 的响应式 API 通过 reactive 或 ref 创建响应式…

vue底部导航简单实现

vue底部导航简单实现

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

vue实现简单登录验证

vue实现简单登录验证

实现登录表单基础结构 使用Vue的模板语法构建登录表单,包含用户名和密码输入框及提交按钮。表单需绑定v-model实现双向数据绑定,并监听submit事件。 <template> &…

react实现简单的modal

react实现简单的modal

实现 React Modal 的基本方法 使用 React 创建一个简单的 Modal 组件可以通过以下方式实现: 创建 Modal 组件文件 import React from "react";…