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

React集成Calendly异常:模态框显示在页面底部而非叠加层

解决Calendly弹窗未以叠加层弹出、显示在页面底部的问题

可能原因及修复方案

1. 移除脚本清理函数

你的useEffect清理逻辑会在组件卸载时删除Calendly脚本,若页面存在路由切换、组件重新挂载的情况,会导致脚本被移除后弹窗样式无法正常初始化。直接去掉清理代码:

useEffect(() => {
    const script = document.createElement('script');
  
    script.src = "https://calendly.com/assets/external/widget.js";
    script.async = true;
  
    document.body.appendChild(script);

    // 删除下方的清理函数
    // return () => {
    //   document.body.removeChild(script);
    // }
}, []);

2. 确保脚本加载完成后再触发弹窗

添加脚本加载完成监听,避免在脚本未初始化完成时调用弹窗方法:

useEffect(() => {
    const script = document.createElement('script');
  
    script.src = "https://calendly.com/assets/external/widget.js";
    script.async = true;

    // 监听脚本加载完成状态
    script.onload = () => {
        console.log('Calendly 脚本加载完成');
    };
  
    document.body.appendChild(script);
}, []);

// 重构点击事件,增加Calendly存在性校验
const handleOpenCalendly = () => {
    if (window.Calendly) {
        window.Calendly.initPopupWidget({url: calendymain});
    }
    return false;
};

按钮onClick改为:onClick={handleOpenCalendly}

3. 修复TailwindCSS层级覆盖问题

Tailwind的全局z-index配置可能覆盖了Calendly弹窗的层级,在全局CSS文件中添加强制层级:

.calendly-overlay {
    z-index: 9999 !important;
}
.calendly-popup {
    z-index: 10000 !important;
}

4. 改用官方React组件(更稳定)

官方提供了React专用组件,避免手动加载脚本的兼容性问题:
首先安装依赖:

npm install @calendly/react-widget

然后替换自定义按钮:

import { PopupButton } from '@calendly/react-widget';

// 直接使用官方弹窗按钮
<PopupButton
    url={calendymain}
    text="点击预约"
    className="你的自定义按钮样式类"
/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:52:58