
AIã«æå³ãæ£ç¢ºã«äŒããããã®â段éçããã³ããèšèšâãšããææ³ïœãããæŠèš
AIã䜿ã£ãŠWebã¢ããªãUIãäœããšãã ãæã£ããã®ãåºãŠããªãããéäžã§åæã«å€ããããã ãšããçµéšãããããšãããæ¹ã¯å€ããšæããŸãã
ãã®äžæ¹ã§ã æå³ã©ããã®UIãã»ãŒæ¯ååçŸã§ãã人ãããŸãã
äž¡è
ã®éãã¯äœãïŒ
ç§ãè¡ãã€ãããã®çãã âæ®µéçããã³ããèšèšâ ãšããææ³ã§ãã
ãã®èšäºã§ã¯ã AIã«æå³ãæ£ç¢ºã«äŒããåçŸæ§ã®é«ãã¢ãŠãããããåŸãããã® ãæé©ãªããã³ããã®å»ã¿æ¹ããäœç³»åããŠç޹ä»ããŸãã
â ãªã段éçã«äŒããå¿ èŠãããã®ã
AIã¯å€§éã®æ å ±ãäžåºŠã«æž¡ããããšã ãã©ããåªå ãã¹ãããã倿ããããã æå³ããã¬ãããšããããŸãã
ç¹ã«UIã®ããã«ã
ã¬ã€ã¢ãŠã
æå
å°ç·
ãã¶ã€ã³
PC/ã¹ããã®å·®å
çŠæ¢äºé
ãªã©è€æ°ã®èŠçŽ ã絡ãå Žåã äžæ°ã«äŒãããšèª€è§£ãèµ·ãããããªããŸãã
ããã§æå¹ãªã®ã 段éçã«äŒããææ³ã§ãã
â æåã«ã段éçã«äŒããŸãããšå®£èšãã
段éçããã³ããèšèšã®æåã®ã¹ãããã¯ã AIã«å¯ŸããŠãããããæ®µéçã«æ å ±ãæž¡ããŸãããšå®£èšããããšã§ãã
ããããUI仿§ã段éçã«äŒããŠãããŸãã
以äžã®é çªã§æ
å ±ãæž¡ãã®ã§ãåã¹ãããã¯âéšåçãªä»æ§âãšããŠçè§£ããŠãã ããã
1. ç®çã»æå³
2. ã¬ã€ã¢ãŠãæ§é ïŒã¯ã€ã€ãŒãã¬ãŒã ïŒ
3. æåïŒåãïŒ
4. å°ç·ã®æå³ïŒUXïŒ
5. ãã¶ã€ã³ã®åºå®å€
6. çŠæ¢äºé
7. æçµçµ±åïŒMarkdown仿§æžïŒã¯ã€ã€ãŒãã¬ãŒã ïŒè£è¶³ïŒ
ã¹ããã7ã§æçµä»æ§ã確å®ããŸãã
ãããŸã§ã¯ããŸã 仿§ã¯ç¢ºå®ããŠããªãç¶æ
ããšããŠèªèããŠãã ããã
ãã®å®£èšãå ¥ããããšã§ã AIã¯ã段éçåŠç¿ã¢ãŒããã«å ¥ãã éäžã§åæã«ä»æ§ã確å®ããããäœèšãªUIã远å ããã®ãé²ã广ããããŸãã
â æé©ãªå»ã¿æ¹ïŒ5ã7ã¹ãããïŒ
Step 1ïŒç®çã»æå³ãäŒãã
ãŸãã¯ããªããã®UIãäœãã®ãããäŒããŸãã
å°ç·ãåžžã«èŠããäœçœ®ã«çœ®ããã
PCçã§ã¯èŠç·ç§»åãæžãããã
ã¹ããçã§ã¯çžŠäžŠã³ãèªç¶
ä»åã¯Stepå°ç·ã䜿ããªã
AIã¯ãæå³ããçè§£ãããšã æ§é ãæåãåæã«å€ããªããªããŸãã
Step 2ïŒã¬ã€ã¢ãŠãæ§é ãäŒãã
ããã§ã¯ã€ã€ãŒãã¬ãŒã ïŒã¬ã€ã¢ãŠãæ§é ïŒãç»åã§æž¡ããšæåŒ·ã§ãã
æç« ãããç»åã®ã»ããã
ã«ã©ã å¹
äœçœ
å°ç·ã®äœçœ®
ã¹ã¯ããŒã«é å
èŠç·ã®æµã
AIã«ã¯äŒãããããã£ããããããã§ãã
ç»åã¯å°çšã¢ããªã§æãã®ãæšå¥šããããšã¯æããŸããããã¯ãã§åºæ¬å³åœ¢ãçµã¿åãããç°¡åãªèª¬æç»åã§ããããšäŒãããŸãã
Step 3ïŒæåïŒåãïŒãäŒãã
æ§é ãšæåãæ··ãããšAIãæ··ä¹±ãããããããã¯åé¢ããŸãã
äŸãã°ä»¥äžã®ããã«ããŸãã
ç¹å®ç®æã ãã¹ã¯ããŒã«ã§ããããã«ãã
ã©ãã«ã®äœçœ®ã¯ããã«ãã
ãã£ã«ã¿æ©èœãã€ãã
ããŒã¯ãŒãæ€çŽ¢ã§ããããã«ãã
å°ç·ã¯ããã®ããã«ãã
ã¹ãã察å¿ïŒã¬ã¹ãã³ã·ãã«ãã¶ã€ã³ïŒã«ãã
Step 4ïŒå°ç·ã®æå³ïŒUXïŒãäŒãã
AIã¯ãæå³ããçè§£ãããšã UIã®èªç¶ããä¿ã£ããŸãŸæ§ç¯ããŠãããŸãã
äŸãã°ä»¥äžã®ããã«ããŸãã
å°ç·ã¯åžžã«èŠçã«å ¥ãã¹ã
PCçã§ã¯æšªäžŠã³ãèªç¶
ã¹ããçã§ã¯çžŠäžŠã³ãèªç¶
Step 5ïŒãã¶ã€ã³ã®åºå®å€ãäŒãã
ããã§åããŠCSSã®è©±ã«ãªããŸãã
äŸãã°ä»¥äžã®ããã«ããŸãã
è§äžž 12px
圱 0 2px 4px rgba(0,0,0,0.06)
ç· #4CAF50
é #2196F3
ããéšåã¯çœïŒèãæ ç·
AIã®ããã¶ã€ã³ã®çããæ¶ãããã®ã¹ãããã§ãã
Step 6ïŒçŠæ¢äºé ãäŒãã
ãããèšããªããšAIã¯åæã«è¿œå ããŸãã
äŸãã°ä»¥äžã®ããã«ããŸãã
ããã¯ãããªã
ããã¯1ã«ã©ã åºå®
ã¹ããçã§ã¯ããç¡å¹
Step 7ïŒæçµçµ±åïŒä»æ§æžãäžåºŠã«æž¡ãïŒ
æåŸã«ã宿ãã仿§ãäžåºŠã«æž¡ããŸãã
Markdown仿§æž
PNGã¯ã€ã€ãŒãã¬ãŒã
è£è¶³æç« ïŒæå³ïŒ
ããããæçµä»æ§ããšããŠAIã«èªèãããŸãã
GeminiãChatGPTãªã©å¥ã
ã®AIã§ãã»ãŒåãUIãçæãããŸãã
â ãã®ææ³ã®ã¡ãªãã
â åçŸæ§ãé«ã
è€æ°ã®AIã§ã»ãŒåãUIãçæãããŸãã
â æå³ãæ£ç¢ºã«äŒãã
éäžã§åæã«æé©åãããããšãæžããŸãã
â UIã®èªç¶ããä¿ããã
å°ç·ã®æå³ãUXã®æå³ãåæ ãããŸãã
â å€§èŠæš¡ãªUIã§ãç Žç¶»ããªã
æ§é â æå â æå³ â ãã¶ã€ã³ â å¶çŽ ã®é ã§çè§£ãããããã è€éãªUIã§ãå®å®ããŸãã
â ãŸãšã
AIã«æå³ãæ£ç¢ºã«äŒããããã«ã¯ã 次ã®äžç¹ã»ãããæåŒ·ã§ãã
1. 段éçããã³ããïŒ5ã7ã¹ãããïŒ
2. PNGã¯ã€ã€ãŒãã¬ãŒã ïŒã¬ã€ã¢ãŠãç»åïŒ
3. Markdown仿§æžïŒæ§é åãããæçµä»æ§ïŒ
ãããŠãæåã« ãããããæ®µéçã«äŒããŸãããšå®£èšããããšã§ã AIã¯ä»æ§ãç« ç«ãŠãšããŠçè§£ãã æçµçã«é«ãåçŸæ§ãæã€ã¢ãŠãããããè¿ããŠãããŸãã
管ç人ããã
ä»é²1ïŒFAQã¢ããªãäœã£ãŠãããããã®ä»æ§æžmd
# 1. ç®ç
ãã°ã€ã³èªèšŒã«é¢ãã FAQ ã
蚺æãã£ãŒãã»ã«ããŽãªã»ããŒã¯ãŒãæ€çŽ¢ ã® 3 å°ç·ã§æ¢ãã Web ã¢ããªãæ§ç¯ããã
PC çã§ã¯å°ç·ãåžžã«è¡šç€ºããFAQ éšåã ãã¹ã¯ããŒã«ãã UI ãæ¡çšããã
# 2. ã¬ã€ã¢ãŠã仿§
â PCçïŒæšª 2 ã«ã©ã ïŒ
å·Šã«ã©ã ïŒå¹
30%ïŒ
蚺æãã£ãŒãïŒstickyïŒ
ã«ããŽãªã¿ãïŒstickyïŒ
å³ã«ã©ã ïŒå¹
70%ïŒ
ããŒã¯ãŒãæ€çŽ¢ïŒstickyïŒ
FAQäžèЧïŒç¬ç«ã¹ã¯ããŒã«é åïŒ
â ã¹ããçïŒ1 ã«ã©ã ïŒ
å·Šå³çµ±åããŠçžŠäžŠã³
sticky ã¯ç¡å¹å
# 3. å°ç·ä»æ§ïŒ3 å°ç·ïŒ
â 蚺æãã£ãŒãïŒå·Šã«ã©ã ïŒ
.diag-card ã§å²ã
ãã¿ã³ã¯çžŠäžŠã³
Step å°ç·ã¯ å°å°ïŒgoStep ã¯åäœããªã or Stepã¿ãé衚瀺ïŒ
â¡ ã«ããŽãªã¿ãïŒå·Šã«ã©ã ïŒ #category -tabs ã«ã¿ããçæ
active ã¿ãã¯ç·è²
FAQ ãã«ããŽãªã§ãã£ã«ã¿
⢠ããŒã¯ãŒãæ€çŽ¢ïŒå³ã«ã©ã ïŒ
PCçã§ã¯ã¿ã€ãã«ãšæ€çŽ¢ããã¯ã¹ã暪䞊ã³
PCçã§ã¯æ€çŽ¢ã«ãŒãã sticky
æ€çŽ¢ããã¯ã¹ã¯ã³ã³ãã¯ãïŒmax-width: 320pxïŒ
ããã¹ãã¯äžå€®å¯ãïŒtext-align: centerïŒ
# 4. FAQ è¡šç€ºä»æ§
â FAQããŒã¿æ§é ïŒfaqDataïŒ
js
{
id: number,
question: string,
answer: string,
category: string,
subcategory: string,
flow_step: number,
keywords: string[]
}
â FAQã«ãŒã
Q ãš A ã®ã¢ã³ãŒãã£ãªã³åœ¢åŒ
Q ãã¯ãªãã¯ãããš A ãéé
IDã»ã«ããŽãªã»ãµãã«ããŽãªã»Step ã衚瀺
â ãã£ã«ã¿æ¡ä»¶
ã«ããŽãªäžèŽ
ããŒã¯ãŒãäžèŽïŒquestion / answer / keywordsïŒ
Step ã¯å°å°ïŒåžžã« "ãã¹ãŠ"ïŒ
# 5. PCçã®ç¹å¥ä»æ§ïŒéèŠïŒ
â ããŒã¯ãŒãæ€çŽ¢ã«ãŒãïŒå³ã«ã©ã ïŒ
stickyïŒtop: 20pxïŒ
暪䞊ã³ã¬ã€ã¢ãŠãïŒflexïŒ
æ€çŽ¢ããã¯ã¹ã¯ã³ã³ãã¯ãïŒmax-width: 320pxïŒ
â FAQäžèЧ
FAQã ãã¹ã¯ããŒã«é åã«ãã
CSS:
css #faq -container {
max-height: calc(100vh - 140px);
overflow-y: auto;
padding-right: 8px;
}
# 6. CSS仿§ïŒéèŠãã€ã³ãïŒ
â sticky
css
.left-col {
position: sticky;
top: 20px;
}
.filter-box.search-sticky {
position: sticky;
top: 20px;
z-index: 10;
}
â PCçæ€çŽ¢å°ç·ã®æšªäžŠã³
css
.filter-box {
display: flex;
align-items: center;
gap: 16px;
}
#search -box {
flex: none;
max-width: 320px;
text-align: center;
}
â FAQã¹ã¯ããŒã«é å
css #faq -container {
max-height: calc(100vh - 140px);
overflow-y: auto;
}
# 7. JS仿§ïŒéèŠãã€ã³ãïŒ
â åæå
js
renderDiagnosis();
renderCategoryTabs();
renderFAQ();
â Step å°å°
js
// Stepã¿ãã¯æç»ããªã
// goStep ã¯äœãããªã
function goStep(step) { return; }
â FAQãã£ã«ã¿
js
const filtered = faqData.filter(item => {
const matchCategory = currentCategory === "ãã¹ãŠ" || item.category === currentCategory;
const matchKeyword = item.question.toLowerCase().includes(keyword)
|| item.answer.toLowerCase().includes(keyword)
|| item.keywords.join(" ").toLowerCase().includes(keyword);
return matchCategory && matchKeyword;
});
# 8. HTMLæ§é ïŒå¿
é ïŒ
â å·Šã«ã©ã
蚺æãã£ãŒã
ã«ããŽãªã¿ã
â å³ã«ã©ã
ããŒã¯ãŒãæ€çŽ¢ïŒsearch-stickyïŒ
FAQäžèЧ
# 9. æçµ UI ã®ç¹åŸŽïŒåçŸæ§ã®èŠç¹ïŒ
å°ç·ãåžžã«èŠããïŒstickyïŒ
FAQã ãã¹ã¯ããŒã«ãã
PCçã¯æšªäžŠã³ãã¹ããã¯çžŠäžŠã³
æ€çŽ¢ããã¯ã¹ã¯ã³ã³ãã¯ãïŒäžå€®å¯ã
Step å°ç·ã¯å°å°
FAQã¯ã«ããŽãªïŒæ€çŽ¢ã§çµã蟌ã¿ä»é²2ïŒGeminiã«äœã£ãŠããã£ãã·ã³ã°ã«ãã¡ã€ã«HTMLã®ã³ãŒã
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ãã°ã€ã³èªèšŒ FAQ</title>
<style>
/* ==========================================
ããŒã¹ã¹ã¿ã€ã« & ãªã»ãã
========================================== */
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: "Helvetica Neue", Arial, "Hiragino Kaku Gothic ProN", "Hiragino Sans", Meiryo, sans-serif;
line-height: 1.6;
color: #333 ;
background-color: #f4f7f6 ;
padding: 20px;
}
/* ã¢ããªå
šäœã³ã³ãã */
.app-container {
max-width: 1200px;
margin: 0 auto;
display: flex;
gap: 24px;
align-items: flex-start;
}
/* ã³ã³ããŒãã³ãçšã«ãŒãå
±é */
.card {
background: #fff ;
border-radius: 8px;
padding: 16px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
margin-bottom: 16px;
}
.card h2, .card h3 {
font-size: 1.1rem;
margin-bottom: 12px;
color: #2c3e50 ;
border-bottom: 2px solid #eef2f5 ;
padding-bottom: 6px;
}
/* ==========================================
å·Šã«ã©ã ïŒPCç 30%ïŒ
========================================== */
.left-col {
flex: 0 0 30%;
position: sticky;
top: 20px;
}
/* â 蚺æãã£ãŒã */
.diag-card {
background: #fff ;
border-radius: 8px;
padding: 16px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
margin-bottom: 16px;
}
.diag-card .diag-buttons {
display: flex;
flex-direction: column;
gap: 8px;
}
.diag-btn {
padding: 10px 12px;
background-color: #e9ecef ;
border: 1px solid #ced4da ;
border-radius: 6px;
cursor: pointer;
text-align: left;
font-size: 0.9rem;
transition: background-color 0.2s, border-color 0.2s;
}
.diag-btn:hover {
background-color: #dee2e6 ;
border-color: #adb5bd ;
}
/* â¡ ã«ããŽãªã¿ã */
#category -tabs {
display: flex;
flex-direction: column;
gap: 6px;
}
.category-tab {
padding: 10px 14px;
border: 1px solid #ced4da ;
border-radius: 6px;
background-color: #fff ;
cursor: pointer;
font-weight: bold;
font-size: 0.9rem;
text-align: left;
transition: all 0.2s;
}
.category-tab:hover {
background-color: #f8f9fa ;
}
/* active ã¿ãã¯ç·è² */
.category-tab.active {
background-color: #28a745 ;
color: #fff ;
border-color: #28a745 ;
}
/* ==========================================
å³ã«ã©ã ïŒPCç 70%ïŒ
========================================== */
.right-col {
flex: 0 0 70%;
min-width: 0; /* Flexç®æã®ããµã鲿¢ */
}
/* ⢠ããŒã¯ãŒãæ€çŽ¢ïŒsearch-stickyïŒ */
.filter-box.search-sticky {
position: sticky;
top: 20px;
z-index: 10;
}
.filter-box {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
background: #fff ;
border-radius: 8px;
padding: 16px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
margin-bottom: 16px;
}
.filter-box h2 {
margin-bottom: 0;
border-bottom: none;
padding-bottom: 0;
white-space: nowrap;
}
#search -box {
flex: none;
width: 100%;
max-width: 320px;
padding: 8px 12px;
border: 1px solid #ced4da ;
border-radius: 6px;
font-size: 0.95rem;
text-align: center;
outline: none;
}
#search -box:focus {
border-color: #28a745 ;
box-shadow: 0 0 0 2px rgba(40, 167, 69, 0.25);
}
/* FAQäžèЧç¬ç«ã¹ã¯ããŒã«é å */
#faq -container {
max-height: calc(100vh - 140px);
overflow-y: auto;
padding-right: 8px;
}
/* ã«ã¹ã¿ã ã¹ã¯ããŒã«ããŒïŒWebkitïŒ */
#faq -container::-webkit-scrollbar {
width: 6px;
}
#faq -container::-webkit-scrollbar-thumb {
background-color: #ccc ;
border-radius: 3px;
}
/* ==========================================
FAQã«ãŒã & ã¢ã³ãŒãã£ãªã³
========================================== */
.faq-item {
background: #fff ;
border: 1px solid #e0e0e0 ;
border-radius: 6px;
margin-bottom: 12px;
overflow: hidden;
box-shadow: 0 1px 4px rgba(0,0,0,0.04);
}
.faq-header {
padding: 14px 16px;
background-color: #fff ;
cursor: pointer;
display: flex;
justify-content: space-between;
align-items: center;
user-select: none;
font-weight: bold;
color: #1a252f ;
transition: background-color 0.2s;
}
.faq-header:hover {
background-color: #f8f9fa ;
}
.faq-question {
display: flex;
align-items: center;
gap: 8px;
padding-right: 12px;
}
.faq-q-badge {
color: #28a745 ;
font-weight: bold;
font-size: 1.1rem;
}
.faq-toggle-icon {
font-size: 0.8rem;
transition: transform 0.3s ease;
color: #6c757d ;
}
.faq-item.open .faq-toggle-icon {
transform: rotate(180deg);
}
.faq-body {
display: none;
padding: 16px;
border-top: 1px solid #eef2f5 ;
background-color: #fafbfc ;
}
.faq-item.open .faq-body {
display: block;
}
.faq-answer {
margin-bottom: 12px;
line-height: 1.7;
}
/* FAQã¡ã¿ããŒã¿ */
.faq-meta {
display: flex;
flex-wrap: wrap;
gap: 6px;
font-size: 0.75rem;
}
.badge {
padding: 2px 8px;
border-radius: 4px;
background-color: #e9ecef ;
color: #495057 ;
}
.badge-id {
background-color: #6c757d ;
color: #fff ;
}
.badge-cat {
background-color: #e3f2fd ;
color: #0d47a1 ;
}
.badge-subcat {
background-color: #e8f5e9 ;
color: #1b5e20 ;
}
.badge-step {
background-color: #fff3e0 ;
color: #e65100 ;
}
.no-faq {
text-align: center;
padding: 32px;
color: #6c757d ;
background: #fff ;
border-radius: 8px;
}
/* ==========================================
ã¹ããç ã¬ã¹ãã³ã·ã (1ã«ã©ã )
========================================== */
@media (max-width: 768px) {
.app-container {
flex-direction: column;
gap: 0;
}
.left-col,
.right-col {
flex: 1 1 100%;
width: 100%;
}
/* sticky ãç¡å¹å */
.left-col,
.filter-box.search-sticky {
position: static;
}
/* æ€çŽ¢ã«ãŒãã®ã¬ã€ã¢ãŠãå€æŽ */
.filter-box {
flex-direction: column;
align-items: stretch;
gap: 8px;
}
#search -box {
max-width: 100%;
}
/* ã¹ã¯ããŒã«å¶éãè§£é€ããŠç»é¢å
šäœã§ã¹ã¯ããŒã« */
#faq -container {
max-height: none;
overflow-y: visible;
padding-right: 0;
}
}
</style>
</head>
<body>
<div class="app-container">
<!-- â å·Šã«ã©ã ïŒå¹
30%ïŒ -->
<div class="left-col">
<!-- â 蚺æãã£ãŒã -->
<div class="diag-card">
<h3>ãå°ãããšã®èšºæ</h3>
<div class="diag-buttons" id="diag-buttons-container">
<!-- JSã§åçã«ãã¿ã³çæ -->
</div>
</div>
<!-- â¡ ã«ããŽãªã¿ã -->
<div class="card">
<h3>ã«ããŽãª</h3>
<div id="category-tabs">
<!-- JSã§åçã«ã¿ãçæ -->
</div>
</div>
</div>
<!-- â å³ã«ã©ã ïŒå¹
70%ïŒ -->
<div class="right-col">
<!-- ⢠ããŒã¯ãŒãæ€çŽ¢ (sticky) -->
<div class="filter-box search-sticky">
<h2>ãã°ã€ã³FAQæ€çŽ¢</h2>
<input type="text" id="search-box" placeholder="ããŒã¯ãŒããå
¥åïŒäŸ: ãã¹ã¯ãŒãïŒ" oninput="handleSearch()">
</div>
<!-- FAQäžèЧ (ç¬ç«ã¹ã¯ããŒã«é å) -->
<div id="faq-container">
<!-- JSã§åçã«FAQäžèŠ§çæ -->
</div>
</div>
</div>
<script>
/* ==========================================
4. FAQããŒã¿æ§é ïŒfaqDataïŒ
========================================== */
const faqData = [
{
id: 1,
question: "ãã¹ã¯ãŒããå¿ããŠãã°ã€ã³ã§ããŸããã",
answer: "ãã°ã€ã³ç»é¢ã®ããã¹ã¯ãŒãããå¿ãã®æ¹ã¯ãã¡ãããªã³ã¯ãã¯ãªãã¯ãããç»é²ã®ã¡ãŒã«ã¢ãã¬ã¹ãå
¥åããŠãªã»ããæç¶ããè¡ã£ãŠãã ããã",
category: "ãã¹ã¯ãŒã",
subcategory: "åèšå®",
flow_step: 1,
keywords: ["ãã¹ã¯ãŒã", "å¿ãã", "ãªã»ãã", "åèšå®", "倿Ž"]
},
{
id: 2,
question: "2段éèªèšŒã®ã³ãŒããå±ããŸããã",
answer: "è¿·æã¡ãŒã«ãã©ã«ãã«æ¯ãåããããŠããªããã確èªãã ããããŸããSMSåä¿¡å¶éãèšå®ããŠããå Žåã¯è§£é€ããŠãã ããã",
category: "2段éèªèšŒ",
subcategory: "SMSã»ã¡ãŒã«",
flow_step: 2,
keywords: ["2段éèªèšŒ", "ã³ãŒã", "å±ããªã", "SMS", "ã¯ã³ã¿ã€ã "]
},
{
id: 3,
question: "ã¢ã«ãŠã³ããããã¯ãããŠããŸããŸããã",
answer: "è€æ°åãã°ã€ã³ã«å€±æãããšå®å
šã®ããã¢ã«ãŠã³ããäžæããã¯ãããŸãã30å以äžçœ®ããŠããå詊è¡ãããããµããŒããžãåãåãããã ããã",
category: "ã¢ã«ãŠã³ãç¶æ
",
subcategory: "ããã¯è§£é€",
flow_step: 1,
keywords: ["ããã¯", "åçµ", "倱æ", "è§£é€", "ãã°ã€ã³ã§ããªã"]
},
{
id: 4,
question: "ç»é²ããã¡ãŒã«ã¢ãã¬ã¹ã倿Žãããã§ãã",
answer: "ãã°ã€ã³åŸããã€ããŒãžã®ãäŒå¡æ
å ±å€æŽãããæ°ããã¡ãŒã«ã¢ãã¬ã¹ãžå€æŽæç¶ããè¡ã£ãŠããã ããŸãã",
category: "äŒå¡æ
å ±",
subcategory: "ã¡ãŒã«å€æŽ",
flow_step: 3,
keywords: ["ã¡ãŒã«ã¢ãã¬ã¹", "倿Ž", "ç»é²æ
å ±", "ãã€ããŒãž"]
},
{
id: 5,
question: "ãã»ãã·ã§ã³ãåããŸããããšè¡šç€ºãããŸãã",
answer: "äžå®æéæäœããªãå Žåã«è¡šç€ºãããŸãããææ°ã§ãããå床ãã°ã€ã³ç»é¢ãããã°ã€ã³ãçŽããŠãã ããã",
category: "ãšã©ãŒå¯Ÿå¿",
subcategory: "ã»ãã·ã§ã³ãšã©ãŒ",
flow_step: 2,
keywords: ["ã»ãã·ã§ã³", "æéåã", "ã¿ã€ã ã¢ãŠã", "ãšã©ãŒ"]
}
];
// 蚺æãã£ãŒãçšç°¡æè³ªåããŒã¿
const diagnosisOptions = [
{ label: "ð ãã¹ã¯ãŒããåãããªã", category: "ãã¹ã¯ãŒã" },
{ label: "ð± èªèšŒã³ãŒããå±ããªã", category: "2段éèªèšŒ" },
{ label: "ð ã¢ã«ãŠã³ããããã¯ããã", category: "ã¢ã«ãŠã³ãç¶æ
" },
{ label: "â ïž ãšã©ãŒç»é¢ã衚瀺ããã", category: "ãšã©ãŒå¯Ÿå¿" }
];
/* ==========================================
ç¶æ
管ç (State)
========================================== */
let currentCategory = "ãã¹ãŠ";
let searchKeyword = "";
/* ==========================================
7. JS仿§
========================================== */
// Step å°å°ïŒgoStep ã¯äœãããªãïŒä»æ§èŠä»¶ïŒ
function goStep(step) {
return;
}
// â 蚺æãã£ãŒãã®æç»
function renderDiagnosis() {
const container = document.getElementById("diag-buttons-container");
container.innerHTML = "";
diagnosisOptions.forEach(opt => {
const btn = document.createElement("button");
btn.className = "diag-btn";
btn.textContent = opt.label;
btn.onclick = () => {
// éžæããã«ããŽãªãžåãæ¿ã
selectCategory(opt.category);
};
container.appendChild(btn);
});
}
// â¡ ã«ããŽãªã¿ãã®æç»
function renderCategoryTabs() {
const container = document.getElementById("category-tabs");
container.innerHTML = "";
// éè€ãªãã®ã«ããŽãªãªã¹ãçæ ("ãã¹ãŠ" ãå
é ã«ä»äž)
const categories = ["ãã¹ãŠ", ...new Set(faqData.map(item => item.category))];
categories.forEach(cat => {
const tab = document.createElement("button");
tab.className = `category-tab ${cat === currentCategory ? 'active' : ''}`;
tab.textContent = cat;
tab.onclick = () => selectCategory(cat);
container.appendChild(tab);
});
}
// ã«ããŽãªéžæåŠç
function selectCategory(cat) {
currentCategory = cat;
renderCategoryTabs();
renderFAQ();
}
// ⢠ããŒã¯ãŒãæ€çŽ¢ãã³ãã©
function handleSearch() {
const input = document.getElementById("search-box");
searchKeyword = input.value.trim().toLowerCase();
renderFAQ();
}
// FAQäžèŠ§ã®æç»ããã³ãã£ã«ã¿ãªã³ã°
function renderFAQ() {
const container = document.getElementById("faq-container");
container.innerHTML = "";
// 仿§ã«åºã¥ãããã£ã«ã¿æ¡ä»¶ïŒStepã¯å°å°ããåžžã«å
šä»¶å¯Ÿè±¡ïŒ
const filtered = faqData.filter(item => {
const matchCategory = currentCategory === "ãã¹ãŠ" || item.category === currentCategory;
const matchKeyword = item.question.toLowerCase().includes(searchKeyword)
|| item.answer.toLowerCase().includes(searchKeyword)
|| item.keywords.join(" ").toLowerCase().includes(searchKeyword);
return matchCategory && matchKeyword;
});
if (filtered.length === 0) {
container.innerHTML = '<div class="no-faq">該åœããFAQã¯èŠã€ãããŸããã§ããã</div>';
return;
}
filtered.forEach(item => {
const itemEl = document.createElement("div");
itemEl.className = "faq-item";
itemEl.innerHTML = `
<div class="faq-header" onclick="toggleAccordion(this)">
<div class="faq-question">
<span class="faq-q-badge">Q.</span>
<span>${escapeHtml(item.question)}</span>
</div>
<span class="faq-toggle-icon">âŒ</span>
</div>
<div class="faq-body">
<div class="faq-answer">${escapeHtml(item.answer)}</div>
<div class="faq-meta">
<span class="badge badge-id">ID: ${item.id}</span>
<span class="badge badge-cat">ã«ããŽãª: ${escapeHtml(item.category)}</span>
<span class="badge badge-subcat">ãµã: ${escapeHtml(item.subcategory)}</span>
<span class="badge badge-step">Step: ${item.flow_step}</span>
</div>
</div>
`;
container.appendChild(itemEl);
});
}
// ã¢ã³ãŒãã£ãªã³ééå¶åŸ¡
function toggleAccordion(headerEl) {
const faqItem = headerEl.parentElement;
faqItem.classList.toggle("open");
}
// ãšã¹ã±ãŒãåŠç (XSS察ç)
function escapeHtml(str) {
return str
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
// åæå (仿§èŠä»¶)
window.addEventListener("DOMContentLoaded", () => {
renderDiagnosis();
renderCategoryTabs();
renderFAQ();
});
</script>
</body>
</html>ãã®èšäºãåå ããŠããåé
- #AI
- #AI掻çš
- #æè¿ã®åŠã³
- #ã³ãŒãã³ã°
- #AIãšãã£ãŠã¿ã
- #èªå·±çè§£
- #ææŠ
- #ç¶ç¶
- #ç¿æ £å
- #èªå·±åæ
- #è·å Ž
- #çµç¹
- #ãªãŒããŒã·ãã
- #人æè²æ
- #人äº
- #ãã£ãªã¢ã³ã³ãµã«ã¿ã³ã
- #æ¥åæ¹å
- #MBTI
- #è·å Žã®äººéé¢ä¿
- #ããŒã«
- #çµç¹éçº
- #ã¯ã©ãŠããã¡ã³ãã£ã³ã°
- #ãããžã§ã¯ã
- #äžå°äŒæ¥èšºæå£«
- #ããã°ã©ãã³ã°åå¿è
- #瀟åŽå£«
- #å¿ççå®å šæ§
- #çµç¹ã¥ãã
- #瀟äŒä¿éºåŽå士
- #蚺æ
- #ããã³ãããšã³ãžãã¢ãªã³ã°
- #ããã°ã©ãã³ã°åŠç¿
- #JavaScript
- #1on1
- #ãã£ãªã¢åœ¢æ
- #人æéçº
- #AIãšåŠã³
- #ããŒã ãããžã¡ã³ã
- #react
- #è·å Žæ¹å
- #蚺æå£«
- #FAQ
- #CCC
- #æŠèš
- #fff
- #333
- #äŒŽèµ°åæ¯æŽ
- #瀟äŒäººåºç€å
- #SEARCH
- #AIè»åž«
- #人äºã³ã³ãµã«ãã£ã³ã°
- #蚺æããŒã«
- #e0e0e0
- #ãããæŠèš
- #åŽåã³ã³ãµã«ãã£ã³ã°
- #f8f9fa
- #2c3e50
- #28a745
- #Category
- #ãããžã§ã¯ãMPB
- #e9ecef
- #e8f5e9
- #e3f2fd
- #6c757d
- #dee2e6
- #fff3e0
- #1b5e20
- #495057
- #f4f7f6
- #CED4DA
- #0D47A1
- #e65100
- #adb5bd
- #1a252f
- #eef2f5
- #fafbfc