You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决jQuery slideToggle()触发的页面滚动问题?

解决slideToggle()导致的页面滚动问题

先修正代码中的基础错误

你当前代码存在选择器与ID不匹配的问题,这是触发滚动的核心原因之一:

  • jQuery里绑定的是.rv_button1,但HTML按钮的类是.rv_button
  • jQuery操作的是#reveal1,但HTML中要切换的区块ID是#reveal

滚动问题的具体解决方法

方法1:修正JS代码,固定滚动位置

修正选择器后,在slideToggle动画前后记录并恢复滚动位置,同时阻止事件冒泡避免Divi主题默认行为干扰:

jQuery(function($) {
    $('.rv_button').click(function(e) {
        e.preventDefault();
        e.stopPropagation();
        // 记录点击时的滚动位置
        const currentScroll = $(window).scrollTop();
        $('#reveal').slideToggle(function() {
            // 动画结束后恢复原滚动位置
            $(window).scrollTop(currentScroll);
        });
        $(this).toggleClass('opened closed');
    });
});

方法2:用CSS过渡替代JS动画(更稳定)

相比slideToggle的JS动画,CSS过渡不会触发浏览器自动滚动调整,适配Divi这类主题的兼容性更好:

  1. 添加自定义CSS:
#reveal {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.3s ease-in-out;
}
#reveal.active {
    max-height: 2000px; /* 设置一个大于内容实际高度的值即可 */
}
  1. 替换JS代码:
jQuery(function($) {
    $('.rv_button').click(function(e) {
        e.preventDefault();
        e.stopPropagation();
        $('#reveal').toggleClass('active');
        $(this).toggleClass('opened closed');
    });
});

额外注意事项

  • 确保自定义JS在jQuery之后加载(WordPress中可通过wp_enqueue_script设置依赖为jquery)
  • Divi的按钮模块可能自带点击事件,e.stopPropagation()可以避免冲突

内容的提问来源于stack exchange,提问作者Marujori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:31:12