当前位置:首页 > JavaScript

js实现左右滑入

2026-03-16 08:35:10JavaScript

使用CSS动画实现滑入效果

通过CSS的@keyframestransform属性可以轻松实现滑入动画效果。定义一个滑入动画,通过JavaScript动态添加类名触发。

.slide-in-left {
  animation: slideInLeft 0.5s forwards;
}

.slide-in-right {
  animation: slideInRight 0.5s forwards;
}

@keyframes slideInLeft {
  from { transform: translateX(-100%); }
  to { transform: translateX(0); }
}

@keyframes slideInRight {
  from { transform: translateX(100%); }
  to { transform: translateX(0); }
}
// 触发左滑入
document.getElementById('element').classList.add('slide-in-left');

// 触发右滑入
document.getElementById('element').classList.add('slide-in-right');

使用GSAP动画库实现

GSAP提供更强大灵活的动画控制,适合复杂场景。

js实现左右滑入

// 左滑入
gsap.from("#element", {duration: 0.5, x: "-100%"});

// 右滑入
gsap.from("#element", {duration: 0.5, x: "100%"});

原生JavaScript实现

通过requestAnimationFrame实现平滑动画效果,手动控制元素位置变化。

js实现左右滑入

function slideIn(element, from, duration = 500) {
  const start = performance.now();
  const isLeft = from === 'left';
  const distance = isLeft ? -element.offsetWidth : element.offsetWidth;

  function animate(time) {
    const elapsed = time - start;
    const progress = Math.min(elapsed / duration, 1);
    const translateX = isLeft 
      ? distance + progress * -distance 
      : distance - progress * distance;

    element.style.transform = `translateX(${translateX}px)`;

    if (progress < 1) {
      requestAnimationFrame(animate);
    }
  }

  requestAnimationFrame(animate);
}

// 使用示例
const box = document.getElementById('box');
slideIn(box, 'left');  // 左滑入
slideIn(box, 'right'); // 右滑入

使用Web Animations API

现代浏览器支持的Web Animations API提供更高效的动画实现方式。

// 左滑入
document.getElementById('element').animate(
  [
    { transform: 'translateX(-100%)' },
    { transform: 'translateX(0)' }
  ],
  { duration: 500, fill: 'forwards' }
);

// 右滑入
document.getElementById('element').animate(
  [
    { transform: 'translateX(100%)' },
    { transform: 'translateX(0)' }
  ],
  { duration: 500, fill: 'forwards' }
);

响应式滑入效果

结合Intersection Observer API实现滚动到视口时触发滑入动画。

const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      entry.target.classList.add('slide-in-left');
      observer.unobserve(entry.target);
    }
  });
}, {threshold: 0.1});

document.querySelectorAll('.slide-element').forEach(el => {
  observer.observe(el);
});

以上方法可以根据项目需求选择适合的实现方式,CSS动画适合简单场景,GSAP适合复杂动画,原生JavaScript实现提供最大控制权,Web Animations API则提供了现代浏览器的性能优势。

标签: 滑入js
分享给朋友:

相关文章

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

链表实现js

链表实现js

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

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…