当前位置:首页 > 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 对话框实现方法 使用组件化方式封装对话框 创建一个独立的对话框组件(如Dialog.vue),通过v-model控制显示隐藏: <template> <div clas…

react如何添加效果

react如何添加效果

React 添加动画效果的方法 使用 CSS 过渡动画 在 React 组件中直接通过 className 或 style 属性应用 CSS 过渡效果。定义 CSS 类包含 transition 属性…

vue实现折叠效果

vue实现折叠效果

使用 v-show 或 v-if 实现基础折叠 通过 Vue 的指令 v-show 或 v-if 控制元素的显示与隐藏。v-show 通过 CSS 的 display 属性切换,v-if 直接操作 D…

vue 实现toogle效果

vue 实现toogle效果

使用 v-if 和 v-else 实现切换 通过 Vue 的指令 v-if 和 v-else 可以轻松实现元素的显示与隐藏切换。 <template> <button @c…

vue实现弹幕效果

vue实现弹幕效果

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

vue实现分页效果

vue实现分页效果

使用Element UI实现分页 安装Element UI库后,可以直接使用el-pagination组件。需要在Vue项目中引入并注册Element UI。 <template>…