当前位置:首页 > JavaScript

js实现slideup

2026-02-01 21:52:47JavaScript

js实现slideup

js实现slideup

实现 SlideUp 动画效果

使用 JavaScript 实现元素的 slideUp 动画效果可以通过操作元素的 heightoverflow 属性来实现。以下是几种常见的方法:

使用原生 JavaScript

function slideUp(element, duration = 300) {
  element.style.height = element.offsetHeight + 'px';
  element.style.transition = `height ${duration}ms ease`;
  element.offsetHeight; // 触发重绘
  element.style.height = '0';
  element.style.overflow = 'hidden';

  setTimeout(() => {
    element.style.display = 'none';
  }, duration);
}

使用 CSS 动画

function slideUp(element, duration = 300) {
  element.style.animation = `slide-up ${duration}ms forwards`;

  // 定义 CSS 动画
  const style = document.createElement('style');
  style.textContent = `
    @keyframes slide-up {
      from { height: ${element.offsetHeight}px; }
      to { height: 0; }
    }
  `;
  document.head.appendChild(style);

  setTimeout(() => {
    element.style.display = 'none';
    document.head.removeChild(style);
  }, duration);
}

使用 jQuery 风格实现

function slideUp(element, duration = 300) {
  const el = element;
  el.style.transitionProperty = 'height, margin, padding';
  el.style.transitionDuration = duration + 'ms';
  el.style.boxSizing = 'border-box';
  el.style.height = el.offsetHeight + 'px';
  el.offsetHeight;

  el.style.overflow = 'hidden';
  el.style.height = '0';
  el.style.paddingTop = '0';
  el.style.paddingBottom = '0';
  el.style.marginTop = '0';
  el.style.marginBottom = '0';

  window.setTimeout(() => {
    el.style.display = 'none';
    el.style.removeProperty('height');
    el.style.removeProperty('padding-top');
    el.style.removeProperty('padding-bottom');
    el.style.removeProperty('margin-top');
    el.style.removeProperty('margin-bottom');
    el.style.removeProperty('overflow');
    el.style.removeProperty('transition-duration');
    el.style.removeProperty('transition-property');
  }, duration);
}

使用 requestAnimationFrame 实现平滑动画

function slideUp(element, duration = 300) {
  const startHeight = element.offsetHeight;
  const startTime = performance.now();

  function animate(currentTime) {
    const elapsed = currentTime - startTime;
    const progress = Math.min(elapsed / duration, 1);
    const height = startHeight * (1 - progress);

    element.style.height = height + 'px';
    element.style.overflow = 'hidden';

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

  requestAnimationFrame(animate);
}

注意事项

  • 确保目标元素最初是可见的(display 不为 none
  • 动画过程中可能需要处理 paddingmargin 以确保视觉效果一致
  • 对于现代浏览器,CSS transitions 通常是性能最佳的选择
  • 如果需要反向操作(slideDown),需要保存原始高度或计算内容高度

这些方法可以根据具体需求进行调整,例如添加回调函数、支持 Promise 等。

标签: jsslideup
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

链表实现js

链表实现js

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