当前位置:首页 > 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实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let curr…

js实现轮播代码

js实现轮播代码

基础轮播实现 使用HTML、CSS和JavaScript创建一个简单的轮播效果。HTML部分定义轮播容器和图片元素。 <div class="carousel"> <div c…

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…

js 实现递归

js 实现递归

递归的基本概念 递归是指函数直接或间接调用自身的过程。在JavaScript中,递归通常用于解决可以分解为相似子问题的问题,如阶乘、斐波那契数列、树形结构遍历等。 递归的实现要点 基线条件(Base…