当前位置:首页 > JavaScript

js实现滑入滑出

2026-02-03 01:07:25JavaScript

滑入滑出效果实现方法

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

js实现滑入滑出

使用CSS过渡和类切换

通过添加/移除类名触发CSS过渡效果,适合简单场景。

js实现滑入滑出

// 获取元素
const element = document.getElementById('target');

// 滑入
function slideIn() {
  element.style.display = 'block';
  setTimeout(() => {
    element.classList.add('active');
  }, 10);
}

// 滑出
function slideOut() {
  element.classList.remove('active');
  setTimeout(() => {
    element.style.display = 'none';
  }, 500); // 与过渡时间一致
}

// 对应CSS
#target {
  display: none;
  transform: translateX(-100%);
  transition: transform 0.5s ease;
}
#target.active {
  transform: translateX(0);
}

使用requestAnimationFrame

更精细控制动画过程,适合复杂动画需求。

function slide(element, direction, duration = 500) {
  const start = performance.now();
  const from = direction === 'in' ? -element.offsetWidth : 0;
  const to = direction === 'in' ? 0 : -element.offsetWidth;

  element.style.transform = `translateX(${from}px)`;
  element.style.display = 'block';

  function animate(time) {
    const elapsed = time - start;
    const progress = Math.min(elapsed / duration, 1);
    const current = from + (to - from) * progress;

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

    if (progress < 1) {
      requestAnimationFrame(animate);
    } else if (direction === 'out') {
      element.style.display = 'none';
    }
  }

  requestAnimationFrame(animate);
}

使用Web Animations API

现代浏览器支持的动画API,性能较好。

function slideWithWAAPI(element, direction) {
  const keyframes = [
    { transform: `translateX(${direction === 'in' ? '-100%' : '0'})` },
    { transform: `translateX(${direction === 'in' ? '0' : '-100%'})` }
  ];

  const options = {
    duration: 500,
    easing: 'ease-in-out',
    fill: 'forwards'
  };

  if (direction === 'in') {
    element.style.display = 'block';
  }

  const animation = element.animate(keyframes, options);

  animation.onfinish = () => {
    if (direction === 'out') {
      element.style.display = 'none';
    }
  };
}

注意事项

  1. 性能优化:优先使用CSS动画,硬件加速属性如transform和opacity
  2. 浏览器兼容:老旧浏览器可能需要polyfill
  3. 可访问性:确保动画不影响用户体验,可提供关闭选项
  4. 移动端适配:考虑触摸事件和响应式设计

以上方法可根据具体需求选择,CSS过渡方案最简单,WAAPI方案最现代,requestAnimationFrame提供最大控制权。

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

相关文章

vue中实现滑出

vue中实现滑出

vue中实现滑出效果 使用CSS过渡动画 在Vue中可以通过<transition>组件配合CSS实现滑出效果。定义一个从右侧滑入的动画: <transition name="sl…

vue实现页面滑入

vue实现页面滑入

使用 CSS 过渡实现滑入效果 在 Vue 中可以通过 CSS 过渡实现页面元素的滑入效果。定义一个过渡类,利用 Vue 的 <transition> 组件包裹目标元素,通过控制元素的 v…

vue实现视频滑入播放

vue实现视频滑入播放

实现视频滑入播放的步骤 监听滚动事件 在Vue组件中,通过mounted钩子添加滚动事件监听器,使用IntersectionObserverAPI检测视频元素是否进入视口。这种方法性能优于传统的滚动事…

vue实现左侧滑出效果

vue实现左侧滑出效果

使用Vue实现左侧滑出效果 在Vue中实现左侧滑出效果可以通过多种方式完成,以下是几种常见的方法: 使用CSS过渡和Vue的v-show/v-if 通过CSS过渡和Vue的条件渲染指令可以轻松实现滑…

js实现滑进滑出效果

js实现滑进滑出效果

使用CSS Transition实现滑进滑出 通过CSS的transition属性和transform或margin变化实现平滑滑动效果。需定义初始状态和结束状态的样式,通过JavaScript切换类…

js实现滑出

js实现滑出

实现滑出效果的JavaScript方法 使用CSS过渡和JavaScript事件监听器实现平滑的滑出效果。需要定义CSS过渡属性,并通过JavaScript添加或移除类名来触发动画。 .slide…