当前位置:首页 > JavaScript

js 实现 slidetoggle

2026-04-06 22:59:03JavaScript

使用 jQuery 实现 SlideToggle

jQuery 提供了内置的 slideToggle() 方法,可以轻松实现元素的滑动显示/隐藏效果。

$("#element").slideToggle(duration, easing, callback);
  • duration:动画持续时间(毫秒),可选,默认值为 400。
  • easing:动画缓动效果,可选,默认值为 "swing"。
  • callback:动画完成后的回调函数,可选。

示例代码:

$("#toggleButton").click(function() {
    $("#content").slideToggle();
});

使用纯 JavaScript 实现 SlideToggle

纯 JavaScript 可以通过操作 CSS 的 heighttransition 属性来实现类似效果。

function slideToggle(element, duration = 400) {
    if (window.getComputedStyle(element).display === "none") {
        element.style.display = "block";
        element.style.height = "0";
        setTimeout(() => {
            element.style.height = element.scrollHeight + "px";
        }, 10);
    } else {
        element.style.height = element.scrollHeight + "px";
        setTimeout(() => {
            element.style.height = "0";
        }, 10);
        setTimeout(() => {
            element.style.display = "none";
        }, duration);
    }
    element.style.transition = `height ${duration}ms ease-in-out`;
    element.style.overflow = "hidden";
}

使用方法:

document.getElementById("toggleButton").addEventListener("click", function() {
    slideToggle(document.getElementById("content"));
});

使用 CSS 类切换实现 SlideToggle

结合 CSS 动画和 JavaScript 类切换,可以实现更流畅的 SlideToggle 效果。

CSS 部分:

.slide-container {
    overflow: hidden;
    transition: height 0.4s ease-in-out;
}
.slide-closed {
    height: 0 !important;
}

JavaScript 部分:

function slideToggle(element) {
    if (element.classList.contains("slide-closed")) {
        element.style.height = element.scrollHeight + "px";
        element.classList.remove("slide-closed");
        setTimeout(() => {
            element.style.height = "";
        }, 400);
    } else {
        element.style.height = element.scrollHeight + "px";
        setTimeout(() => {
            element.classList.add("slide-closed");
        }, 10);
    }
}

使用 Web Animations API 实现

现代浏览器支持 Web Animations API,可以创建更高效的动画效果。

js 实现 slidetoggle

function slideToggle(element, duration = 400) {
    if (element.getAnimations().some(a => a.playState === "running")) return;

    const isHidden = element.offsetHeight === 0;
    const endHeight = isHidden ? element.scrollHeight : 0;

    element.style.overflow = "hidden";
    element.animate(
        { height: [`${element.offsetHeight}px`, `${endHeight}px`] },
        { duration, easing: "ease-in-out" }
    ).onfinish = () => {
        element.style.height = isHidden ? "" : "0";
    };
}

注意事项

  • 确保元素初始状态正确设置,隐藏时应设置 display: noneheight: 0
  • 动画过程中可能需要处理 overflow 属性以防止内容溢出。
  • 对于动态内容,在内容变化后可能需要重新计算高度。
  • 考虑添加动画取消逻辑,防止快速连续点击导致动画混乱。

标签: jsslidetoggle
分享给朋友:

相关文章

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js 实现递归

js 实现递归

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

js 实现截图

js 实现截图

使用html2canvas库实现截图 html2canvas是一个流行的JavaScript库,可将HTML元素转换为Canvas,进而导出为图片。 安装库: npm install ht…