· 8 min read
如何在您的网站或应用中嵌入视频会议(2025 年指南)
<style>
.intro-highlight {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 32px;
border-radius: 16px;
margin: 32px 0;
text-align: center;
}
.intro-highlight h3 {
color: white;
margin-bottom: 16px;
font-size: 1.5rem;
}
.benefits-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 24px;
margin: 32px 0;
}
.benefit-card {
background: #f8f9fa;
padding: 24px;
border-radius: 12px;
border-left: 4px solid #667eea;
transition: transform 0.2s ease;
}
.benefit-card:hover {
transform: translateY(-2px);
box-shadow: 0 8px 25px rgba(0,0,0,0.1);
}
.benefit-card h4 {
color: #333;
margin-bottom: 12px;
display: flex;
align-items: center;
gap: 8px;
}
.benefit-icon {
font-size: 1.2em;
}
.tech-comparison {
background: #fff;
border: 1px solid #e9ecef;
border-radius: 12px;
overflow: hidden;
margin: 32px 0;
}
.tech-comparison-header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 20px;
text-align: center;
}
.tech-comparison-content {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 0;
}
.tech-option {
padding: 24px;
}
.tech-option:first-child {
border-right: 1px solid #e9ecef;
}
.tech-option h4 {
color: #667eea;
margin-bottom: 16px;
font-size: 1.2rem;
}
.provider-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
gap: 24px;
margin: 32px 0;
}
.provider-card {
background: #fff;
border: 1px solid #e9ecef;
border-radius: 12px;
padding: 24px;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.provider-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: linear-gradient(90deg, #667eea 0%, #764ba2 100%);
}
.provider-card:hover {
transform: translateY(-4px);
box-shadow: 0 12px 30px rgba(0,0,0,0.12);
}
.provider-header {
display: flex;
justify-content: space-between;
align-items: start;
margin-bottom: 16px;
}
.provider-title {
font-size: 1.3rem;
font-weight: bold;
color: #333;
margin: 0;
}
.provider-badge {
background: #667eea;
color: white;
padding: 4px 12px;
border-radius: 20px;
font-size: 0.8rem;
font-weight: 500;
}
.provider-category {
color: #6c757d;
font-size: 0.9rem;
margin-bottom: 12px;
}
.provider-features {
margin: 16px 0;
}
.provider-features h5 {
color: #495057;
margin-bottom: 8px;
font-size: 0.9rem;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.feature-list {
list-style: none;
padding: 0;
margin: 0;
}
.feature-list li {
padding: 4px 0;
display: flex;
align-items: center;
gap: 8px;
font-size: 0.9rem;
}
.feature-list li::before {
content: '✓';
color: #28a745;
font-weight: bold;
}
.pricing-tag {
background: #f8f9fa;
padding: 8px 12px;
border-radius: 6px;
font-size: 0.9rem;
color: #495057;
margin-top: 12px;
}
.step-guide {
background: #f8f9fa;
border-radius: 12px;
padding: 32px;
margin: 32px 0;
}
.step-guide h3 {
text-align: center;
margin-bottom: 32px;
color: #333;
}
.steps-container {
display: grid;
gap: 24px;
}
.step-item {
display: flex;
gap: 20px;
align-items: flex-start;
}
.step-number {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
width: 40px;
height: 40px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
flex-shrink: 0;
}
.step-content h4 {
margin: 0 0 8px 0;
color: #333;
}
.step-content p {
margin: 0;
color: #6c757d;
line-height: 1.5;
}
.code-example {
background: #f8f9fa;
border: 1px solid #e9ecef;
border-radius: 8px;
padding: 16px;
margin: 16px 0;
overflow-x: auto;
}
.code-example pre {
margin: 0;
font-family: 'Monaco', 'Menlo', monospace;
font-size: 0.9rem;
line-height: 1.4;
}
.faq-container {
margin: 32px 0;
}
.faq-item {
border: 1px solid #e9ecef;
border-radius: 8px;
margin-bottom: 16px;
overflow: hidden;
}
.faq-question {
background: #f8f9fa;
padding: 20px;
cursor: pointer;
display: flex;
justify-content: space-between;
align-items: center;
font-weight: 500;
color: #333;
transition: background-color 0.2s ease;
}
.faq-question:hover {
background: #e9ecef;
}
.faq-answer {
padding: 20px;
display: none;
color: #6c757d;
line-height: 1.6;
}
.faq-answer.active {
display: block;
}
.faq-toggle {
font-size: 1.2rem;
color: #667eea;
transition: transform 0.3s ease;
}
.faq-toggle.active {
transform: rotate(45deg);
}
.conclusion-cta {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 32px;
border-radius: 16px;
text-align: center;
margin: 32px 0;
}
.conclusion-cta h3 {
color: white;
margin-bottom: 16px;
}
.conclusion-cta p {
margin-bottom: 24px;
opacity: 0.9;
}
.cta-buttons {
display: flex;
gap: 16px;
justify-content: center;
flex-wrap: wrap;
}
.cta-button {
background: rgba(255,255,255,0.2);
color: white;
padding: 12px 24px;
border-radius: 8px;
text-decoration: none;
font-weight: 500;
transition: all 0.3s ease;
border: 1px solid rgba(255,255,255,0.3);
}
.cta-button:hover {
background: rgba(255,255,255,0.3);
transform: translateY(-2px);
}
.cta-button.primary {
background: white;
color: #667eea;
}
.cta-button.primary:hover {
background: #f8f9fa;
color: #5a67d8;
}
@media (max-width: 768px) {
.tech-comparison-content {
grid-template-columns: 1fr;
}
.tech-option:first-child {
border-right: none;
border-bottom: 1px solid #e9ecef;
}
.provider-grid {
grid-template-columns: 1fr;
}
.benefits-grid {
grid-template-columns: 1fr;
}
.cta-buttons {
flex-direction: column;
align-items: center;
}
}
</style>
<div class="intro-highlight">
<h3>🚀 为什么选择集成而不是构建?</h3>
<p>让用户留在您的平台上,而不是将他们重定向到 Zoom 或 Teams。嵌入式视频会议为远程医疗、在线学习和客户支持创造了无缝体验,同时保持您的品牌形象。</p>
</div>
在当今的数字环境中,视频会议已成为各行各业企业必不可少的一部分。但是,将用户发送到 Zoom 或 Teams 等外部平台会产生摩擦并破坏用户体验。解决方案是什么?**将视频会议嵌入**到您的网站或应用程序中。
无论您是构建远程医疗平台、在线学习门户还是客户支持系统,嵌入式视频聊天都可以让用户在您的生态系统中保持参与,同时提供他们所需的实时通信。
## 什么是嵌入式视频会议?
嵌入式视频会议涉及使用第三方 API 或 SDK 将实时视频和音频通信直接集成到您应用程序的用户界面中。视频通话不是将用户重定向到外部平台,而是在您自己的品牌环境中无缝进行。
<div class="benefits-grid">
<div class="benefit-card">
<h4><span class="benefit-icon">🎨</span> 完全的品牌控制</h4>
<p>自定义整个视频界面以匹配您的品牌颜色、字体和用户体验。您的用户永远不会离开您的平台。</p>
</div>
<div class="benefit-card">
<h4><span class="benefit-icon">⚡</span> 无缝用户体验</h4>
<p>消除下载应用程序或创建新帐户的麻烦。用户只需单击一下即可加入视频通话。</p>
</div>
<div class="benefit-card">
<h4><span class="benefit-icon">🔒</span> 增强的安全性</h4>
<p>通过企业级安全功能和合规性选项,保持对您的数据和用户隐私的控制。</p>
</div>
<div class="benefit-card">
<h4><span class="benefit-icon">🚀</span> 更快的上市时间</h4>
<p>通过利用经过验证的视频基础设施和 API,在几周而不是几个月内构建视频功能。</p>
</div>
</div>
## 了解 API 与 SDK:选择您的集成路径
<div class="tech-comparison">
<div class="tech-comparison-header">
<h3>视频会议 API 与 SDK</h3>
</div>
<div class="tech-comparison-content">
<div class="tech-option">
<h4>🔧 视频会议 API</h4>
<p><strong>最适合:</strong> 最大程度的自定义和控制</p>
<ul>
<li>完全灵活地进行 UI/UX 设计</li>
<li>自定义功能实现</li>
<li>需要更多的开发时间</li>
<li>非常适合独特的用例</li>
</ul>
</div>
<div class="tech-option">
<h4>📦 视频会议 SDK</h4>
<p><strong>最适合:</strong> 快速部署和易用性</p>
<ul>
<li>包含预构建的 UI 组件</li>
<li>更快的集成过程</li>
<li>更少的开发开销</li>
<li>非常适合标准视频功能</li>
</ul>
</div>
</div>
</div>
根据<a href="https://www.statista.com/statistics/1296817/video-conferencing-market-size-worldwide/" target="_blank" rel="nofollow">Statista 研究</a>,预计到 2030 年,全球视频会议市场将达到 243 亿美元,这使得嵌入式解决方案对于寻求竞争优势的企业来说越来越有价值。

## 2025 年十大可嵌入视频会议平台
<div class="provider-grid">
<div class="provider-card">
<div class="provider-header">
<h4 class="provider-title">Agora.io</h4>
<span class="provider-badge">最受欢迎</span>
</div>
<div class="provider-category">实时互动平台</div>
<p>Agora 为 Discord 和教育平台等应用程序提供超低延迟和全球覆盖的视频体验。</p>
<div class="provider-features">
<h5>主要功能</h5>
<ul class="feature-list">
<li>低于 200 毫秒的全球延迟</li>
<li>直播功能</li>
<li>互动白板</li>
<li>云录制和回放</li>
<li>实时消息传递</li>
</ul>
</div>
<div class="pricing-tag">
💰 按使用量付费:每 1000 分钟 0.99 美元 - 3.99 美元
</div>
</div>
<div class="provider-card">
<div class="provider-header">
<h4 class="provider-title">Twilio Video</h4>
<span class="provider-badge">企业级</span>
</div>
<div class="provider-category">可编程视频 API</div>
<p>Twilio 强大的视频 API 提供企业级可靠性,并为开发人员提供广泛的自定义选项。</p>
<div class="provider-features">
<h5>主要功能</h5>
<ul class="feature-list">
<li>可编程视频会议室</li>
<li>网络质量 API</li>
<li>HIPAA 合规性</li>
<li>全球基础设施</li>
<li>用于录制的 Composition API</li>
</ul>
</div>
<div class="pricing-tag">
💰 群组会议室:每参与者分钟 0.0015 美元
</div>
</div>
<div class="provider-card">
<div class="provider-header">
<h4 class="provider-title">Daily.co</h4>
<span class="provider-badge">对开发者友好</span>
</div>
<div class="provider-category">视频通话基础设施</div>
<p>Daily 提供具有强大功能的简单 API,使嵌入视频通话变得容易,只需最少的代码。</p>
<div class="provider-features">
<h5>主要功能</h5>
<ul class="feature-list">
<li>5 分钟集成</li>
<li>预构建的 UI 组件</li>
<li>直播到 RTMP</li>
<li>会议分析</li>
<li>移动优先设计</li>
</ul>
</div>
<div class="pricing-tag">
💰 免费套餐:每月 10,000 分钟
</div>
</div>
<div class="provider-card">
<div class="provider-header">
<h4 class="provider-title">VideoSDK.live</h4>
<span class="provider-badge">经济高效</span>
</div>
<div class="provider-category">互动视频 SDK</div>
<p>VideoSDK 提供全面的视频解决方案,具有竞争力的价格和广泛的开发人员文档。</p>
<div class="provider-features">
<h5>主要功能</h5>
<ul class="feature-list">
<li>互动直播</li>
<li>屏幕共享和录制</li>
<li>实时消息传递</li>
<li>自定义布局</li>
<li>多平台支持</li>
</ul>
</div>
<div class="pricing-tag">
💰 起价为每分钟 0.0012 美元
</div>
</div>
<div class="provider-card">
<div class="provider-header">
<h4 class="provider-title">Whereby Embedded</h4>
<span class="provider-badge">无需代码</span>
</div>
<div class="provider-category">基于浏览器的视频会议</div>
<p>Whereby 的嵌入式解决方案无需下载,并且只需最少的设置即可无缝集成到 Web 应用程序中。</p>
<div class="provider-features">
<h5>主要功能</h5>
<ul class="feature-list">
<li>无需下载应用程序</li>
<li>品牌会议室</li>
<li>会议见解</li>
<li>敲门进入</li>
<li>分组讨论室</li>
</ul>
</div>
<div class="pricing-tag">
💰 起价为每个房间每月 9.99 美元
</div>
</div>
<div class="provider-card">
<div class="provider-header">
<h4 class="provider-title">Vonage Video API</h4>
<span class="provider-badge">可扩展</span>
</div>
<div class="provider-category">前身为 TokBox OpenTok</div>
<p>Vonage 提供企业级视频 API,具有适用于大规模应用程序和全球部署的先进功能。</p>
<div class="provider-features">
<h5>主要功能</h5>
<ul class="feature-list">
<li>SIP 互连</li>
<li>体验合成器</li>
<li>高级见解</li>
<li>全球覆盖</li>
<li>企业安全</li>
</ul>
</div>
<div class="pricing-tag">
💰 联系以获取企业定价
</div>
</div>
</div>
对于专注于录制和分析其嵌入式视频通话的企业,与 [ScreenApp 的 AI 转录功能](https://screenapp.io/features/transcribe-video) 集成可以添加有价值的功能,例如自动会议记录和可搜索的对话存档。
## 分步指南:如何嵌入视频通话
<div class="step-guide">
<h3>🛠️ 常规集成过程</h3>
<div class="steps-container">
<div class="step-item">
<div class="step-number">1</div>
<div class="step-content">
<h4>选择您的提供商并获取 API 密钥</h4>
<p>注册您选择的视频平台,创建一个新项目,并获取您的 API 密钥或应用程序凭据。大多数提供商都提供免费套餐用于测试。</p>
</div>
</div>
<div class="step-item">
<div class="step-number">2</div>
<div class="step-content">
<h4>设置后端以进行会议室管理</h4>
<p>创建服务器端端点以生成访问令牌、创建会议室并安全地管理参与者权限。</p>
</div>
</div>
<div class="step-item">
<div class="step-number">3</div>
<div class="step-content">
<h4>集成前端 SDK</h4>
<p>将视频 SDK 添加到您的 Web 应用程序,使用您的凭据初始化客户端,并配置基本的视频设置。</p>
</div>
</div>
<div class="step-item">
<div class="step-number">4</div>
<div class="step-content">
<h4>实现核心 UI 控件</h4>
<p>构建用户界面元素,用于加入通话、静音/取消静音、切换视频、屏幕共享和结束通话。</p>
</div>
</div>
</div>
</div>
#
## 使用 Daily.co 的示例实现
这是一个使用 Daily.co 的 JavaScript SDK 嵌入视频会议的基本示例:
<div class="code-example">
<pre><code>// 初始化 Daily.co 通话对象
const callFrame = DailyIframe.createFrame({
iframeStyle: {
position: 'fixed',
top: '0',
left: '0',
width: '100%',
height: '100%',
border: 'none'
},
showLeaveButton: true,
showFullscreenButton: true
});
// 加入会议室
callFrame.join({
url: 'https://your-domain.daily.co/room-name',
userName: '用户名'
});
// 处理通话事件
callFrame.on('joined-meeting', () => {
console.log('成功加入会议');
});
callFrame.on('left-meeting', () => {
console.log('离开会议');
callFrame.destroy();
});
</code></pre>
</div>

实施嵌入式视频的公司通常集成其他工具以增强功能。例如,[使用 AI 驱动的功能录制视频通话](https://screenapp.io/features/record-video) 可以为业务应用程序提供有价值的见解和合规性文档。
## 常见问题
<div class="faq-container">
<div class="faq-item">
<div class="faq-question" onclick="toggleFAQ(this)">
<span>嵌入视频会议的费用是多少?</span>
<span class="faq-toggle">+</span>
</div>
<div class="faq-answer">
<p>成本因提供商和使用情况而异。大多数平台按视频使用分钟数收费,通常每 1000 分钟从 0.0012 美元到 3.99 美元不等。许多提供商提供免费套餐(每月 1,000-10,000 分钟),非常适合测试和小型应用程序。企业解决方案可能具有基于功能和规模的自定义定价。</p>
</div>
</div>
<div class="faq-item">
<div class="faq-question" onclick="toggleFAQ(this)">
<span>构建自己的视频聊天功能是否安全?</span>
<span class="faq-toggle">+</span>
</div>
<div class="faq-answer">
<p>使用已建立的视频 API 比从头开始构建要安全得多。信誉良好的提供商实施端到端加密、HIPAA 合规性和定期安全审核。它们处理复杂的安全挑战,如媒体中继、防火墙遍历和数据保护,这些挑战如果独立开发将既昂贵又冒险。</p>
</div>
</div>
<div class="faq-item">
<div class="faq-question" onclick="toggleFAQ(this)">
<span>WebRTC 和视频 API 之间有什么区别?</span>
<span class="faq-toggle">+</span>
</div>
<div class="faq-answer">
<p>WebRTC 是一种底层浏览器技术,可实现实时视频通信。视频 API 是构建在 WebRTC 之上的服务,用于处理复杂的基础设施、信令服务器、媒体中继和跨浏览器兼容性。API 通过提供通过简单集成实现的 WebRTC 功能,节省了数月的开发时间。</p>
</div>
</div>
<div class="faq-item">
<div class="faq-question" onclick="toggleFAQ(this)">
<span>我可以完全自定义视频界面吗?</span>
<span class="faq-toggle">+</span>
</div>
<div class="faq-answer">
<p>大多数视频 API 提供广泛的自定义选项。您通常可以修改颜色、布局、按钮样式和功能以匹配您的品牌。某些提供商提供无头 API 以实现完全的 UI 控制,而其他提供商则提供可自定义的预构建组件以加快实施速度。</p>
</div>
</div>
<div class="faq-item">
<div class="faq-question" onclick="toggleFAQ(this)">
<span>用户是否需要下载任何软件?</span>
<span class="faq-toggle">+</span>
</div>
<div class="faq-answer">
<p>现代视频 API 使用 WebRTC 技术完全在 Web 浏览器中工作,无需下载或插件。用户可以直接从您的网站加入视频通话。移动应用程序可能需要特定于平台的 SDK,但体验在您的应用程序中仍然是无缝的。</p>
</div>
</div>
<div class="faq-item">
<div class="faq-question" onclick="toggleFAQ(this)">
<span>移动设备兼容性如何?</span>
<span class="faq-toggle">+</span>
</div>
<div class="faq-answer">
<p>所有主要的视频 API 提供商都通过本机 SDK 或移动优化的 Web 实现来支持 iOS 和 Android。许多平台会自动根据设备功能和网络条件调整视频质量,以确保在所有设备上实现最佳性能。</p>
</div>
</div>
</div>
## 集成最佳实践
实施嵌入式视频会议时,请考虑以下基本实践:
**安全第一**:在生成访问令牌之前,始终在服务器端验证用户权限。实施适当的身份验证和授权以防止未经授权访问视频会话。
**网络优化**:使用具有全球基础设施的提供商以最大限度地减少延迟。实施自适应比特率流以自动处理不同的网络条件。
**用户体验**:提供有关相机/麦克风权限的明确说明。在用户加入重要通话之前,包括音频/视频质量测试。
**合规性要求**:对于医疗保健或金融应用程序,请确保您选择的提供商提供 HIPAA、GDPR 或其他必要的合规性认证。
许多企业使用补充工具来增强其嵌入式视频解决方案。例如,[AI 驱动的视频分析](https://screenapp.io/features/ai-video-analysis) 可以自动从客户支持电话或培训课程中提取见解。
## 为您的平台选择合适的解决方案
<div class="conclusion-cta">
<h3>🎯 准备好嵌入视频会议了吗?</h3>
<p>选择 SDK 以快速部署,或选择 API 以实现终极自定义。无论哪种方式,您都将创建无缝的视频体验,让用户在您的平台上保持参与。</p>
<div class="cta-buttons">
<a href="https://screenapp.io/features/online-screen-recorder" class="cta-button primary">开始录制视频</a>
<a href="https://screenapp.io/blog/best-free-video-conferencing-apps" class="cta-button">比较视频工具</a>
</div>
</div>
不同嵌入式视频解决方案之间的选择取决于您的具体需求:
- 当您需要完全控制用户界面并且拥有用于自定义实施的开发资源时,**选择 API**
- 当您希望使用可以自定义以匹配您的品牌的预构建组件快速启动时,**选择 SDK**
- **考虑提供两种选择的混合方法**,让您可以从 SDK 开始,并在您的需求发展时迁移到 API
对于医疗保健或教育等受监管行业的企业,Twilio 和 Agora 等提供商提供全面的合规性功能。初创公司和小型应用程序通常通过 Daily.co 或 VideoSDK 的慷慨免费套餐和对开发者友好的文档取得成功。
嵌入式视频会议市场不断发展,AI 驱动的背景、实时翻译和高级分析等新功能已成为标准。通过立即选择合适的集成合作伙伴,您将构建一个可以随着平台的需求增长的基础。
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "如何在您的网站或应用程序中嵌入视频会议(2025 年指南)",
"description": "嵌入视频会议的完整指南。比较 2025 年最佳视频聊天 API 和 SDK,并了解如何将视频通话添加到您的网站或应用程序。",
"author": {
"@type": "Person",
"name": "Andre Smith"
},
"datePublished": "2025-09-19",
"dateModified": "2025-09-19",
"image": "/blog/how-to-embed-video-conferencing.webp",
"publisher": {
"@type": "Organization",
"name": "ScreenApp"
},
"mainEntity": {
"@type": "HowTo",
"name": "如何嵌入视频会议",
"step": [
{
"@type": "HowToStep",
"name": "选择提供商并获取 API 密钥",
"text": "注册您选择的视频平台,创建一个新项目,并获取您的 API 密钥或应用程序凭据。"
},
{
"@type": "HowToStep",
"name": "设置后端以进行会议室管理",
"text": "创建服务器端端点以生成访问令牌、创建会议室并安全地管理参与者权限。"
},
{
"@type": "HowToStep",
"name": "集成前端 SDK",
"text": "将视频 SDK 添加到您的 Web 应用程序,使用您的凭据初始化客户端,并配置基本的视频设置。"
},
{
"@type": "HowToStep",
"name": "实现核心 UI 控件",
"text": "构建用户界面元素,用于加入通话、静音/取消静音、切换视频、屏幕共享和结束通话。"
}
]
}
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "嵌入视频会议的费用是多少?",
"acceptedAnswer": {
"@type": "Answer",
"text": "成本因提供商和使用情况而异。大多数平台按视频使用分钟数收费,通常每 1000 分钟从 0.0012 美元到 3.99 美元不等。许多提供商提供免费套餐(每月 1,000-10,000 分钟),非常适合测试和小型应用程序。"
}
},
{
"@type": "Question",
"name": "构建自己的视频聊天功能是否安全?",
"acceptedAnswer": {
"@type": "Answer",
"text": "使用已建立的视频 API 比从头开始构建要安全得多。信誉良好的提供商实施端到端加密、HIPAA 合规性和定期安全审核。"
}
},
{
"@type": "Question",
"name": "WebRTC 和视频 API 之间有什么区别?",
"acceptedAnswer": {
"@type": "Answer",
"text": "WebRTC 是一种底层浏览器技术,可实现实时视频通信。视频 API 是构建在 WebRTC 之上的服务,用于处理复杂的基础设施、信令服务器、媒体中继和跨浏览器兼容性。"
}
}
]
}
</script>
<script>
document.addEventListener('DOMContentLoaded', function() {
// FAQ accordion functionality
window.toggleFAQ = function(element) {
const answer = element.nextElementSibling;
const toggle = element.querySelector('.faq-toggle');
if (answer.classList.contains('active')) {
answer.classList.remove('active');
toggle.classList.remove('active');
toggle.textContent = '+';
} else {
// Close all other FAQs
document.querySelectorAll('.faq-answer.active').forEach(item => {
item.classList.remove('active');
});
document.querySelectorAll('.faq-toggle.active').forEach(item => {
item.classList.remove('active');
item.textContent = '+';
});
// Open this FAQ
answer.classList.add('active');
toggle.classList.add('active');
toggle.textContent = '×';
}
};
});
</script>