当前位置:首页 > JavaScript

js实现滑进滑出效果

2026-04-04 17:00:26JavaScript

滑进滑出效果的实现方法

滑进滑出效果可以通过CSS过渡(transition)或JavaScript动画实现。以下是几种常见的实现方式:

使用CSS过渡和JavaScript切换类

通过添加/移除CSS类触发过渡效果,适合简单的滑入滑出需求。

// HTML结构
<div id="box" class="hidden">内容</div>
<button id="toggleBtn">切换</button>

// CSS样式
.hidden {
  opacity: 0;
  transform: translateX(-100%);
  transition: all 0.3s ease;
}
.visible {
  opacity: 1;
  transform: translateX(0);
}

// JavaScript代码
const box = document.getElementById('box');
const toggleBtn = document.getElementById('toggleBtn');

toggleBtn.addEventListener('click', () => {
  box.classList.toggle('hidden');
  box.classList.toggle('visible');
});

使用Web Animation API

现代浏览器支持的API,性能较好且控制灵活。

const box = document.getElementById('box');
const toggleBtn = document.getElementById('toggleBtn');
let isHidden = true;

toggleBtn.addEventListener('click', () => {
  if (isHidden) {
    box.animate([
      { transform: 'translateX(-100%)', opacity: 0 },
      { transform: 'translateX(0)', opacity: 1 }
    ], {
      duration: 300,
      easing: 'ease-in-out'
    });
  } else {
    box.animate([
      { transform: 'translateX(0)', opacity: 1 },
      { transform: 'translateX(-100%)', opacity: 0 }
    ], {
      duration: 300,
      easing: 'ease-in-out'
    });
  }
  isHidden = !isHidden;
});

使用requestAnimationFrame实现手动动画

需要精细控制动画时可采用此方法。

const box = document.getElementById('box');
const toggleBtn = document.getElementById('toggleBtn');
let isAnimating = false;
let isHidden = true;
let startTime;

function slide(timestamp) {
  if (!startTime) startTime = timestamp;
  const progress = (timestamp - startTime) / 300;

  if (isHidden) {
    const translateX = -100 + (100 * Math.min(progress, 1));
    const opacity = Math.min(progress, 1);
    box.style.transform = `translateX(${translateX}%)`;
    box.style.opacity = opacity;
  } else {
    const translateX = 0 - (100 * Math.min(progress, 1));
    const opacity = 1 - Math.min(progress, 1);
    box.style.transform = `translateX(${translateX}%)`;
    box.style.opacity = opacity;
  }

  if (progress < 1) {
    requestAnimationFrame(slide);
  } else {
    isAnimating = false;
    isHidden = !isHidden;
  }
}

toggleBtn.addEventListener('click', () => {
  if (!isAnimating) {
    isAnimating = true;
    startTime = null;
    requestAnimationFrame(slide);
  }
});

使用第三方动画库(如GSAP)

对于复杂动画需求,推荐使用专业动画库。

js实现滑进滑出效果

// 引入GSAP库后
const box = document.getElementById('box');
const toggleBtn = document.getElementById('toggleBtn');
let isHidden = true;

toggleBtn.addEventListener('click', () => {
  if (isHidden) {
    gsap.to(box, {
      x: 0,
      opacity: 1,
      duration: 0.3,
      ease: "power2.inOut"
    });
  } else {
    gsap.to(box, {
      x: -100,
      opacity: 0,
      duration: 0.3,
      ease: "power2.inOut"
    });
  }
  isHidden = !isHidden;
});

注意事项

  1. 性能优化:使用transform和opacity属性动画,这些属性不会触发重排
  2. 可访问性:确保动画不会影响用户体验,可考虑减少运动选项
  3. 回退方案:在不支持JavaScript的情况下提供合理的内容展示方式
  4. 移动端适配:注意触摸事件的处理和移动端性能考虑

以上方法可根据项目需求和浏览器兼容性要求选择合适方案。CSS过渡方案最简单,Web Animation API和GSAP提供更多控制选项。

标签: 滑出效果
分享给朋友:

相关文章

vue实现玻璃效果

vue实现玻璃效果

实现玻璃效果的方法 在Vue中实现玻璃效果(毛玻璃或磨砂玻璃)可以通过CSS的backdrop-filter属性结合Vue的动态样式绑定来实现。以下是具体步骤: 使用CSS backdrop-fil…

vue实现过渡效果

vue实现过渡效果

Vue 过渡效果实现方法 Vue 提供了内置的 <transition> 和 <transition-group> 组件,用于在元素或组件进入/离开 DOM 时应用过渡效果。以…

vue实现检索效果

vue实现检索效果

Vue实现检索功能的方法 在Vue中实现检索功能通常需要结合数据绑定、计算属性和方法。以下是几种常见的实现方式: 基础实现(基于计算属性) <template> <div>…

vue实现筛选效果

vue实现筛选效果

Vue 实现筛选效果的方法 基于计算属性的筛选 在 Vue 中可以通过计算属性实现数据的动态筛选。定义一个计算属性,根据用户输入的筛选条件返回过滤后的数据列表。 <template>…

vue实现弹幕效果

vue实现弹幕效果

实现弹幕效果的基本思路 在Vue中实现弹幕效果,通常需要结合CSS动画和动态数据渲染。弹幕的核心是让文字从右向左平滑移动,同时支持多行显示和碰撞检测。 使用CSS动画实现移动效果 通过CSS的@ke…

vue实现拖动效果

vue实现拖动效果

使用 vuedraggable 库实现拖动 vuedraggable 是基于 Sortable.js 的 Vue 组件库,提供简单易用的拖拽功能。安装方式如下: npm install vuedra…