当前位置:首页 > 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 属性来实现类似效果。

js 实现 slidetoggle

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 效果。

js 实现 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,可以创建更高效的动画效果。

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 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterva…

js实现论坛

js实现论坛

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

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…

js 实现日历

js 实现日历

实现日历的基本思路 日历的核心功能是展示日期,并允许用户进行日期选择或导航。JavaScript 可以动态生成日历的 HTML 结构,并处理用户交互逻辑。 基础日历结构 日历通常包含头部(显示月份和…