2242 lines
110 KiB
HTML
2242 lines
110 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>单词默写系统</title>
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
|
<style>
|
|
* {
|
|
margin: 0;
|
|
padding: 0;
|
|
box-sizing: border-box;
|
|
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
|
}
|
|
|
|
body {
|
|
background: linear-gradient(135deg, #0a2a1a, #0c3a4a, #0d4b66);
|
|
min-height: 100vh;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
padding: 20px;
|
|
overflow-x: hidden;
|
|
position: relative;
|
|
}
|
|
|
|
/* 鼠标跟随小圈 - 更慢更滑溜 */
|
|
.cursor-follower {
|
|
position: fixed;
|
|
width: 20px;
|
|
height: 20px;
|
|
border: 2px solid rgba(100, 255, 200, 0.7);
|
|
border-radius: 50%;
|
|
pointer-events: none;
|
|
transform: translate(-50%, -50%);
|
|
z-index: 9999;
|
|
transition: width 0.5s, height 0.5s, border 0.5s, transform 0.1s;
|
|
mix-blend-mode: difference;
|
|
}
|
|
|
|
.cursor-follower.hover {
|
|
width: 40px;
|
|
height: 40px;
|
|
border: 2px solid rgba(100, 255, 200, 0.9);
|
|
background: rgba(100, 255, 200, 0.1);
|
|
}
|
|
|
|
.container {
|
|
width: 100%;
|
|
max-width: 1000px;
|
|
text-align: center;
|
|
position: relative;
|
|
z-index: 10;
|
|
}
|
|
|
|
.header {
|
|
margin-bottom: 40px;
|
|
animation: fadeInDown 1s ease-out;
|
|
position: relative;
|
|
}
|
|
|
|
.logo {
|
|
font-size: 4.5rem;
|
|
margin-bottom: 20px;
|
|
background: linear-gradient(45deg, #7cffcb, #00d2ff, #5de6ff);
|
|
-webkit-background-clip: text;
|
|
background-clip: text;
|
|
color: transparent;
|
|
text-shadow: 0 0 20px rgba(100, 255, 200, 0.3);
|
|
animation: pulse 3s infinite;
|
|
}
|
|
|
|
.title {
|
|
font-size: 2.8rem;
|
|
font-weight: 700;
|
|
margin-bottom: 15px;
|
|
color: #fff;
|
|
text-shadow: 0 0 15px rgba(100, 255, 200, 0.5);
|
|
position: relative;
|
|
z-index: 20;
|
|
}
|
|
|
|
.subtitle {
|
|
font-size: 1.2rem;
|
|
color: #c0ffea;
|
|
max-width: 600px;
|
|
margin: 0 auto;
|
|
line-height: 1.6;
|
|
position: relative;
|
|
z-index: 20;
|
|
}
|
|
|
|
/* 模式选择按钮 */
|
|
.mode-selector {
|
|
display: flex;
|
|
justify-content: center;
|
|
gap: 30px;
|
|
margin: 40px 0;
|
|
animation: fadeInUp 1s ease-out 0.3s both;
|
|
}
|
|
|
|
.mode-btn {
|
|
padding: 20px 40px;
|
|
border-radius: 25px;
|
|
font-size: 1.2rem;
|
|
font-weight: 600;
|
|
cursor: pointer;
|
|
transition: all 0.4s ease;
|
|
position: relative;
|
|
overflow: hidden;
|
|
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
|
|
border: none;
|
|
color: #0a2a1a;
|
|
min-width: 180px;
|
|
}
|
|
|
|
.teacher-btn {
|
|
background: linear-gradient(45deg, #7cffcb, #00d2ff, #5de6ff);
|
|
}
|
|
|
|
.student-btn {
|
|
background: linear-gradient(45deg, #5de6ff, #00d2ff, #7cffcb);
|
|
}
|
|
|
|
.mode-btn:hover {
|
|
transform: translateY(-5px) scale(1.05);
|
|
box-shadow: 0 15px 35px rgba(100, 255, 200, 0.4);
|
|
}
|
|
|
|
.mode-btn:active {
|
|
transform: scale(0.95);
|
|
}
|
|
|
|
.mode-btn::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 0;
|
|
left: -100%;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
|
|
transition: 0.5s;
|
|
}
|
|
|
|
.mode-btn:hover::before {
|
|
left: 100%;
|
|
}
|
|
|
|
/* 主要内容区域 */
|
|
.main-content {
|
|
background: rgba(10, 42, 26, 0.7);
|
|
border-radius: 30px;
|
|
padding: 40px;
|
|
margin: 30px 0;
|
|
backdrop-filter: blur(15px);
|
|
border: 1px solid rgba(100, 255, 200, 0.3);
|
|
box-shadow: 0 20px 50px rgba(0, 0, 0, 0.4);
|
|
animation: fadeInUp 1s ease-out 0.6s both;
|
|
}
|
|
|
|
/* 欢迎界面 */
|
|
.welcome-screen {
|
|
padding: 40px 20px;
|
|
}
|
|
|
|
.welcome-icon {
|
|
font-size: 5rem;
|
|
margin-bottom: 30px;
|
|
background: linear-gradient(45deg, #7cffcb, #00d2ff, #5de6ff);
|
|
-webkit-background-clip: text;
|
|
background-clip: text;
|
|
color: transparent;
|
|
}
|
|
|
|
.welcome-title {
|
|
font-size: 2.2rem;
|
|
color: #fff;
|
|
margin-bottom: 20px;
|
|
}
|
|
|
|
.welcome-text {
|
|
color: #c0ffea;
|
|
font-size: 1.1rem;
|
|
line-height: 1.8;
|
|
max-width: 600px;
|
|
margin: 0 auto 30px;
|
|
}
|
|
|
|
/* 老师端界面 */
|
|
.teacher-screen {
|
|
display: none;
|
|
}
|
|
|
|
/* 标签页 */
|
|
.tabs {
|
|
display: flex;
|
|
justify-content: center;
|
|
gap: 15px;
|
|
margin-bottom: 30px;
|
|
}
|
|
|
|
.tab-btn {
|
|
padding: 12px 25px;
|
|
border-radius: 20px;
|
|
background: rgba(255, 255, 255, 0.1);
|
|
border: 1px solid rgba(100, 255, 200, 0.3);
|
|
color: #c0ffea;
|
|
cursor: pointer;
|
|
transition: all 0.3s ease;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.tab-btn.active {
|
|
background: linear-gradient(45deg, #7cffcb, #00d2ff, #5de6ff);
|
|
color: #0a2a1a;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.tab-btn:hover:not(.active) {
|
|
background: rgba(255, 255, 255, 0.2);
|
|
}
|
|
|
|
/* 搜索框 */
|
|
.search-container {
|
|
display: flex;
|
|
gap: 15px;
|
|
margin: 25px 0;
|
|
max-width: 600px;
|
|
margin-left: auto;
|
|
margin-right: auto;
|
|
}
|
|
|
|
.search-input {
|
|
flex: 1;
|
|
padding: 15px 20px;
|
|
border-radius: 15px;
|
|
border: 1px solid rgba(100, 255, 200, 0.3);
|
|
background: rgba(0, 0, 0, 0.2);
|
|
color: #fff;
|
|
font-size: 1rem;
|
|
outline: none;
|
|
}
|
|
|
|
.search-input::placeholder {
|
|
color: #a0ffe0;
|
|
}
|
|
|
|
.search-input:focus {
|
|
border-color: #7cffcb;
|
|
box-shadow: 0 0 15px rgba(124, 255, 203, 0.3);
|
|
}
|
|
|
|
/* 按钮组 */
|
|
.button-group {
|
|
display: flex;
|
|
justify-content: center;
|
|
flex-wrap: wrap;
|
|
gap: 15px;
|
|
margin: 25px 0;
|
|
}
|
|
|
|
.action-btn {
|
|
padding: 12px 25px;
|
|
border-radius: 15px;
|
|
border: none;
|
|
font-weight: 500;
|
|
cursor: pointer;
|
|
transition: all 0.3s ease;
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.btn-primary {
|
|
background: linear-gradient(45deg, #7cffcb, #00d2ff, #5de6ff);
|
|
color: #0a2a1a;
|
|
}
|
|
|
|
.btn-secondary {
|
|
background: rgba(255, 255, 255, 0.1);
|
|
color: #c0ffea;
|
|
border: 1px solid rgba(100, 255, 200, 0.3);
|
|
}
|
|
|
|
.btn-success {
|
|
background: linear-gradient(45deg, #34C759, #7cffcb);
|
|
color: #0a2a1a;
|
|
}
|
|
|
|
.btn-warning {
|
|
background: linear-gradient(45deg, #FFCC00, #ffd93d);
|
|
color: #0a2a1a;
|
|
}
|
|
|
|
.btn-danger {
|
|
background: linear-gradient(45deg, #FF3B30, #ff6b6b);
|
|
color: white;
|
|
}
|
|
|
|
.action-btn:hover {
|
|
transform: translateY(-3px);
|
|
box-shadow: 0 8px 20px rgba(100, 255, 200, 0.3);
|
|
}
|
|
|
|
.action-btn:active {
|
|
transform: translateY(-1px);
|
|
}
|
|
|
|
.action-btn::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 0;
|
|
left: -100%;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
|
|
transition: 0.5s;
|
|
}
|
|
|
|
.action-btn:hover::before {
|
|
left: 100%;
|
|
}
|
|
|
|
/* 统计信息 */
|
|
.stats-container {
|
|
display: flex;
|
|
justify-content: space-around;
|
|
margin: 30px 0;
|
|
flex-wrap: wrap;
|
|
gap: 20px;
|
|
}
|
|
|
|
.stat-card {
|
|
background: rgba(255, 255, 255, 0.1);
|
|
border-radius: 15px;
|
|
padding: 20px;
|
|
min-width: 120px;
|
|
border: 1px solid rgba(100, 255, 200, 0.2);
|
|
}
|
|
|
|
.stat-number {
|
|
font-size: 2rem;
|
|
font-weight: 700;
|
|
color: #7cffcb;
|
|
margin-bottom: 5px;
|
|
}
|
|
|
|
.stat-label {
|
|
color: #c0ffea;
|
|
font-size: 0.9rem;
|
|
}
|
|
|
|
/* 单词网格 */
|
|
.word-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
|
|
gap: 15px;
|
|
margin: 30px 0;
|
|
max-height: 300px;
|
|
overflow-y: auto;
|
|
padding: 10px;
|
|
}
|
|
|
|
.word-grid::-webkit-scrollbar {
|
|
width: 8px;
|
|
}
|
|
|
|
.word-grid::-webkit-scrollbar-track {
|
|
background: rgba(255, 255, 255, 0.1);
|
|
border-radius: 4px;
|
|
}
|
|
|
|
.word-grid::-webkit-scrollbar-thumb {
|
|
background: linear-gradient(45deg, #7cffcb, #00d2ff);
|
|
border-radius: 4px;
|
|
}
|
|
|
|
.word-item {
|
|
padding: 15px 10px;
|
|
border-radius: 10px;
|
|
background: rgba(255, 255, 255, 0.1);
|
|
color: #c0ffea;
|
|
cursor: pointer;
|
|
transition: all 0.3s ease;
|
|
border: 1px solid transparent;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.word-item:hover {
|
|
background: rgba(255, 255, 255, 0.2);
|
|
transform: translateY(-2px);
|
|
}
|
|
|
|
.word-item.selected {
|
|
background: linear-gradient(45deg, #7cffcb, #00d2ff, #5de6ff);
|
|
color: #0a2a1a;
|
|
border: 1px solid rgba(255, 255, 255, 0.5);
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* 添加单词提示 */
|
|
.add-word-suggestion {
|
|
background: linear-gradient(135deg, rgba(255, 204, 0, 0.2), rgba(255, 107, 107, 0.2));
|
|
border-radius: 15px;
|
|
padding: 20px;
|
|
margin: 20px 0;
|
|
border: 1px solid rgba(255, 204, 0, 0.3);
|
|
display: none;
|
|
}
|
|
|
|
.add-word-suggestion p {
|
|
color: #ffd93d;
|
|
margin-bottom: 15px;
|
|
}
|
|
|
|
/* 学生端界面 */
|
|
.student-screen {
|
|
display: none;
|
|
}
|
|
|
|
/* 文件上传区域 */
|
|
.file-upload-area {
|
|
border: 2px dashed rgba(100, 255, 200, 0.3);
|
|
border-radius: 20px;
|
|
padding: 50px 30px;
|
|
margin: 30px 0;
|
|
text-align: center;
|
|
transition: all 0.3s ease;
|
|
background: rgba(0, 0, 0, 0.2);
|
|
cursor: pointer;
|
|
}
|
|
|
|
.file-upload-area:hover {
|
|
border-color: #7cffcb;
|
|
background: rgba(124, 255, 203, 0.1);
|
|
}
|
|
|
|
.upload-icon {
|
|
font-size: 4rem;
|
|
color: #7cffcb;
|
|
margin-bottom: 20px;
|
|
}
|
|
|
|
.upload-text {
|
|
color: #c0ffea;
|
|
font-size: 1.2rem;
|
|
margin-bottom: 20px;
|
|
}
|
|
|
|
.upload-subtext {
|
|
color: #a0ffe0;
|
|
font-size: 0.9rem;
|
|
margin-bottom: 20px;
|
|
}
|
|
|
|
/* 导入信息卡片 */
|
|
.import-info {
|
|
background: linear-gradient(135deg, rgba(52, 199, 89, 0.2), rgba(124, 255, 203, 0.2));
|
|
border-radius: 20px;
|
|
padding: 30px;
|
|
margin: 30px 0;
|
|
border: 1px solid rgba(52, 199, 89, 0.3);
|
|
display: none;
|
|
}
|
|
|
|
.import-info h3 {
|
|
color: #7cffcb;
|
|
margin-bottom: 20px;
|
|
font-size: 1.5rem;
|
|
}
|
|
|
|
.import-details {
|
|
color: #c0ffea;
|
|
margin-bottom: 20px;
|
|
text-align: left;
|
|
}
|
|
|
|
.import-details p {
|
|
margin: 10px 0;
|
|
}
|
|
|
|
/* 默写区域 */
|
|
.dictation-area {
|
|
display: none;
|
|
padding: 30px 0;
|
|
}
|
|
|
|
.word-display {
|
|
font-size: 3rem;
|
|
font-weight: 300;
|
|
color: #fff;
|
|
margin: 40px 0;
|
|
text-shadow: 0 0 30px rgba(100, 255, 200, 0.5);
|
|
min-height: 150px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
|
|
.word-blank {
|
|
display: inline-block;
|
|
min-width: 300px;
|
|
text-align: center;
|
|
margin: 10px 0;
|
|
font-family: 'Courier New', monospace;
|
|
letter-spacing: 5px;
|
|
font-size: 2.5rem;
|
|
}
|
|
|
|
.answer-input {
|
|
padding: 15px 20px;
|
|
border-radius: 15px;
|
|
border: 2px solid rgba(100, 255, 200, 0.3);
|
|
background: rgba(0, 0, 0, 0.2);
|
|
color: #fff;
|
|
font-size: 1.5rem;
|
|
text-align: center;
|
|
outline: none;
|
|
width: 300px;
|
|
margin: 20px 0;
|
|
}
|
|
|
|
.answer-input:focus {
|
|
border-color: #7cffcb;
|
|
box-shadow: 0 0 20px rgba(124, 255, 203, 0.5);
|
|
}
|
|
|
|
.input-indicator {
|
|
color: #7cffcb;
|
|
font-size: 1.2rem;
|
|
margin-bottom: 10px;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.progress-info {
|
|
color: #c0ffea;
|
|
font-size: 1.2rem;
|
|
margin: 20px 0;
|
|
}
|
|
|
|
.progress-bar {
|
|
width: 100%;
|
|
height: 10px;
|
|
background: rgba(255, 255, 255, 0.1);
|
|
border-radius: 5px;
|
|
overflow: hidden;
|
|
margin: 20px 0;
|
|
}
|
|
|
|
.progress-fill {
|
|
height: 100%;
|
|
background: linear-gradient(45deg, #7cffcb, #00d2ff, #5de6ff);
|
|
border-radius: 5px;
|
|
width: 0%;
|
|
transition: width 0.5s ease;
|
|
}
|
|
|
|
.dictation-controls {
|
|
display: flex;
|
|
justify-content: center;
|
|
gap: 20px;
|
|
margin: 40px 0;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.control-btn {
|
|
padding: 15px 30px;
|
|
border-radius: 15px;
|
|
border: none;
|
|
font-size: 1.1rem;
|
|
font-weight: 600;
|
|
cursor: pointer;
|
|
transition: all 0.3s ease;
|
|
min-width: 150px;
|
|
}
|
|
|
|
.prev-btn {
|
|
background: linear-gradient(45deg, #5de6ff, #00d2ff);
|
|
color: #0a2a1a;
|
|
}
|
|
|
|
.next-btn {
|
|
background: linear-gradient(45deg, #7cffcb, #00d2ff);
|
|
color: #0a2a1a;
|
|
}
|
|
|
|
.end-btn {
|
|
background: linear-gradient(45deg, #FF3B30, #ff6b6b);
|
|
color: white;
|
|
}
|
|
|
|
.submit-btn {
|
|
background: linear-gradient(45deg, #34C759, #7cffcb);
|
|
color: #0a2a1a;
|
|
}
|
|
|
|
/* 成绩报告区域 */
|
|
.result-area {
|
|
display: none;
|
|
padding: 30px 0;
|
|
}
|
|
|
|
.result-header {
|
|
color: #fff;
|
|
margin-bottom: 30px;
|
|
}
|
|
|
|
.score-circle {
|
|
width: 200px;
|
|
height: 200px;
|
|
border-radius: 50%;
|
|
background: conic-gradient(#7cffcb 0% 70%, #5de6ff 70% 100%);
|
|
margin: 0 auto 30px;
|
|
position: relative;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
|
|
.score-inner {
|
|
width: 160px;
|
|
height: 160px;
|
|
border-radius: 50%;
|
|
background: rgba(10, 42, 26, 0.9);
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
|
|
.score-number {
|
|
font-size: 3rem;
|
|
font-weight: 700;
|
|
color: #7cffcb;
|
|
margin-bottom: 5px;
|
|
}
|
|
|
|
.score-text {
|
|
color: #c0ffea;
|
|
font-size: 1.2rem;
|
|
}
|
|
|
|
.result-stats {
|
|
display: flex;
|
|
justify-content: space-around;
|
|
margin: 30px 0;
|
|
flex-wrap: wrap;
|
|
gap: 20px;
|
|
}
|
|
|
|
.result-stat-card {
|
|
background: rgba(255, 255, 255, 0.1);
|
|
border-radius: 15px;
|
|
padding: 20px;
|
|
min-width: 150px;
|
|
border: 1px solid rgba(100, 255, 200, 0.2);
|
|
}
|
|
|
|
.result-stat-number {
|
|
font-size: 2rem;
|
|
font-weight: 700;
|
|
color: #7cffcb;
|
|
margin-bottom: 5px;
|
|
}
|
|
|
|
.result-stat-label {
|
|
color: #c0ffea;
|
|
font-size: 0.9rem;
|
|
}
|
|
|
|
.grade-badge {
|
|
padding: 10px 20px;
|
|
border-radius: 20px;
|
|
font-weight: 600;
|
|
margin: 20px 0;
|
|
display: inline-block;
|
|
}
|
|
|
|
.grade-a {
|
|
background: linear-gradient(45deg, #34C759, #7cffcb);
|
|
color: #0a2a1a;
|
|
}
|
|
|
|
.grade-b {
|
|
background: linear-gradient(45deg, #FFCC00, #ffd93d);
|
|
color: #0a2a1a;
|
|
}
|
|
|
|
.grade-c {
|
|
background: linear-gradient(45deg, #FF9500, #ffcc80);
|
|
color: #0a2a1a;
|
|
}
|
|
|
|
.grade-d {
|
|
background: linear-gradient(45deg, #FF3B30, #ff6b6b);
|
|
color: white;
|
|
}
|
|
|
|
/* 错误详情列表 */
|
|
.error-details {
|
|
background: rgba(255, 255, 255, 0.1);
|
|
border-radius: 15px;
|
|
padding: 25px;
|
|
margin: 30px 0;
|
|
border: 1px solid rgba(255, 107, 107, 0.3);
|
|
}
|
|
|
|
.error-details h3 {
|
|
color: #ff6b6b;
|
|
margin-bottom: 20px;
|
|
text-align: center;
|
|
}
|
|
|
|
.error-list {
|
|
list-style: none;
|
|
text-align: left;
|
|
}
|
|
|
|
.error-item {
|
|
display: flex;
|
|
align-items: center;
|
|
padding: 15px;
|
|
margin: 10px 0;
|
|
background: rgba(255, 255, 255, 0.05);
|
|
border-radius: 10px;
|
|
border-left: 4px solid #ff6b6b;
|
|
}
|
|
|
|
.error-number {
|
|
font-weight: bold;
|
|
color: #ff6b6b;
|
|
margin-right: 15px;
|
|
min-width: 30px;
|
|
}
|
|
|
|
.error-content {
|
|
flex: 1;
|
|
}
|
|
|
|
.error-word {
|
|
font-weight: bold;
|
|
color: #fff;
|
|
margin-bottom: 5px;
|
|
}
|
|
|
|
.error-answer {
|
|
color: #ffd93d;
|
|
margin-bottom: 5px;
|
|
}
|
|
|
|
.error-correct {
|
|
color: #7cffcb;
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.error-arrow {
|
|
margin: 0 10px;
|
|
color: #ffd93d;
|
|
}
|
|
|
|
/* Particles background */
|
|
.particles {
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
z-index: -1;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.particle {
|
|
position: absolute;
|
|
border-radius: 50%;
|
|
background: rgba(100, 255, 200, 0.2);
|
|
animation: float 15s infinite linear;
|
|
}
|
|
|
|
@keyframes float {
|
|
0% {
|
|
transform: translateY(0) translateX(0) rotate(0deg);
|
|
opacity: 0;
|
|
}
|
|
10% {
|
|
opacity: 1;
|
|
}
|
|
90% {
|
|
opacity: 0.5;
|
|
}
|
|
100% {
|
|
transform: translateY(-100vh) translateX(100px) rotate(360deg);
|
|
opacity: 0;
|
|
}
|
|
}
|
|
|
|
/* 旋转立方体 */
|
|
.cube-container {
|
|
position: absolute;
|
|
top: 20%;
|
|
left: 50%;
|
|
transform: translate(-50%, -50%);
|
|
width: 150px;
|
|
height: 150px;
|
|
perspective: 1000px;
|
|
z-index: 5;
|
|
opacity: 0.7;
|
|
}
|
|
|
|
.cube {
|
|
width: 100%;
|
|
height: 100%;
|
|
position: relative;
|
|
transform-style: preserve-3d;
|
|
animation: rotate 20s infinite linear;
|
|
}
|
|
|
|
.cube-face {
|
|
position: absolute;
|
|
width: 150px;
|
|
height: 150px;
|
|
background: rgba(100, 255, 200, 0.1);
|
|
border: 2px solid rgba(100, 255, 200, 0.3);
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
font-size: 2rem;
|
|
font-weight: bold;
|
|
color: rgba(100, 255, 200, 0.7);
|
|
backdrop-filter: blur(2px);
|
|
}
|
|
|
|
.cube-face-front { transform: rotateY(0deg) translateZ(75px); }
|
|
.cube-face-back { transform: rotateY(180deg) translateZ(75px); }
|
|
.cube-face-right { transform: rotateY(90deg) translateZ(75px); }
|
|
.cube-face-left { transform: rotateY(-90deg) translateZ(75px); }
|
|
.cube-face-top { transform: rotateX(90deg) translateZ(75px); }
|
|
.cube-face-bottom { transform: rotateX(-90deg) translateZ(75px); }
|
|
|
|
@keyframes rotate {
|
|
0% { transform: rotateX(0) rotateY(0) rotateZ(0); }
|
|
100% { transform: rotateX(360deg) rotateY(360deg) rotateZ(360deg); }
|
|
}
|
|
|
|
/* Animations */
|
|
@keyframes fadeIn {
|
|
from { opacity: 0; }
|
|
to { opacity: 1; }
|
|
}
|
|
|
|
@keyframes fadeInDown {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(-30px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
@keyframes fadeInUp {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(30px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
@keyframes pulse {
|
|
0% { text-shadow: 0 0 10px rgba(100, 255, 200, 0.3); }
|
|
50% { text-shadow: 0 0 30px rgba(100, 255, 200, 0.6); }
|
|
100% { text-shadow: 0 0 10px rgba(100, 255, 200, 0.3); }
|
|
}
|
|
|
|
/* 响应式设计 */
|
|
@media (max-width: 768px) {
|
|
.title {
|
|
font-size: 2.2rem;
|
|
}
|
|
|
|
.logo {
|
|
font-size: 3.5rem;
|
|
}
|
|
|
|
.mode-selector {
|
|
flex-direction: column;
|
|
align-items: center;
|
|
gap: 15px;
|
|
}
|
|
|
|
.mode-btn {
|
|
width: 100%;
|
|
max-width: 300px;
|
|
}
|
|
|
|
.main-content {
|
|
padding: 25px 20px;
|
|
}
|
|
|
|
.word-grid {
|
|
grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));
|
|
gap: 10px;
|
|
}
|
|
|
|
.word-item {
|
|
padding: 12px 8px;
|
|
font-size: 0.9rem;
|
|
}
|
|
|
|
.word-display {
|
|
font-size: 2rem;
|
|
}
|
|
|
|
.word-blank {
|
|
font-size: 1.8rem;
|
|
min-width: 200px;
|
|
}
|
|
|
|
.answer-input {
|
|
width: 250px;
|
|
font-size: 1.2rem;
|
|
}
|
|
|
|
.dictation-controls {
|
|
flex-direction: column;
|
|
align-items: center;
|
|
}
|
|
|
|
.control-btn {
|
|
width: 100%;
|
|
max-width: 250px;
|
|
}
|
|
|
|
.cube-container {
|
|
width: 100px;
|
|
height: 100px;
|
|
top: 25%;
|
|
}
|
|
|
|
.cube-face {
|
|
width: 100px;
|
|
height: 100px;
|
|
font-size: 1.5rem;
|
|
}
|
|
|
|
.cube-face-front { transform: rotateY(0deg) translateZ(50px); }
|
|
.cube-face-back { transform: rotateY(180deg) translateZ(50px); }
|
|
.cube-face-right { transform: rotateY(90deg) translateZ(50px); }
|
|
.cube-face-left { transform: rotateY(-90deg) translateZ(50px); }
|
|
.cube-face-top { transform: rotateX(90deg) translateZ(50px); }
|
|
.cube-face-bottom { transform: rotateX(-90deg) translateZ(50px); }
|
|
}
|
|
|
|
@media (max-width: 480px) {
|
|
.title {
|
|
font-size: 1.8rem;
|
|
}
|
|
|
|
.subtitle {
|
|
font-size: 1rem;
|
|
}
|
|
|
|
.main-content {
|
|
padding: 20px 15px;
|
|
}
|
|
|
|
.word-grid {
|
|
grid-template-columns: repeat(auto-fill, minmax(70px, 1fr));
|
|
}
|
|
|
|
.word-display {
|
|
font-size: 1.5rem;
|
|
}
|
|
|
|
.word-blank {
|
|
font-size: 1.5rem;
|
|
min-width: 150px;
|
|
letter-spacing: 3px;
|
|
}
|
|
|
|
.answer-input {
|
|
width: 200px;
|
|
font-size: 1rem;
|
|
}
|
|
|
|
.stats-container {
|
|
flex-direction: column;
|
|
align-items: center;
|
|
}
|
|
|
|
.stat-card {
|
|
width: 100%;
|
|
max-width: 200px;
|
|
}
|
|
|
|
.score-circle {
|
|
width: 150px;
|
|
height: 150px;
|
|
}
|
|
|
|
.score-inner {
|
|
width: 120px;
|
|
height: 120px;
|
|
}
|
|
|
|
.score-number {
|
|
font-size: 2rem;
|
|
}
|
|
|
|
.error-item {
|
|
flex-direction: column;
|
|
align-items: flex-start;
|
|
text-align: left;
|
|
}
|
|
|
|
.error-number {
|
|
margin-bottom: 10px;
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<!-- 鼠标跟随小圈 -->
|
|
<div class="cursor-follower"></div>
|
|
|
|
<!-- 背景粒子 -->
|
|
<div class="particles" id="particles"></div>
|
|
|
|
<!-- 旋转立方体 -->
|
|
<div class="cube-container">
|
|
<div class="cube">
|
|
<div class="cube-face cube-face-front">月</div>
|
|
<div class="cube-face cube-face-back">半</div>
|
|
<div class="cube-face cube-face-right">单</div>
|
|
<div class="cube-face cube-face-left">词</div>
|
|
<div class="cube-face cube-face-top">默</div>
|
|
<div class="cube-face cube-face-bottom">写</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="container">
|
|
<div class="header">
|
|
<div class="logo">
|
|
<i class="fas fa-book"></i>
|
|
</div>
|
|
<h1 class="title">单词默写系统</h1>
|
|
<p class="subtitle">简单易用的单词默写工具</p>
|
|
</div>
|
|
|
|
<!-- 模式选择 -->
|
|
<div class="mode-selector">
|
|
<button class="mode-btn teacher-btn" onclick="switchMode('teacher')">
|
|
<i class="fas fa-chalkboard-teacher"></i> 教师端
|
|
</button>
|
|
<button class="mode-btn student-btn" onclick="switchMode('student')">
|
|
<i class="fas fa-user-graduate"></i> 学生端
|
|
</button>
|
|
</div>
|
|
|
|
<!-- 主要内容区域 -->
|
|
<div class="main-content">
|
|
<!-- 欢迎界面 -->
|
|
<div id="welcomeScreen" class="welcome-screen">
|
|
<div class="welcome-icon">
|
|
<i class="fas fa-book-open"></i>
|
|
</div>
|
|
<h2 class="welcome-title">欢迎使用单词默写系统</h2>
|
|
<p class="welcome-text">
|
|
这是一个便捷的单词默写工具,老师可以选择单词并导出配置文件,
|
|
学生可以导入配置文件进行单词默写练习。
|
|
</p>
|
|
<p class="welcome-text">
|
|
请先选择使用模式:老师端或学生端
|
|
</p>
|
|
</div>
|
|
|
|
<!-- 老师端界面 -->
|
|
<div id="teacherScreen" class="teacher-screen">
|
|
<!-- 标签页 -->
|
|
<div class="tabs">
|
|
<button class="tab-btn active" onclick="switchTab('selection')">单词选择</button>
|
|
</div>
|
|
|
|
<!-- 单词选择标签页 -->
|
|
<div id="selectionTab">
|
|
<h3 style="color: #fff; margin: 20px 0;">选择单词</h3>
|
|
|
|
<div class="search-container">
|
|
<input type="text" class="search-input" id="searchInput" placeholder="搜索单词..." oninput="filterWords()">
|
|
<button class="action-btn btn-secondary" onclick="clearSearch()">
|
|
<i class="fas fa-times"></i> 清除
|
|
</button>
|
|
</div>
|
|
|
|
<!-- 添加单词提示 -->
|
|
<div id="addWordSuggestion" class="add-word-suggestion">
|
|
<p><i class="fas fa-lightbulb"></i> 没有找到您要的单词?可以添加到词库中!</p>
|
|
<button class="action-btn btn-warning" onclick="addNewWord()">
|
|
<i class="fas fa-plus"></i> 添加单词 "<span id="newWordText"></span>"
|
|
</button>
|
|
</div>
|
|
|
|
<div class="button-group">
|
|
<button class="action-btn btn-primary" onclick="selectAllWords()">
|
|
<i class="fas fa-check-square"></i> 全选
|
|
</button>
|
|
<button class="action-btn btn-secondary" onclick="deselectAllWords()">
|
|
<i class="fas fa-square"></i> 取消全选
|
|
</button>
|
|
<button class="action-btn btn-warning" onclick="randomSelectWords()">
|
|
<i class="fas fa-dice"></i> 随机60个
|
|
</button>
|
|
<button class="action-btn btn-success" onclick="exportConfig()">
|
|
<i class="fas fa-download"></i> 导出配置
|
|
</button>
|
|
</div>
|
|
|
|
<div class="stats-container">
|
|
<div class="stat-card">
|
|
<div class="stat-number" id="totalWords">50</div>
|
|
<div class="stat-label">总单词</div>
|
|
</div>
|
|
<div class="stat-card">
|
|
<div class="stat-number" id="selectedCount">0</div>
|
|
<div class="stat-label">已选择</div>
|
|
</div>
|
|
<div class="stat-card">
|
|
<div class="stat-number" id="percentage">0%</div>
|
|
<div class="stat-label">完成度</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="word-grid" id="wordGrid">
|
|
<!-- 单词项将通过JavaScript动态生成 -->
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 学生端界面 -->
|
|
<div id="studentScreen" class="student-screen">
|
|
<h3 style="color: #fff; margin: 20px 0;">导入配置文件</h3>
|
|
|
|
<div class="file-upload-area" id="fileUploadArea" onclick="document.getElementById('configFile').click()">
|
|
<div class="upload-icon">
|
|
<i class="fas fa-cloud-upload-alt"></i>
|
|
</div>
|
|
<h3 class="upload-text">点击或拖拽文件到此处上传</h3>
|
|
<p class="upload-subtext">支持 .json 格式的配置文件</p>
|
|
<button class="action-btn btn-primary">
|
|
<i class="fas fa-folder-open"></i> 选择文件
|
|
</button>
|
|
<input type="file" id="configFile" accept=".json" style="display: none;" onchange="handleFileSelect(event)">
|
|
</div>
|
|
|
|
<div id="importInfo" class="import-info">
|
|
<h3><i class="fas fa-check-circle"></i> 配置导入成功</h3>
|
|
<div class="import-details">
|
|
<p><strong>单词数量:</strong><span id="importedWordCount">0</span> 个</p>
|
|
<p><strong>创建时间:</strong><span id="importedTime">-</span></p>
|
|
</div>
|
|
<button class="action-btn btn-success" onclick="startDictation()">
|
|
<i class="fas fa-play"></i> 开始默写
|
|
</button>
|
|
</div>
|
|
|
|
<div id="dictationArea" class="dictation-area">
|
|
<h3 style="color: #fff; margin-bottom: 30px;">单词默写</h3>
|
|
<div class="word-display" id="wordDisplay">
|
|
<div class="input-indicator">请输入单词:</div>
|
|
<div class="word-blank" id="wordBlank">_ _ _ _ _</div>
|
|
</div>
|
|
<input type="text" class="answer-input" id="answerInput" placeholder="请输入单词..." onkeypress="handleKeyPress(event)">
|
|
<div class="progress-info" id="progressInfo">进度: 0/0</div>
|
|
|
|
<div class="progress-bar">
|
|
<div class="progress-fill" id="progressFill"></div>
|
|
</div>
|
|
|
|
<div class="dictation-controls">
|
|
<button class="control-btn prev-btn" onclick="showPrevWord()">
|
|
<i class="fas fa-arrow-left"></i> 上一个
|
|
</button>
|
|
<button class="control-btn submit-btn" onclick="submitAnswer()">
|
|
<i class="fas fa-check"></i> 提交答案
|
|
</button>
|
|
<button class="control-btn next-btn" onclick="showNextWord()">
|
|
下一个 <i class="fas fa-arrow-right"></i>
|
|
</button>
|
|
<button class="control-btn end-btn" onclick="endDictation()">
|
|
<i class="fas fa-stop"></i> 结束默写
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="resultArea" class="result-area">
|
|
<h2 class="result-header">默写成绩报告</h2>
|
|
<div class="score-circle">
|
|
<div class="score-inner">
|
|
<div class="score-number" id="finalScore">0</div>
|
|
<div class="score-text">正确率</div>
|
|
</div>
|
|
</div>
|
|
<div class="grade-badge" id="gradeBadge">等级: A</div>
|
|
|
|
<div class="result-stats">
|
|
<div class="result-stat-card">
|
|
<div class="result-stat-number" id="correctCount">0</div>
|
|
<div class="result-stat-label">正确</div>
|
|
</div>
|
|
<div class="result-stat-card">
|
|
<div class="result-stat-number" id="wrongCount">0</div>
|
|
<div class="result-stat-label">错误</div>
|
|
</div>
|
|
<div class="result-stat-card">
|
|
<div class="result-stat-number" id="totalCount">0</div>
|
|
<div class="result-stat-label">总计</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="errorDetails" class="error-details">
|
|
<h3><i class="fas fa-times-circle"></i> 错误详情</h3>
|
|
<ul class="error-list" id="errorList">
|
|
<!-- 错误列表将通过JavaScript动态生成 -->
|
|
</ul>
|
|
</div>
|
|
|
|
<button class="action-btn btn-primary" onclick="restartDictation()">
|
|
<i class="fas fa-redo"></i> 重新开始
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
//单词库 - 扩展版
|
|
let toeflWords = [
|
|
"a", "a few", "a little", "a lot of", "a.m.", "abandon", "abandoned", "ability", "able", "abolish",
|
|
"abortion", "about", "above", "abroad", "absence", "absent", "absolute", "absorb", "abstain", "abstract",
|
|
"absurd", "abundance", "abundant", "abuse", "academic", "academy", "accelerate", "accent", "accept", "acceptable",
|
|
"acceptance", "access", "accessory", "accident", "accidental", "acclaim", "accommodate", "accommodation", "accompany", "accomplish",
|
|
"accord", "accordance", "according to", "accordingly", "account", "accountant", "accumulate", "accuracy", "accurate", "accusation",
|
|
"accuse", "achieve", "acid", "acknowledge", "acquaintance", "acquire", "acquisition", "acre", "across", "act",
|
|
"action", "active", "activist", "activity", "actor", "actress", "actual", "actually", "ad", "adapt",
|
|
"add", "addict", "addiction", "addition", "additional", "address", "adequate", "adjacent", "adjust", "administer",
|
|
"administration", "administrative", "admiration", "admire", "admission", "admit", "adolescent", "adopt", "adult", "advance",
|
|
"advanced", "advantage", "adventure", "adverse", "advertise", "advertisement", "advertising", "advice", "advise", "advocate",
|
|
"aesthetic", "affair", "affect", "affection", "afford", "afraid", "after", "afternoon", "afterwards", "again",
|
|
"against", "age", "aged", "agency", "agenda", "agent", "aggressive", "ago", "agree", "agreement",
|
|
"agricultural", "agriculture", "ahead", "aid", "aim", "air", "air conditioning", "air force", "aircraft", "airline",
|
|
"airport", "aisle", "alarm", "album", "alcohol", "alcoholic", "alert", "algebra", "alien", "alike",
|
|
"alive", "all", "allegation", "allege", "allegiance", "alliance", "allow", "allowance", "ally", "almost",
|
|
"alone", "along", "alongside", "aloud", "already", "also", "alter", "alternative", "although", "altogether",
|
|
"aluminium", "always", "amateur", "amaze", "ambassador", "ambiguous", "ambition", "ambitious", "ambulance", "amend",
|
|
"amendment", "amid", "among", "amount", "ample", "amuse", "analogy", "analyse", "analysis", "analyst",
|
|
"ancestor", "ancient", "and", "angel", "anger", "angle", "angry", "animal", "ankle", "anniversary",
|
|
"announce", "announcement", "annoy", "annual", "anonymous", "another", "answer", "anticipate", "anxiety", "anxious",
|
|
"any", "anybody", "anyone", "anything", "anyway", "anywhere", "apart", "apartment", "apologize", "apology",
|
|
"apparent", "appeal", "appear", "appearance", "appendix", "appetite", "applaud", "applause", "apple", "applicant",
|
|
"application", "apply", "appoint", "appointment", "appreciate", "approach", "appropriate", "approval", "approve", "approximate",
|
|
"April", "arbitrary", "arch", "archaeology", "architect", "architecture", "archive", "area", "arena", "argue",
|
|
"argument", "arise", "arm", "army", "around", "arrange", "arrangement", "arrest", "arrival", "arrive",
|
|
"arrow", "art", "article", "artificial", "artist", "artistic", "as", "ascend", "ash", "ashamed",
|
|
"aside", "ask", "asleep", "aspect", "aspiration", "assassination", "assault", "assemble", "assembly", "assert",
|
|
"assess", "assessment", "asset", "assign", "assignment", "assist", "assistance", "assistant", "associate", "association",
|
|
"assume", "assumption", "assurance", "assure", "astonish", "astronomer", "astronomy", "asylum", "at", "athlete",
|
|
"atmosphere", "atom", "attach", "attachment", "attack", "attempt", "attend", "attendance", "attention", "attitude",
|
|
"attorney", "attract", "attraction", "attractive", "attribute", "auction", "audience", "audit", "August", "aunt",
|
|
"author", "authority", "authorize", "automatic", "automobile", "autumn", "available", "avenue", "average", "avoid",
|
|
"await", "awake", "award", "aware", "awareness", "away", "awful", "awkward", "baby", "back",
|
|
"background", "backward", "bacteria", "bad", "badly", "bag", "bail", "bake", "balance", "ball",
|
|
"balloon", "ballot", "ban", "banana", "band", "bank", "bankruptcy", "bar", "bare", "barely",
|
|
"bargain", "barrel", "barrier", "base", "baseball", "basic", "basically", "basis", "basket", "basketball",
|
|
"bass", "bat", "bath", "bathroom", "battery", "battle", "bay", "be", "beach", "beam",
|
|
"bean", "bear", "beard", "beast", "beat", "beautiful", "beauty", "because", "become", "bed",
|
|
"bedroom", "bee", "beef", "beer", "before", "beg", "begin", "beginning", "behalf", "behave",
|
|
"behavior", "behind", "being", "belief", "believe", "bell", "belong", "beloved", "below", "belt",
|
|
"bench", "bend", "beneath", "beneficial", "beneficiary", "benefit", "bent", "beside", "besides", "best",
|
|
"bet", "betray", "better", "between", "beyond", "bias", "bicycle", "bid", "big", "bike",
|
|
"bill", "billion", "bin", "bind", "biography", "biological", "biology", "bird", "birth", "birthday",
|
|
"biscuit", "bishop", "bit", "bite", "bitter", "black", "blade", "blame", "blank", "blanket",
|
|
"blast", "bleed", "bless", "blind", "blink", "block", "blond", "blood", "blow", "blue",
|
|
"board", "boast", "boat", "body", "boil", "bold", "bomb", "bombing", "bond", "bone",
|
|
"book", "boom", "boost", "boot", "border", "bore", "bored", "boring", "born", "borrow",
|
|
"boss", "both", "bother", "bottle", "bottom", "bounce", "bound", "boundary", "bow", "bowl",
|
|
"box", "boy", "boyfriend", "brain", "brake", "branch", "brand", "brave", "bread", "break",
|
|
"breakfast", "breast", "breath", "breathe", "breed", "brick", "bride", "bridge", "brief", "bright",
|
|
"brilliant", "bring", "broad", "broadcast", "broadcaster", "brother", "brown", "brush", "brutal", "bubble",
|
|
"buck", "bucket", "budget", "bug", "build", "building", "bulb", "bulk", "bull", "bullet",
|
|
"bulletin", "bunch", "burden", "bureau", "burn", "burst", "bury", "bus", "bush", "business",
|
|
"businessman", "busy", "but", "butter", "butterfly", "button", "buy", "buyer", "by", "bye",
|
|
"cabin", "cabinet", "cable", "cafe", "cake", "calculate", "calculation", "calendar", "call", "calm",
|
|
"camera", "camp", "campaign", "campus", "can", "canal", "cancel", "cancer", "candidate", "candle",
|
|
"candy", "canvas", "cap", "capability", "capable", "capacity", "capital", "captain", "capture", "car",
|
|
"carbon", "card", "care", "career", "careful", "carefully", "carpet", "carriage", "carrier", "carrot",
|
|
"carry", "cart", "cartoon", "carve", "case", "cash", "casino", "cast", "castle", "casual",
|
|
"cat", "catalogue", "catch", "category", "cattle", "cause", "caution", "cautious", "cave", "cease",
|
|
"ceiling", "celebrate", "celebration", "celebrity", "cell", "cellar", "cemetery", "cent", "central", "centre",
|
|
"century", "ceremony", "certain", "certainly", "certainty", "certificate", "chain", "chair", "chairman", "chalk",
|
|
"challenge", "chamber", "champion", "championship", "chance", "change", "channel", "chaos", "chapter", "character",
|
|
"characteristic", "characterize", "charge", "charity", "charm", "chart", "charter", "chase", "chat", "cheap",
|
|
"cheat", "check", "cheek", "cheer", "cheerful", "cheese", "chef", "chemical", "chemistry", "chest",
|
|
"chew", "chicken", "chief", "child", "childhood", "chip", "chocolate", "choice", "choir", "choose",
|
|
"chop", "chronic", "chunk", "church", "cigarette", "cinema", "circle", "circuit", "circulate", "circulation",
|
|
"circumstance", "cite", "citizen", "citizenship", "city", "civil", "civilian", "civilization", "claim", "clarify",
|
|
"clarity", "clash", "class", "classic", "classical", "classification", "classify", "classroom", "clause", "clay",
|
|
"clean", "clear", "clearly", "clerk", "clever", "click", "client", "cliff", "climate", "climb",
|
|
"cling", "clinic", "clinical", "clip", "clock", "close", "closed", "closely", "closet", "closure",
|
|
"cloth", "clothes", "clothing", "cloud", "club", "clue", "cluster", "coach", "coal", "coalition",
|
|
"coast", "coastal", "coat", "cocaine", "code", "coffee", "cognitive", "coin", "coincide", "coincidence",
|
|
"cold", "collaborate", "collapse", "collar", "colleague", "collect", "collection", "collective", "college", "colonial",
|
|
"colony", "color", "column", "columnist", "combat", "combination", "combine", "come", "comedy", "comfort",
|
|
"comfortable", "comic", "command", "commander", "commence", "comment", "commentary", "commentator", "commerce", "commercial",
|
|
"commission", "commissioner", "commit", "commitment", "committee", "commodity", "common", "commonly", "communicate", "communication",
|
|
"communist", "community", "companion", "company", "comparable", "comparative", "compare", "comparison", "compartment", "compassion",
|
|
"compatible", "compel", "compensate", "compensation", "compete", "competence", "competent", "competition", "competitive", "competitor",
|
|
"compile", "complain", "complaint", "complement", "complete", "completely", "completion", "complex", "complexity", "compliance",
|
|
"complicate", "complicated", "comply", "component", "compose", "composer", "composition", "compound", "comprehensive", "comprise",
|
|
"compromise", "compulsory", "compute", "computer", "conceal", "concede", "conceive", "concentrate", "concentration", "concept",
|
|
"conception", "concern", "concerned", "concert", "concession", "conclude", "conclusion", "concrete", "condemn", "condition",
|
|
"conduct", "conductor", "conference", "confess", "confession", "confidence", "confident", "configuration", "confine", "confirm",
|
|
"conflict", "conform", "confront", "confrontation", "confuse", "confusion", "congratulate", "congregation", "congress", "conjunction",
|
|
"connect", "connection", "conscience", "conscious", "consciousness", "consensus", "consent", "consequence", "consequently", "conservation",
|
|
"conservative", "conserve", "consider", "considerable", "considerably", "consideration", "consist", "consistency", "consistent", "consistently",
|
|
"consolidate", "conspiracy", "constant", "constantly", "constituency", "constitute", "constitution", "constitutional", "constraint", "construct",
|
|
"construction", "consult", "consultant", "consume", "consumer", "consumption", "contact", "contain", "container", "contemplate",
|
|
"contemporary", "contempt", "contend", "content", "contention", "contest", "context", "continent", "continuation", "continue",
|
|
"continuous", "contract", "contractor", "contradiction", "contrary", "contrast", "contribute", "contribution", "control", "controversial",
|
|
"controversy", "convenience", "convenient", "convention", "conventional", "conversation", "conversion", "convert", "convey", "convict",
|
|
"conviction", "convince", "convincing", "cook", "cooker", "cookie", "cool", "cooperate", "cooperative", "coordinate",
|
|
"coordinator", "cop", "cope", "copper", "copy", "copyright", "cord", "core", "corn", "corner",
|
|
"corporate", "corporation", "correct", "correction", "correctly", "correlate", "correlation", "correspond", "correspondence", "correspondent",
|
|
"corresponding", "corridor", "corrupt", "corruption", "cost", "costly", "costume", "cottage", "cotton", "cough",
|
|
"could", "council", "councillor", "counsel", "counselling", "counselor", "count", "counter", "counterpart", "country",
|
|
"countryside", "county", "coup", "couple", "courage", "course", "court", "courtesy", "cousin", "cover",
|
|
"coverage", "cow", "crack", "craft", "crash", "crawl", "crazy", "cream", "create", "creation",
|
|
"creative", "creature", "credibility", "credible", "credit", "crew", "crime", "criminal", "crisis", "criterion",
|
|
"critic", "critical", "criticism", "criticize", "crop", "cross", "crowd", "crowded", "crown", "crucial",
|
|
"cruel", "cruise", "crush", "cry", "crystal", "cue", "cult", "cultivate", "cultural", "culture",
|
|
"cup", "cupboard", "cure", "curiosity", "curious", "curl", "currency", "current", "currently", "curriculum",
|
|
"curtain", "curve", "cushion", "custom", "customer", "cut", "cute", "cutting", "cycle", "cynical",
|
|
"dad", "daily", "dairy", "dam", "damage", "damn", "damp", "dance", "dancer", "dancing",
|
|
"danger", "dangerous", "dare", "dark", "darkness", "data", "database", "date", "daughter", "dawn",
|
|
"day", "daylight", "dead", "deadline", "deadly", "deaf", "deal", "dealer", "dear", "death",
|
|
"debate", "debris", "debt", "debut", "decade", "December", "decent", "decide", "decision", "decisive",
|
|
"deck", "declaration", "declare", "decline", "decorate", "decoration", "decrease", "dedicate", "dedicated", "deduction",
|
|
"deed", "deem", "deep", "deeply", "deer", "default", "defeat", "defect", "defence", "defend",
|
|
"defendant", "defender", "defensive", "deficiency", "deficit", "define", "definite", "definitely", "definition", "defy",
|
|
"degree", "delay", "delegate", "delegation", "delete", "deliberate", "deliberately", "delicate", "delicious", "delight",
|
|
"delighted", "deliver", "delivery", "demand", "democracy", "democratic", "demon", "demonstrate", "demonstration", "denial",
|
|
"denounce", "dense", "density", "dentist", "deny", "depart", "department", "departure", "depend", "dependence",
|
|
"dependent", "depict", "deploy", "deposit", "depress", "depression", "deprive", "depth", "deputy", "derive",
|
|
"descend", "descent", "describe", "description", "desert", "deserve", "design", "designate", "designer", "desirable",
|
|
"desire", "desk", "desktop", "despair", "desperate", "desperately", "despite", "destination", "destroy", "destruction",
|
|
"detail", "detailed", "detain", "detect", "detection", "detective", "detector", "deteriorate", "determination", "determine",
|
|
"determined", "devastate", "develop", "development", "device", "devil", "devise", "devote", "diagnose", "diagnosis",
|
|
"diagram", "dial", "dialogue", "diameter", "diamond", "diary", "dictate", "dictator", "dictionary", "die",
|
|
"diet", "differ", "difference", "different", "differential", "differentiate", "differently", "difficult", "difficulty", "dig",
|
|
"digital", "dignity", "dilemma", "dimension", "diminish", "dine", "dinner", "dioxide", "dip", "diplomat",
|
|
"diplomatic", "direct", "direction", "directly", "director", "directory", "dirt", "dirty", "disability", "disabled",
|
|
"disagree", "disagreement", "disappear", "disappoint", "disappointed", "disappointment", "disaster", "disastrous", "disc", "discard",
|
|
"discharge", "discipline", "disclose", "discount", "discourage", "discourse", "discover", "discovery", "discretion", "discrimination",
|
|
"discuss", "discussion", "disease", "dish", "disk", "dismiss", "dismissal", "disorder", "display", "disposal",
|
|
"dispose", "dispute", "disrupt", "dissolve", "distance", "distant", "distinct", "distinction", "distinctive", "distinguish",
|
|
"distort", "distract", "distress", "distribute", "distribution", "district", "disturb", "disturbance", "dive", "diverse",
|
|
"diversity", "divert", "divide", "divine", "division", "divorce", "do", "dock", "doctor", "doctrine",
|
|
"document", "documentary", "dog", "dollar", "domain", "domestic", "dominant", "dominate", "donate", "donation",
|
|
"donor", "door", "dose", "dot", "double", "doubt", "doubtful", "down", "downstairs", "downtown",
|
|
"dozen", "draft", "drag", "drain", "drama", "dramatic", "dramatically", "draw", "drawer", "drawing",
|
|
"dream", "dress", "dressed", "drift", "drink", "drive", "driver", "driving", "drop", "drought",
|
|
"drown", "drug", "drum", "drunk", "dry", "dual", "duck", "due", "dull", "dumb",
|
|
"dump", "duplicate", "duration", "during", "dust", "duty", "duo", "each", "eager", "ear",
|
|
"early", "earn", "earnings", "earth", "earthquake", "ease", "easily", "east", "eastern", "easy",
|
|
"eat", "echo", "ecological", "economic", "economics", "economist", "economy", "edge", "edit", "edition",
|
|
"editor", "educate", "education", "educational", "effect", "effective", "effectively", "effectiveness", "efficiency", "efficient",
|
|
"effort", "egg", "ego", "eight", "eighteen", "eighty", "either", "elaborate", "elbow", "elderly",
|
|
"elect", "election", "electoral", "electric", "electrical", "electricity", "electron", "electronic", "electronics", "elegant",
|
|
"element", "elementary", "elephant", "elevate", "eleven", "eligible", "eliminate", "elite", "else", "elsewhere",
|
|
"email", "embark", "embarrassed", "embassy", "embody", "embrace", "emerge", "emergency", "emerging", "emission",
|
|
"emotion", "emotional", "emphasis", "emphasize", "empire", "employ", "employee", "employer", "employment", "empty",
|
|
"enable", "enclose", "encounter", "encourage", "encouragement", "encouraging", "end", "ending", "endless", "endorse",
|
|
"endure", "enemy", "energy", "enforce", "enforcement", "engage", "engaged", "engagement", "engine", "engineer",
|
|
"engineering", "enhance", "enjoy", "enjoyable", "enjoyment", "enormous", "enough", "enquire", "enquiry", "enrich",
|
|
"enroll", "ensue", "ensure", "enter", "enterprise", "entertain", "entertainment", "enthusiasm", "enthusiastic", "entire",
|
|
"entirely", "entitle", "entity", "entrance", "entrepreneur", "entry", "envelope", "environment", "environmental", "epidemic",
|
|
"episode", "equal", "equality", "equally", "equation", "equip", "equipment", "equity", "equivalent", "era",
|
|
"erect", "error", "erupt", "escalate", "escape", "especially", "essay", "essence", "essential", "essentially",
|
|
"establish", "establishment", "estate", "estimate", "eternal", "ethic", "ethical", "ethnic", "euro", "evacuate",
|
|
"evaluate", "evaluation", "even", "evening", "event", "eventually", "ever", "every", "everybody", "everyday",
|
|
"everyone", "everything", "everywhere", "evidence", "evident", "evil", "evoke", "evolution", "evolve", "exact",
|
|
"exactly", "exaggerate", "exam", "examination", "examine", "example", "exceed", "excellence", "excellent", "except",
|
|
"exception", "exceptional", "excess", "excessive", "exchange", "excite", "excited", "excitement", "exciting", "exclude",
|
|
"exclusion", "exclusive", "exclusively", "excuse", "execute", "execution", "executive", "exercise", "exert", "exhaust",
|
|
"exhibit", "exhibition", "exile", "exist", "existence", "exit", "exotic", "expand", "expansion", "expect",
|
|
"expectation", "expedition", "expenditure", "expense", "expensive", "experience", "experienced", "experiment", "experimental", "expert",
|
|
"expertise", "expire", "explain", "explanation", "explicit", "explode", "exploit", "exploration", "explore", "explosion",
|
|
"export", "expose", "exposure", "express", "expression", "extend", "extension", "extensive", "extensively", "extent",
|
|
"external", "extra", "extract", "extraordinary", "extreme", "extremely", "extremist", "eye", "fabric", "face",
|
|
"facilitate", "facility", "fact", "faction", "factor", "factory", "faculty", "fade", "fail", "failure",
|
|
"fair", "fairly", "faith", "fake", "fall", "false", "fame", "familiar", "family", "famous",
|
|
"fan", "fancy", "fantastic", "fantasy", "far", "fare", "farm", "farmer", "farming", "fascinate",
|
|
"fascinating", "fashion", "fashionable", "fast", "fasten", "fat", "fatal", "fate", "father", "fault",
|
|
"favor", "favorable", "favorite", "favour", "favourite", "fear", "feat", "feather", "feature", "February",
|
|
"federal", "fee", "feed", "feedback", "feeding", "feel", "feeling", "fellow", "female", "fence",
|
|
"festival", "fever", "few", "fiber", "fiction", "field", "fierce", "fifteen", "fifth", "fifty",
|
|
"fight", "fighter", "fighting", "figure", "file", "fill", "film", "filter", "final", "finally",
|
|
"finance", "financial", "find", "finding", "fine", "finger", "finish", "fire", "firefighter", "firework",
|
|
"firm", "firmly", "first", "firstly", "fiscal", "fish", "fisherman", "fishing", "fit", "fitness",
|
|
"five", "fix", "fixed", "flag", "flame", "flash", "flat", "flavor", "flaw", "flee",
|
|
"fleet", "flesh", "flexibility", "flexible", "flight", "float", "flood", "floor", "flour", "flow",
|
|
"flower", "flu", "fluid", "fly", "focus", "fold", "folding", "folk", "follow", "following",
|
|
"fond", "food", "fool", "foot", "football", "for", "forbid", "force", "forecast", "foreign",
|
|
"foreigner", "forest", "forever", "forge", "forget", "forgive", "fork", "form", "formal", "format",
|
|
"formation", "former", "formerly", "formula", "forth", "forthcoming", "fortnight", "fortunate", "fortunately", "fortune",
|
|
"forty", "forum", "forward", "fossil", "foster", "found", "foundation", "founder", "four", "fourteen",
|
|
"fourth", "fraction", "fragile", "fragment", "frame", "framework", "franchise", "frankly", "fraud", "free",
|
|
"freedom", "freely", "freeze", "frequency", "frequent", "frequently", "fresh", "Friday", "fridge", "friend",
|
|
"friendly", "friendship", "frighten", "frightened", "frightening", "frog", "from", "front", "frozen", "fruit",
|
|
"frustrate", "frustration", "fry", "fuel", "fulfil", "full", "full-time", "fully", "fun", "function",
|
|
"functional", "fund", "fundamental", "fundamentally", "funding", "funeral", "funny", "fur", "furniture", "further",
|
|
"furthermore", "future", "gain", "gallery", "gallon", "game", "gang", "gap", "garage", "garden",
|
|
"gas", "gate", "gather", "gathering", "gay", "gaze", "gear", "gender", "gene", "general",
|
|
"generally", "generate", "generation", "generous", "genetic", "genius", "genre", "gentle", "gentleman", "gently",
|
|
"genuine", "genuinely", "geography", "gesture", "get", "ghost", "giant", "gift", "gig", "girl",
|
|
"girlfriend", "give", "glad", "glance", "glass", "glimpse", "global", "globally", "gloom", "glorious",
|
|
"glory", "glove", "go", "goal", "god", "gold", "golden", "golf", "good", "goodbye",
|
|
"goodness", "goods", "gorgeous", "govern", "governance", "government", "governor", "grab", "grace", "grade",
|
|
"gradually", "graduate", "grain", "grand", "grandfather", "grandmother", "grandparent", "grant", "graph", "graphics",
|
|
"grasp", "grass", "grateful", "grave", "gravity", "great", "greatly", "green", "greenhouse", "greet",
|
|
"grey", "grid", "grief", "grin", "grind", "grip", "grocery", "gross", "ground", "group",
|
|
"grow", "growth", "guarantee", "guard", "guardian", "guerrilla", "guess", "guest", "guidance", "guide",
|
|
"guideline", "guilt", "guilty", "guitar", "gun", "gut", "guy", "gym", "habit", "habitat",
|
|
"hail", "hair", "half", "halfway", "hall", "halt", "hand", "handful", "handle", "handsome",
|
|
"handy", "hang", "happen", "happily", "happiness", "happy", "harassment", "harbor", "harbour", "hard",
|
|
"hardly", "hardware", "harm", "harmful", "harmony", "harsh", "harvest", "haste", "hat", "hate",
|
|
"hatred", "haul", "have", "have to", "hay", "hazard", "he", "head", "headache", "headline",
|
|
"headquarters", "heal", "health", "healthcare", "healthy", "hear", "hearing", "heart", "heat", "heating",
|
|
"heaven", "heavily", "heavy", "heel", "height", "heighten", "helicopter", "hell", "hello", "helmet",
|
|
"help", "helpful", "hence", "her", "herb", "herd", "here", "heritage", "hero", "hers",
|
|
"herself", "hesitate", "hey", "hi", "hidden", "hide", "hierarchy", "high", "highlight", "highly",
|
|
"highway", "hilarious", "hill", "him", "himself", "hint", "hip", "hire", "his", "historian",
|
|
"historic", "historical", "history", "hit", "hobby", "hockey", "hold", "holder", "holding", "hole",
|
|
"holiday", "hollow", "holy", "home", "homeland", "homeless", "homework", "honest", "honestly", "honey",
|
|
"honor", "honour", "hook", "hope", "hopeful", "hopefully", "horizon", "horn", "horrible", "horror",
|
|
"horse", "hospital", "host", "hostage", "hostile", "hostility", "hot", "hotel", "hour", "house",
|
|
"household", "housewife", "housing", "how", "however", "huge", "human", "humanity", "humble", "humor",
|
|
"humour", "hundred", "hunger", "hungry", "hunt", "hunting", "hurry", "hurt", "husband", "hut",
|
|
"hypothesis", "ice", "ice cream", "icon", "idea", "ideal", "identical", "identification", "identify", "identity",
|
|
"ideological", "ideology", "idiot", "if", "ignore", "ill", "illegal", "illness", "illusion", "illustrate",
|
|
"illustration", "image", "imagery", "imaginary", "imagination", "imagine", "immediate", "immediately", "immense", "immigrant",
|
|
"immigration", "imminent", "immune", "impact", "impatient", "implement", "implementation", "implication", "imply", "import",
|
|
"importance", "important", "impose", "impossible", "impress", "impression", "impressive", "imprison", "imprisonment", "improve",
|
|
"improvement", "in", "inability", "inadequate", "incentive", "inch", "incidence", "incident", "inclined", "include",
|
|
"including", "inclusion", "income", "incorporate", "increase", "increasingly", "incredible", "incredibly", "incur", "indeed",
|
|
"independence", "independent", "index", "indicate", "indication", "indicator", "indigenous", "indirect", "individual", "indoor",
|
|
"indoors", "induce", "indulge", "industrial", "industry", "inequality", "inevitable", "inevitably", "infant", "infect",
|
|
"infection", "infinite", "inflation", "inflict", "influence", "influential", "info", "inform", "informal", "information",
|
|
"infrastructure", "ingredient", "inhabitant", "inherent", "inherit", "inhibit", "initial", "initially", "initiate", "initiative",
|
|
"inject", "injection", "injure", "injured", "injury", "inmate", "inner", "innocent", "innovation", "innovative",
|
|
"input", "inquest", "inquiry", "insect", "insert", "inside", "insider", "insight", "insist", "inspect",
|
|
"inspection", "inspector", "inspiration", "inspire", "install", "installation", "instance", "instant", "instantly", "instead",
|
|
"instinct", "institute", "institution", "institutional", "instruct", "instruction", "instructor", "instrument", "instrumental", "insufficient",
|
|
"insult", "insurance", "intact", "intake", "integral", "integrate", "integrated", "integration", "integrity", "intellectual",
|
|
"intelligence", "intelligent", "intend", "intense", "intensely", "intensify", "intensity", "intensive", "intent", "intention",
|
|
"interact", "interaction", "interactive", "interest", "interested", "interesting", "interface", "interfere", "interference", "interim",
|
|
"interior", "intermediate", "internal", "international", "internet", "interpret", "interpretation", "interrupt", "interval", "intervene",
|
|
"intervention", "interview", "intimate", "into", "intriguing", "introduce", "introduction", "invade", "invasion", "invent",
|
|
"invention", "invest", "investigate", "investigation", "investigator", "investment", "investor", "invisible", "invitation", "invite",
|
|
"invoke", "involve", "involved", "involvement", "iron", "ironically", "irony", "irrelevant", "island", "isolate",
|
|
"isolated", "isolation", "issue", "it", "item", "its", "itself", "jacket", "jail", "jam",
|
|
"January", "jazz", "jeans", "jet", "jewellery", "job", "join", "joint", "joke", "journal",
|
|
"journalism", "journalist", "journey", "joy", "judge", "judgement", "judgment", "judicial", "juice", "July",
|
|
"jump", "junction", "June", "junior", "jurisdiction", "jury", "just", "justice", "justification", "justify",
|
|
"keen", "keep", "key", "keyboard", "kick", "kid", "kidnap", "kidney", "kill", "killing",
|
|
"kilometer", "kilometre", "kind", "king", "kingdom", "kiss", "kit", "kitchen", "knee", "knife",
|
|
"knock", "know", "knowledge", "lab", "label", "laboratory", "labour", "lack", "lad", "ladder",
|
|
"lady", "lake", "lamp", "land", "landing", "landlord", "landmark", "landscape", "lane", "language",
|
|
"lap", "laptop", "large", "largely", "laser", "last", "late", "lately", "later", "latter",
|
|
"laugh", "laughter", "launch", "law", "lawn", "lawsuit", "lawyer", "lay", "layer", "layout",
|
|
"lazy", "lead", "leader", "leadership", "leading", "leaf", "leaflet", "league", "leak", "lean",
|
|
"leap", "learn", "learning", "least", "leather", "leave", "lecture", "left", "leg", "legacy",
|
|
"legal", "legally", "legend", "legendary", "legislation", "legislative", "legislator", "legislature", "legitimate", "leisure",
|
|
"lemon", "lend", "length", "lengthy", "lens", "lesbian", "less", "lesser", "lesson", "let",
|
|
"lethal", "letter", "level", "liability", "liable", "liaison", "liberal", "liberation", "liberty", "library",
|
|
"lie", "life", "lifelong", "lifestyle", "lifetime", "lift", "light", "lighting", "like", "likelihood",
|
|
"likely", "likewise", "limb", "limit", "limitation", "limited", "line", "linear", "linger", "link",
|
|
"lion", "lip", "liquid", "list", "listen", "listener", "listing", "literacy", "literal", "literally",
|
|
"literary", "literature", "litre", "litter", "little", "live", "lively", "liver", "living", "load",
|
|
"loan", "lobby", "local", "locate", "location", "lock", "log", "logic", "logical", "logo",
|
|
"lonely", "long", "long-term", "look", "loom", "loop", "loose", "lord", "lorry", "lose",
|
|
"loss", "lost", "lot", "lottery", "loud", "loudly", "love", "lovely", "lover", "low",
|
|
"lower", "loyal", "loyalty", "luck", "lucky", "lunch", "lung", "luxury", "lyric", "machine",
|
|
"machinery", "mad", "magazine", "magic", "magical", "magistrate", "magnetic", "magnificent", "magnitude", "mail",
|
|
"main", "mainland", "mainly", "mainstream", "maintain", "maintenance", "major", "majority", "make", "make-up",
|
|
"maker", "makeup", "male", "mall", "man", "manage", "management", "manager", "managerial", "mandate",
|
|
"mandatory", "manifest", "manipulate", "mankind", "manner", "manufacture", "manufacturer", "manufacturing", "manuscript", "many",
|
|
"map", "marathon", "marble", "march", "March", "margin", "marginal", "marine", "mark", "market",
|
|
"marketing", "marketplace", "marriage", "married", "marry", "martial", "mask", "mass", "massacre", "massive",
|
|
"master", "match", "matching", "mate", "material", "mathematical", "mathematics", "maths", "matter", "mature",
|
|
"maximize", "maximum", "may", "maybe", "mayor", "me", "meal", "mean", "meaning", "meaningful",
|
|
"means", "meantime", "meanwhile", "measure", "measurement", "meat", "mechanic", "mechanical", "mechanism", "medal",
|
|
"media", "medical", "medication", "medicine", "medieval", "medium", "meet", "meeting", "melody", "melt",
|
|
"member", "membership", "memo", "memoir", "memorable", "memorial", "memory", "mental", "mentality", "mention",
|
|
"mentor", "menu", "merchant", "mercy", "mere", "merely", "merge", "merger", "merit", "mess",
|
|
"message", "metal", "metaphor", "method", "methodology", "metre", "middle", "midnight", "midst", "might",
|
|
"migration", "mild", "mile", "military", "militia", "milk", "mill", "million", "mind", "mine",
|
|
"miner", "mineral", "minimal", "minimize", "minimum", "mining", "minister", "ministry", "minor", "minority",
|
|
"minute", "miracle", "mirror", "miserable", "misery", "mislead", "miss", "missile", "missing", "mission",
|
|
"mist", "mistake", "mix", "mixed", "mixture", "mob", "mobile", "mobility", "mobilize", "mode",
|
|
"model", "moderate", "modern", "modest", "modification", "modify", "moment", "momentum", "Monday", "money",
|
|
"monitor", "monk", "monkey", "monopoly", "monster", "month", "monthly", "monument", "mood", "moon",
|
|
"moral", "morality", "more", "moreover", "morning", "mortgage", "mosque", "most", "mostly", "mother",
|
|
"motion", "motivate", "motivation", "motive", "motor", "motorcycle", "motorist", "mount", "mountain", "mouse",
|
|
"mouth", "move", "movement", "movie", "moving", "much", "mud", "multiple", "multiply", "mom",
|
|
"municipal", "murder", "muscle", "museum", "music", "musical", "musician", "must", "mutual", "my",
|
|
"myself", "mysterious", "mystery", "myth", "nail", "naked", "name", "namely", "narrative", "narrow",
|
|
"nasty", "nation", "national", "nationwide", "native", "natural", "naturally", "nature", "naval", "navigation",
|
|
"near", "nearby", "nearly", "neat", "necessarily", "necessary", "necessity", "neck", "need", "needle",
|
|
"negative", "neglect", "negotiate", "negotiation", "neighbor", "neighborhood", "neighbour", "neighbourhood", "neither", "nerve",
|
|
"nervous", "nest", "net", "network", "neutral", "never", "nevertheless", "new", "newly", "news",
|
|
"newsletter", "newspaper", "next", "next to", "nice", "niche", "night", "nightmare", "nine", "nineteen",
|
|
"ninety", "no", "noble", "nobody", "nod", "noise", "noisy", "nominate", "nomination", "none",
|
|
"nonetheless", "nonsense", "noon", "nor", "norm", "normal", "normally", "north", "northern", "nose",
|
|
"not", "notable", "notably", "note", "notebook", "nothing", "notice", "notify", "notion", "notorious",
|
|
"novel", "novelist", "November", "now", "nowadays", "nowhere", "nuclear", "number", "numerous", "nurse",
|
|
"nursery", "nursing", "nut", "nutrition", "o'clock", "obesity", "obey", "object", "objection", "objective",
|
|
"obligation", "oblige", "observation", "observe", "observer", "obsess", "obsession", "obstacle", "obtain", "obvious",
|
|
"obviously", "occasion", "occasional", "occasionally", "occupation", "occupy", "occur", "occurrence", "ocean", "October",
|
|
"odd", "odds", "of", "off", "offence", "offend", "offender", "offensive", "offer", "offering",
|
|
"office", "officer", "official", "offspring", "often", "oh", "oil", "ok", "okay", "old",
|
|
"old-fashioned", "on", "once", "one", "ongoing", "onion", "online", "only", "onto", "open",
|
|
"opening", "openly", "opera", "operate", "operation", "operational", "operator", "opinion", "opponent", "opportunity",
|
|
"oppose", "opposed", "opposite", "opposition", "opt", "optical", "optimism", "optimistic", "option", "or",
|
|
"oral", "orange", "orchestra", "order", "ordinary", "organ", "organic", "organization", "organizational", "organize",
|
|
"organized", "organizer", "orientation", "origin", "original", "originally", "originate", "orthodox", "other", "otherwise",
|
|
"ought to", "our", "ours", "ourselves", "out", "outbreak", "outcome", "outdoor", "outdoors", "outer",
|
|
"outfit", "outing", "outlet", "outline", "outlook", "output", "outrage", "outside", "outsider", "outstanding",
|
|
"oven", "over", "overall", "overcome", "overlook", "overnight", "overseas", "oversee", "overturn", "overwhelm",
|
|
"overwhelming", "owe", "own", "owner", "ownership", "oxygen", "pace", "pack", "package", "packet",
|
|
"pad", "page", "pain", "painful", "paint", "painter", "painting", "pair", "palace", "pale",
|
|
"palm", "pan", "panel", "panic", "pant", "paper", "parade", "paragraph", "parallel", "parameter",
|
|
"parent", "parental", "parish", "park", "parking", "parliament", "parliamentary", "part", "partial", "partially",
|
|
"participant", "participate", "participation", "particle", "particular", "particularly", "partly", "partner", "partnership", "party",
|
|
"pass", "passage", "passenger", "passion", "passionate", "passive", "passport", "password", "past", "pasture",
|
|
"pat", "patch", "patent", "path", "patience", "patient", "patrol", "patron", "pattern", "pause",
|
|
"pay", "payment", "peace", "peaceful", "peak", "peasant", "peculiar", "peer", "pen", "penalty",
|
|
"pencil", "penny", "pension", "people", "pepper", "per", "perceive", "percent", "percentage", "perception",
|
|
"perfect", "perfectly", "perform", "performance", "performer", "perhaps", "period", "permanent", "permanently", "permission",
|
|
"permit", "persist", "persistent", "person", "personal", "personality", "personally", "personnel", "perspective", "persuade",
|
|
"pet", "petition", "gasoline", "petrol", "petty", "phase", "phenomenon", "philosopher", "philosophical", "philosophy",
|
|
"phone", "photo", "photograph", "photographer", "photography", "phrase", "physical", "physically", "physician", "physics",
|
|
"piano", "pick", "picture", "pie", "piece", "pig", "pile", "pill", "pillar", "pillow",
|
|
"pilot", "pin", "pink", "pioneer", "pipe", "pipeline", "pirate", "pit", "pitch", "pity",
|
|
"place", "placement", "plain", "plan", "plane", "planet", "planning", "plant", "plasma", "plastic",
|
|
"plate", "platform", "play", "player", "plea", "plead", "pleasant", "please", "pleased", "pleasure",
|
|
"pledge", "plenty", "plot", "plug", "plunge", "plus", "pocket", "poem", "poet", "poetry",
|
|
"point", "pointed", "poison", "poisonous", "pole", "police", "policeman", "policy", "polite", "political",
|
|
"politician", "politics", "poll", "pollution", "pond", "pool", "poor", "pop", "popular", "popularity",
|
|
"population", "port", "portfolio", "portion", "portrait", "portray", "pose", "position", "positive", "possess",
|
|
"possession", "possibility", "possible", "possibly", "post", "poster", "postpone", "pot", "potato", "potential",
|
|
"potentially", "pound", "pour", "poverty", "powder", "power", "powerful", "practical", "practically", "practice",
|
|
"practise", "practitioner", "praise", "pray", "prayer", "preach", "precaution", "precede", "precedent", "precious",
|
|
"precise", "precisely", "precision", "predator", "predecessor", "predict", "predictable", "prediction", "predominantly", "prefer",
|
|
"preference", "pregnancy", "pregnant", "prejudice", "preliminary", "premier", "premise", "premium", "preparation", "prepare",
|
|
"prepared", "prescribe", "prescription", "presence", "present", "presentation", "presently", "preserve", "presidency", "president",
|
|
"presidential", "press", "pressure", "prestigious", "presumably", "presume", "pretend", "pretty", "prevail", "prevalence",
|
|
"prevent", "prevention", "previous", "previously", "prey", "price", "pride", "priest", "primarily", "primary",
|
|
"prime", "prince", "princess", "principal", "principle", "print", "printer", "printing", "prior", "priority",
|
|
"prison", "prisoner", "privacy", "private", "privately", "privilege", "prize", "probability", "probable", "probably",
|
|
"probe", "problem", "procedure", "proceed", "proceeding", "process", "processing", "processor", "proclaim", "produce",
|
|
"producer", "product", "production", "productive", "productivity", "profession", "professional", "professor", "profile", "profit",
|
|
"profitable", "profound", "programming", "progress", "progressive", "prohibit", "project", "projection", "prominent", "promise",
|
|
"promising", "promote", "promotion", "prompt", "pronounce", "pronounced", "proof", "propaganda", "proper", "properly",
|
|
"property", "proportion", "proposal", "propose", "proposition", "prosecute", "prosecution", "prosecutor", "prospect", "prospective",
|
|
"prosperity", "protect", "protection", "protective", "protein", "protest", "protocol", "proud", "prove", "provide",
|
|
"province", "provincial", "provision", "provoke", "psychiatric", "psychological", "psychologist", "psychology", "pub", "public",
|
|
"publication", "publicity", "publicly", "publish", "publisher", "publishing", "pull", "pulse", "pump", "punch",
|
|
"punish", "punishment", "punk", "pupil", "purchase", "pure", "purely", "purple", "purpose", "purse",
|
|
"pursue", "pursuit", "push", "put", "puzzle", "qualification", "qualified", "qualify", "quality", "quantity",
|
|
"quarter", "queen", "query", "quest", "question", "questionnaire", "queue", "quick", "quickly", "quiet",
|
|
"quietly", "quit", "quite", "quota", "quotation", "quote", "rabbit", "race", "racial", "racing",
|
|
"racism", "racist", "radar", "radiation", "radical", "radio", "rage", "raid", "rail", "railway",
|
|
"rain", "raise", "rally", "random", "range", "rank", "ranking", "rape", "rapid", "rapidly",
|
|
"rare", "rarely", "rat", "rate", "rather", "rating", "ratio", "rational", "raw", "ray",
|
|
"reach", "react", "reaction", "read", "reader", "readily", "reading", "ready", "real", "realistic",
|
|
"reality", "realization", "realize", "really", "realm", "rear", "reason", "reasonable", "reasonably", "reasoning",
|
|
"reassure", "rebel", "rebellion", "rebuild", "recall", "receipt", "receive", "receiver", "recent", "recently",
|
|
"reception", "recession", "recipe", "recipient", "reckon", "recognition", "recognize", "recommend", "recommendation", "reconstruction",
|
|
"record", "recording", "recount", "recover", "recovery", "recruit", "recruitment", "recycle", "red", "reduce",
|
|
"reduction", "refer", "referee", "reference", "referendum", "reflect", "reflection", "reform", "refuge", "refugee",
|
|
"refusal", "refuse", "regain", "regard", "regardless", "regime", "region", "regional", "register", "registration",
|
|
"regret", "regular", "regularly", "regulate", "regulation", "regulator", "regulatory", "rehabilitation", "reign", "reinforce",
|
|
"reject", "rejection", "relate", "related", "relation", "relationship", "relative", "relatively", "relax", "relaxed",
|
|
"relaxing", "release", "relevance", "relevant", "reliability", "reliable", "relief", "relieve", "religion", "religious",
|
|
"reluctant", "rely", "remain", "remainder", "remains", "remark", "remarkable", "remarkably", "remedy", "remember",
|
|
"remind", "reminder", "remote", "removal", "remove", "renaissance", "render", "renew", "rent", "repair",
|
|
"repeat", "repeatedly", "replace", "replacement", "reply", "report", "reporter", "reporting", "represent", "representation",
|
|
"representative", "reproduce", "reproduction", "republic", "reputation", "request", "require", "requirement", "rescue", "research",
|
|
"researcher", "resemble", "reservation", "reserve", "reside", "residence", "resident", "residential", "residue", "resign",
|
|
"resignation", "resist", "resistance", "resolution", "resolve", "resort", "resource", "respect", "respective", "respectively",
|
|
"respond", "response", "responsibility", "responsible", "rest", "restaurant", "restoration", "restore", "restraint", "restrict",
|
|
"restriction", "result", "resume", "retail", "retain", "retire", "retired", "retirement", "retreat", "retrieve",
|
|
"return", "reveal", "revelation", "revenge", "revenue", "reverse", "review", "revise", "revision", "revival",
|
|
"revive", "revolution", "revolutionary", "reward", "rhetoric", "rhythm", "rice", "rich", "rid", "ride",
|
|
"ridiculous", "rifle", "right", "ring", "riot", "rip", "rise", "risk", "risky", "ritual",
|
|
"rival", "river", "road", "rob", "robbery", "robot", "robust", "rock", "rocket", "rod",
|
|
"role", "roll", "romance", "romantic", "roof", "room", "root", "rope", "rose", "rotate",
|
|
"rotation", "rough", "roughly", "round", "route", "routine", "row", "royal", "rub", "rubber",
|
|
"rubbish", "rude", "rugby", "ruin", "rule", "ruler", "ruling", "rumor", "rumour", "run",
|
|
"runner", "running", "rural", "rush", "sack", "sacred", "sacrifice", "sad", "sadly", "safe",
|
|
"safety", "sail", "sailor", "saint", "sake", "salad", "salary", "sale", "salt", "same",
|
|
"sample", "sanction", "sand", "sandwich", "satellite", "satisfaction", "satisfied", "satisfy", "sauce", "save",
|
|
"saving", "say", "scale", "scan", "scandal", "scare", "scared", "scary", "scattered", "scenario",
|
|
"scene", "skeptical", "schedule", "scheme", "scholar", "scholarship", "school", "science", "scientific", "scientist",
|
|
"scope", "score", "scratch", "scream", "screen", "screening", "screw", "script", "scrutiny", "sculpture",
|
|
"sea", "seal", "search", "season", "seat", "second", "secondary", "secondly", "secret", "secretary",
|
|
"section", "sector", "secular", "secure", "security", "see", "seed", "seek", "seem", "segment",
|
|
"seize", "seldom", "select", "selection", "selective", "self", "sell", "seminar", "senator", "send",
|
|
"senior", "sensation", "sense", "sensible", "sensitive", "sensitivity", "sentence", "sentiment", "separate", "separation",
|
|
"September", "sequence", "serial", "series", "serious", "seriously", "servant", "serve", "service", "session",
|
|
"set", "setting", "settle", "settlement", "settler", "seven", "seventeen", "seventy", "several", "severe",
|
|
"severely", "sex", "sexual", "sexuality", "sexy", "shade", "shadow", "shake", "shall", "shallow",
|
|
"shame", "shape", "share", "shareholder", "sharp", "shatter", "she", "shed", "sheep", "sheer",
|
|
"sheet", "shelf", "shell", "shelter", "shift", "shine", "shiny", "ship", "shipping", "shirt",
|
|
"shock", "shocked", "shocking", "shoe", "shoot", "shooting", "shop", "shopping", "shore", "short",
|
|
"short-term", "shortage", "shortly", "shot", "should", "shoulder", "shout", "show", "shower", "shrink",
|
|
"shrug", "shut", "shy", "sibling", "sick", "side", "sigh", "sight", "sign", "signal",
|
|
"signature", "significance", "significant", "significantly", "silence", "silent", "silk", "silly", "silver", "similar",
|
|
"similarity", "similarly", "simple", "simply", "simulate", "simulation", "simultaneously", "sin", "since", "sincere",
|
|
"sing", "singer", "single", "sink", "sir", "sister", "sit", "site", "situate", "situation",
|
|
"six", "sixteen", "sixty", "size", "sketch", "ski", "skiing", "skill", "skilled", "skin",
|
|
"skip", "skirt", "skull", "sky", "slam", "slap", "slash", "slave", "slavery", "sleep",
|
|
"slice", "slide", "slight", "slightly", "slip", "slogan", "slope", "slot", "slow", "slowly",
|
|
"small", "smart", "smash", "smell", "smile", "smoke", "smoking", "smooth", "snake", "snap",
|
|
"snow", "so", "so-called", "soak", "soap", "soar", "soccer", "social", "socialist", "society",
|
|
"sock", "soft", "software", "soil", "solar", "soldier", "sole", "solely", "solicitor", "solid",
|
|
"solidarity", "solo", "solution", "solve", "some", "somebody", "somehow", "someone", "something", "sometimes",
|
|
"somewhat", "somewhere", "son", "song", "soon", "sophisticated", "sorry", "sort", "soul", "sound",
|
|
"soup", "source", "south", "southern", "sovereignty", "space", "spare", "spark", "speak", "speaker",
|
|
"special", "specialist", "specialize", "specialized", "species", "specific", "specifically", "specification", "specify", "specimen",
|
|
"spectacle", "spectacular", "spectator", "spectrum", "speculate", "speculation", "speech", "speed", "spell", "spelling",
|
|
"spend", "spending", "sphere", "spice", "spider", "spill", "spin", "spine", "spirit", "spiritual",
|
|
"spit", "spite", "split", "spoil", "spoken", "spokesman", "spokesperson", "spokeswoman", "sponsor", "sponsorship",
|
|
"spoon", "sport", "sporting", "spot", "spotlight", "spouse", "spread", "spring", "spy", "squad",
|
|
"square", "squeeze", "stab", "stability", "stabilize", "stable", "stadium", "staff", "stage", "stagger",
|
|
"stair", "stake", "stall", "stamp", "stance", "stand", "standard", "standing", "star", "stare",
|
|
"stark", "start", "starve", "state", "statement", "station", "statistical", "statistics", "statue", "status",
|
|
"statute", "stay", "steadily", "steady", "steal", "steam", "steel", "steep", "steer", "stem",
|
|
"step", "stereotype", "stick", "sticky", "stiff", "still", "stimulate", "stimulus", "stir", "stock",
|
|
"stomach", "stone", "stool", "stop", "storage", "store", "storm", "story", "straight", "straightforward",
|
|
"strain", "strand", "strange", "stranger", "strategic", "strategy", "straw", "stream", "street", "strength",
|
|
"strengthen", "stress", "stretch", "strict", "strictly", "strike", "striking", "string", "strip", "strive",
|
|
"stroke", "strong", "strongly", "structural", "structure", "struggle", "student", "studio", "study", "stuff",
|
|
"stumble", "stun", "stunning", "stupid", "style", "subject", "submission", "submit", "subscriber", "subscription",
|
|
"subsequent", "subsequently", "subsidiary", "subsidy", "substance", "substantial", "substantially", "substitute", "substitution", "subtle",
|
|
"suburb", "suburban", "succeed", "success", "successful", "successfully", "succession", "successive", "successor", "such",
|
|
"suck", "sudden", "suddenly", "sue", "suffer", "suffering", "sufficient", "sufficiently", "sugar", "suggest",
|
|
"suggestion", "suicide", "suit", "suitable", "suite", "sum", "summarize", "summary", "summer", "summit",
|
|
"sun", "Sunday", "super", "superb", "superior", "supermarket", "supervise", "supervision", "supervisor", "supplement",
|
|
"supply", "support", "supporter", "supportive", "suppose", "supposedly", "suppress", "supreme", "sure", "surely",
|
|
"surface", "surge", "surgeon", "surgery", "surgical", "surplus", "surprise", "surprised", "surprising", "surprisingly",
|
|
"surrender", "surround", "surrounding", "surveillance", "survey", "survival", "survive", "survivor", "suspect", "suspend",
|
|
"suspension", "suspicion", "suspicious", "sustain", "sustainable", "swallow", "swear", "sweat", "sweater", "sweep",
|
|
"sweet", "swell", "swim", "swimming", "swing", "switch", "sword", "symbol", "symbolic", "sympathetic",
|
|
"sympathy", "symptom", "syndrome", "synthesis", "system", "systematic", "table", "tablet", "tackle", "tactic",
|
|
"tag", "tail", "take", "tale", "talent", "talented", "talk", "tall", "tank", "tap",
|
|
"tape", "target", "task", "taste", "tax", "taxi", "taxpayer", "tea", "teach", "teacher",
|
|
"teaching", "team", "tear", "technical", "technique", "technological", "technology", "teenage", "teenager", "telecommunications",
|
|
"telephone", "telescope", "television", "tell", "temperature", "temple", "temporarily", "temporary", "tempt", "ten",
|
|
"tenant", "tend", "tendency", "tender", "tennis", "tension", "tent", "tenure", "term", "terminal",
|
|
"terminate", "terms", "terrain", "terrible", "terribly", "terrific", "terrify", "territory", "terror", "terrorism",
|
|
"terrorist", "test", "testify", "testimony", "testing", "text", "textbook", "texture", "than", "thank",
|
|
"thanks", "that", "the", "theatre", "theatrical", "their", "theirs", "them", "theme", "themselves",
|
|
"then", "theology", "theoretical", "theory", "therapist", "therapy", "there", "thereafter", "thereby", "therefore",
|
|
"thesis", "they", "thick", "thief", "thin", "thing", "think", "thinking", "third", "thirsty",
|
|
"thirteen", "thirty", "this", "thorough", "thoroughly", "though", "thought", "thousand", "thread", "threat",
|
|
"threaten", "three", "threshold", "thrive", "throat", "through", "throughout", "throw", "thumb", "Thursday",
|
|
"thus", "ticket", "tide", "tidy", "tie", "tight", "tighten", "till", "timber", "time",
|
|
"timely", "timing", "tin", "tiny", "tip", "tired", "tissue", "title", "to", "tobacco",
|
|
"today", "toe", "together", "toilet", "tolerance", "tolerate", "toll", "tomato", "tomorrow", "ton",
|
|
"tone", "tongue", "tonight", "tonne", "too", "tool", "tooth", "top", "topic", "torture",
|
|
"toss", "total", "totally", "touch", "tough", "tour", "tourism", "tourist", "tournament", "toward",
|
|
"towards", "tower", "town", "toxic", "toy", "trace", "track", "trade", "trademark", "trading",
|
|
"tradition", "traditional", "traffic", "tragedy", "tragic", "trail", "trailer", "train", "trainer", "training",
|
|
"trait", "transaction", "transcript", "transfer", "transform", "transformation", "transit", "transition", "translate", "translation",
|
|
"transmission", "transmit", "transport", "transportation", "trap", "trauma", "travel", "traveler", "traveller", "treasure",
|
|
"treat", "treatment", "treaty", "tree", "tremendous", "trend", "trial", "triangle", "tribal", "tribe",
|
|
"tribunal", "tribute", "trick", "trigger", "trillion", "trio", "trip", "triumph", "troop", "trophy",
|
|
"tropical", "trouble", "troubled", "trousers", "truck", "true", "truly", "trust", "trustee", "truth",
|
|
"try", "tsunami", "tube", "Tuesday", "tuition", "tune", "tunnel", "turn", "turnout", "turnover",
|
|
"tv", "twelve", "twenty", "twice", "twin", "twist", "two", "type", "typical", "typically",
|
|
"tyre", "ugly", "ultimate", "ultimately", "umbrella", "unable", "unacceptable", "uncertainty", "uncle", "uncomfortable",
|
|
"unconscious", "under", "undergo", "undergraduate", "underground", "underlying", "undermine", "understand", "understanding", "undertake",
|
|
"underwear", "undoubtedly", "uneasy", "unemployed", "unemployment", "unexpected", "unfair", "unfold", "unfortunate", "unfortunately",
|
|
"unhappy", "uniform", "unify", "union", "unique", "unit", "unite", "united", "unity", "universal",
|
|
"universe", "university", "unknown", "unless", "unlike", "unlikely", "unprecedented", "until", "unusual", "unveil",
|
|
"up", "upcoming", "update", "upgrade", "uphold", "upon", "upper", "upset", "upstairs", "upwards",
|
|
"urban", "urge", "urgent", "us", "usage", "use", "used", "used to", "useful", "useless",
|
|
"user", "usual", "usually", "utility", "utilize", "utterly", "vacation", "vacuum", "vague", "valid",
|
|
"validity", "valley", "valuable", "value", "van", "vanish", "variable", "variation", "varied", "variety",
|
|
"various", "vary", "vast", "vegetable", "vehicle", "vein", "venture", "venue", "verb", "verbal",
|
|
"verdict", "verify", "verse", "version", "versus", "vertical", "very", "vessel", "veteran", "via",
|
|
"viable", "vibrant", "vice", "vicious", "victim", "victory", "video", "view", "viewer", "viewpoint",
|
|
"village", "villager", "violate", "violation", "violence", "violent", "virtual", "virtually", "virtue", "virus",
|
|
"visa", "visible", "vision", "visit", "visitor", "visual", "vital", "vitamin", "vocal", "voice",
|
|
"volume", "voluntary", "volunteer", "vote", "voting", "vow", "vulnerability", "vulnerable", "wage", "wait",
|
|
"waiter", "waiting", "wake", "walk", "wall", "wander", "want", "war", "ward", "warehouse",
|
|
"warfare", "warm", "warmth", "warn", "warning", "warrant", "warrior", "wash", "washing", "waste",
|
|
"watch", "water", "wave", "way", "we", "weak", "weaken", "weakness", "wealth", "wealthy",
|
|
"weapon", "wear", "weather", "weave", "web", "website", "wedding", "Wednesday", "weed", "week",
|
|
"weekend", "weekly", "weigh", "weight", "weird", "welcome", "welfare", "well", "well-being", "well-known",
|
|
"west", "western", "wet", "what", "whatever", "whatsoever", "wheat", "wheel", "when", "whenever",
|
|
"where", "whereas", "whereby", "wherever", "whether", "which", "while", "whilst", "whip", "whisper",
|
|
"white", "who", "whoever", "whole", "wholly", "whom", "whose", "why", "wide", "widely",
|
|
"widen", "widespread", "widow", "width", "wife", "wild", "wildlife", "will", "willing", "willingness",
|
|
"win", "wind", "window", "wine", "wing", "winner", "winter", "wipe", "wire", "wisdom",
|
|
"wise", "wish", "wit", "witch", "with", "withdraw", "withdrawal", "within", "without", "witness",
|
|
"woman", "wonder", "wonderful", "wood", "wooden", "wool", "word", "work", "worker", "workforce",
|
|
"working", "workout", "workplace", "works", "workshop", "world", "worldwide", "worm", "worried", "worry",
|
|
"worse", "worship", "worst", "worth", "worthwhile", "worthy", "would", "wound", "wow", "wrap",
|
|
"wrist", "write", "writer", "writing", "written", "wrong", "yard", "yeah", "year", "yell",
|
|
"yellow", "yes", "yesterday", "yet", "yield", "you", "young", "youngster", "your", "yours",
|
|
"yourself", "youth", "zero", "zone", "zoo"
|
|
];
|
|
|
|
// 全局变量
|
|
let selectedWords = [];
|
|
let importedWords = [];
|
|
let currentWordIndex = 0;
|
|
let dictationStarted = false;
|
|
let userAnswers = []; // 存储用户答案
|
|
let correctAnswers = []; // 存储正确答案
|
|
|
|
// 页面加载时初始化
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
renderWordGrid();
|
|
updateStats();
|
|
createParticles();
|
|
initCursorFollower();
|
|
});
|
|
|
|
// 创建背景粒子
|
|
function createParticles() {
|
|
const particlesContainer = document.getElementById('particles');
|
|
const particleCount = 30;
|
|
|
|
for (let i = 0; i < particleCount; i++) {
|
|
const particle = document.createElement('div');
|
|
particle.classList.add('particle');
|
|
|
|
// 随机大小
|
|
const size = Math.random() * 20 + 5;
|
|
particle.style.width = `${size}px`;
|
|
particle.style.height = `${size}px`;
|
|
|
|
// 随机位置
|
|
particle.style.left = `${Math.random() * 100}%`;
|
|
particle.style.top = `${Math.random() * 100}%`;
|
|
|
|
// 随机动画延迟和时长
|
|
const delay = Math.random() * 15;
|
|
const duration = 15 + Math.random() * 10;
|
|
particle.style.animationDelay = `${delay}s`;
|
|
particle.style.animationDuration = `${duration}s`;
|
|
|
|
// 随机颜色
|
|
const colors = ['rgba(100, 255, 200, 0.2)', 'rgba(0, 210, 255, 0.2)', 'rgba(93, 230, 255, 0.2)'];
|
|
particle.style.background = colors[Math.floor(Math.random() * colors.length)];
|
|
|
|
particlesContainer.appendChild(particle);
|
|
}
|
|
}
|
|
|
|
// 鼠标跟随效果
|
|
function initCursorFollower() {
|
|
const cursor = document.querySelector('.cursor-follower');
|
|
const buttons = document.querySelectorAll('button, .feature-card');
|
|
|
|
let mouseX = 0;
|
|
let mouseY = 0;
|
|
let cursorX = 0;
|
|
let cursorY = 0;
|
|
const speed = 0.1;
|
|
|
|
document.addEventListener('mousemove', e => {
|
|
mouseX = e.clientX;
|
|
mouseY = e.clientY;
|
|
});
|
|
|
|
function animateCursor() {
|
|
const distX = mouseX - cursorX;
|
|
const distY = mouseY - cursorY;
|
|
|
|
cursorX += distX * speed;
|
|
cursorY += distY * speed;
|
|
|
|
cursor.style.left = cursorX + 'px';
|
|
cursor.style.top = cursorY + 'px';
|
|
|
|
requestAnimationFrame(animateCursor);
|
|
}
|
|
|
|
animateCursor();
|
|
|
|
buttons.forEach(button => {
|
|
button.addEventListener('mouseenter', () => {
|
|
cursor.classList.add('hover');
|
|
});
|
|
|
|
button.addEventListener('mouseleave', () => {
|
|
cursor.classList.remove('hover');
|
|
});
|
|
});
|
|
}
|
|
|
|
// 模式切换
|
|
function switchMode(mode) {
|
|
document.getElementById('welcomeScreen').style.display = 'none';
|
|
document.getElementById('teacherScreen').style.display = 'none';
|
|
document.getElementById('studentScreen').style.display = 'none';
|
|
|
|
if (mode === 'teacher') {
|
|
document.getElementById('teacherScreen').style.display = 'block';
|
|
} else {
|
|
document.getElementById('studentScreen').style.display = 'block';
|
|
}
|
|
}
|
|
|
|
// 标签页切换(老师端只有一个标签页)
|
|
function switchTab(tabId) {
|
|
// 移除所有标签的active状态
|
|
document.querySelectorAll('.tab-btn').forEach(tab => {
|
|
tab.classList.remove('active');
|
|
});
|
|
|
|
// 设置当前标签为active
|
|
event.target.classList.add('active');
|
|
|
|
// 切换显示内容
|
|
if (tabId === 'selection') {
|
|
document.getElementById('selectionTab').style.display = 'block';
|
|
}
|
|
}
|
|
|
|
// 渲染单词网格
|
|
function renderWordGrid(filteredWords = toeflWords) {
|
|
const wordGrid = document.getElementById('wordGrid');
|
|
wordGrid.innerHTML = '';
|
|
|
|
filteredWords.forEach(word => {
|
|
const wordItem = document.createElement('div');
|
|
wordItem.className = `word-item ${selectedWords.includes(word) ? 'selected' : ''}`;
|
|
wordItem.textContent = word;
|
|
wordItem.onclick = () => toggleWordSelection(word);
|
|
wordGrid.appendChild(wordItem);
|
|
});
|
|
}
|
|
|
|
// 切换单词选择状态
|
|
function toggleWordSelection(word) {
|
|
const index = selectedWords.indexOf(word);
|
|
if (index > -1) {
|
|
selectedWords.splice(index, 1);
|
|
} else {
|
|
selectedWords.push(word);
|
|
}
|
|
renderWordGrid();
|
|
updateStats();
|
|
}
|
|
|
|
// 更新统计信息
|
|
function updateStats() {
|
|
const total = toeflWords.length;
|
|
const selected = selectedWords.length;
|
|
const percentage = total > 0 ? Math.round((selected / total) * 100) : 0;
|
|
|
|
document.getElementById('selectedCount').textContent = selected;
|
|
document.getElementById('totalWords').textContent = total;
|
|
document.getElementById('percentage').textContent = percentage + '%';
|
|
}
|
|
|
|
// 全选单词
|
|
function selectAllWords() {
|
|
selectedWords = [...toeflWords];
|
|
renderWordGrid();
|
|
updateStats();
|
|
}
|
|
|
|
// 取消全选
|
|
function deselectAllWords() {
|
|
selectedWords = [];
|
|
renderWordGrid();
|
|
updateStats();
|
|
}
|
|
|
|
// 随机选择60个单词
|
|
function randomSelectWords() {
|
|
selectedWords = [];
|
|
const shuffled = [...toeflWords].sort(() => 0.5 - Math.random());
|
|
selectedWords = shuffled.slice(0, 60);
|
|
renderWordGrid();
|
|
updateStats();
|
|
}
|
|
|
|
// 搜索单词
|
|
function filterWords() {
|
|
const searchTerm = document.getElementById('searchInput').value.toLowerCase();
|
|
if (searchTerm === '') {
|
|
renderWordGrid();
|
|
document.getElementById('addWordSuggestion').style.display = 'none';
|
|
} else {
|
|
const filtered = toeflWords.filter(word =>
|
|
word.toLowerCase().includes(searchTerm)
|
|
);
|
|
renderWordGrid(filtered);
|
|
|
|
// 如果没有找到匹配的单词,显示添加单词提示
|
|
if (filtered.length === 0) {
|
|
document.getElementById('addWordSuggestion').style.display = 'block';
|
|
document.getElementById('newWordText').textContent = searchTerm;
|
|
} else {
|
|
document.getElementById('addWordSuggestion').style.display = 'none';
|
|
}
|
|
}
|
|
}
|
|
|
|
// 添加新单词
|
|
function addNewWord() {
|
|
const newWord = document.getElementById('searchInput').value.trim().toLowerCase();
|
|
if (newWord && !toeflWords.includes(newWord)) {
|
|
toeflWords.push(newWord);
|
|
toeflWords.sort();
|
|
renderWordGrid();
|
|
updateStats();
|
|
document.getElementById('addWordSuggestion').style.display = 'none';
|
|
document.getElementById('searchInput').value = '';
|
|
|
|
// 显示添加成功提示
|
|
alert(`单词 "${newWord}" 已成功添加到词库中!`);
|
|
}
|
|
}
|
|
|
|
// 清除搜索
|
|
function clearSearch() {
|
|
document.getElementById('searchInput').value = '';
|
|
document.getElementById('addWordSuggestion').style.display = 'none';
|
|
renderWordGrid();
|
|
}
|
|
|
|
// 导出配置文件 - 修复下载问题
|
|
function exportConfig() {
|
|
if (selectedWords.length === 0) {
|
|
alert('请先选择单词!');
|
|
return;
|
|
}
|
|
|
|
const config = {
|
|
words: selectedWords,
|
|
createdTime: new Date().toISOString(),
|
|
version: '1.0'
|
|
};
|
|
|
|
// 创建Blob对象
|
|
const blob = new Blob([JSON.stringify(config, null, 2)], {type: 'application/json'});
|
|
|
|
// 创建下载链接
|
|
const url = URL.createObjectURL(blob);
|
|
const a = document.createElement('a');
|
|
a.href = url;
|
|
a.download = 'toefl_words_config.json';
|
|
document.body.appendChild(a);
|
|
a.click();
|
|
|
|
// 清理
|
|
setTimeout(() => {
|
|
document.body.removeChild(a);
|
|
URL.revokeObjectURL(url);
|
|
}, 100);
|
|
|
|
// 添加成功动画
|
|
const exportBtn = event.target.closest('.action-btn');
|
|
const originalText = exportBtn.innerHTML;
|
|
exportBtn.innerHTML = '<i class="fas fa-check"></i> 已导出';
|
|
exportBtn.classList.add('btn-success');
|
|
|
|
setTimeout(() => {
|
|
exportBtn.innerHTML = originalText;
|
|
exportBtn.classList.remove('btn-success');
|
|
}, 2000);
|
|
}
|
|
|
|
// 处理文件选择
|
|
function handleFileSelect(event) {
|
|
const file = event.target.files[0];
|
|
if (file) {
|
|
const reader = new FileReader();
|
|
reader.onload = function(e) {
|
|
try {
|
|
const config = JSON.parse(e.target.result);
|
|
importedWords = config.words || [];
|
|
const createdTime = new Date(config.createdTime);
|
|
|
|
document.getElementById('importedWordCount').textContent = importedWords.length;
|
|
document.getElementById('importedTime').textContent = createdTime.toLocaleString();
|
|
|
|
document.getElementById('importInfo').style.display = 'block';
|
|
|
|
} catch (error) {
|
|
alert('配置文件格式错误!');
|
|
}
|
|
};
|
|
reader.readAsText(file);
|
|
}
|
|
}
|
|
|
|
// 开始默写
|
|
function startDictation() {
|
|
if (importedWords.length === 0) {
|
|
alert('请先导入配置文件!');
|
|
return;
|
|
}
|
|
|
|
document.getElementById('importInfo').style.display = 'none';
|
|
document.getElementById('dictationArea').style.display = 'block';
|
|
|
|
// 初始化用户答案和正确答案数组
|
|
userAnswers = new Array(importedWords.length).fill('');
|
|
correctAnswers = [...importedWords];
|
|
|
|
currentWordIndex = 0;
|
|
dictationStarted = true;
|
|
showCurrentWord();
|
|
|
|
// 聚焦到输入框
|
|
document.getElementById('answerInput').focus();
|
|
}
|
|
|
|
// 显示当前单词(横杠形式)
|
|
function showCurrentWord() {
|
|
if (currentWordIndex >= 0 && currentWordIndex < importedWords.length) {
|
|
const currentWord = importedWords[currentWordIndex];
|
|
const wordLength = currentWord.length;
|
|
|
|
// 显示横杠(每个字母一个横杠)
|
|
const blanks = '_ '.repeat(wordLength).trim();
|
|
document.getElementById('wordBlank').textContent = blanks;
|
|
|
|
// 显示进度
|
|
document.getElementById('progressInfo').textContent =
|
|
`进度: ${currentWordIndex + 1}/${importedWords.length}`;
|
|
|
|
const progress = importedWords.length > 0 ?
|
|
Math.round(((currentWordIndex + 1) / importedWords.length) * 100) : 0;
|
|
document.getElementById('progressFill').style.width = progress + '%';
|
|
|
|
// 显示之前输入的答案(如果有的话)
|
|
document.getElementById('answerInput').value = userAnswers[currentWordIndex] || '';
|
|
document.getElementById('answerInput').focus();
|
|
}
|
|
}
|
|
|
|
// 处理键盘按键
|
|
function handleKeyPress(event) {
|
|
if (event.key === 'Enter') {
|
|
submitAnswer();
|
|
}
|
|
}
|
|
|
|
// 提交答案
|
|
function submitAnswer() {
|
|
const answerInput = document.getElementById('answerInput');
|
|
const userAnswer = answerInput.value.trim().toLowerCase();
|
|
|
|
if (userAnswer) {
|
|
// 保存用户答案
|
|
userAnswers[currentWordIndex] = userAnswer;
|
|
|
|
// 如果是最后一个单词,自动结束
|
|
if (currentWordIndex === importedWords.length - 1) {
|
|
endDictation();
|
|
} else {
|
|
// 自动跳到下一个单词
|
|
showNextWord();
|
|
}
|
|
} else {
|
|
alert('请输入答案!');
|
|
}
|
|
}
|
|
|
|
// 下一个单词
|
|
function showNextWord() {
|
|
if (currentWordIndex < importedWords.length - 1) {
|
|
currentWordIndex++;
|
|
showCurrentWord();
|
|
}
|
|
}
|
|
|
|
// 上一个单词
|
|
function showPrevWord() {
|
|
if (currentWordIndex > 0) {
|
|
currentWordIndex--;
|
|
showCurrentWord();
|
|
}
|
|
}
|
|
|
|
// 结束默写并显示成绩
|
|
function endDictation() {
|
|
dictationStarted = false;
|
|
|
|
// 计算成绩
|
|
let correctCount = 0;
|
|
const errorDetails = [];
|
|
|
|
for (let i = 0; i < importedWords.length; i++) {
|
|
if (userAnswers[i] === correctAnswers[i]) {
|
|
correctCount++;
|
|
} else {
|
|
// 记录错误详情
|
|
errorDetails.push({
|
|
number: i + 1,
|
|
word: correctAnswers[i],
|
|
userAnswer: userAnswers[i] || '(未作答)'
|
|
});
|
|
}
|
|
}
|
|
|
|
const totalCount = importedWords.length;
|
|
const accuracy = totalCount > 0 ? Math.round((correctCount / totalCount) * 100) : 0;
|
|
|
|
// 显示成绩报告
|
|
document.getElementById('dictationArea').style.display = 'none';
|
|
document.getElementById('resultArea').style.display = 'block';
|
|
|
|
// 更新成绩显示
|
|
document.getElementById('finalScore').textContent = accuracy + '%';
|
|
document.getElementById('correctCount').textContent = correctCount;
|
|
document.getElementById('wrongCount').textContent = totalCount - correctCount;
|
|
document.getElementById('totalCount').textContent = totalCount;
|
|
|
|
// 根据正确率显示等级
|
|
let gradeClass = '';
|
|
let gradeText = '';
|
|
if (accuracy >= 90) {
|
|
gradeClass = 'grade-a';
|
|
gradeText = 'A (优秀)';
|
|
} else if (accuracy >= 80) {
|
|
gradeClass = 'grade-b';
|
|
gradeText = 'B (良好)';
|
|
} else if (accuracy >= 70) {
|
|
gradeClass = 'grade-c';
|
|
gradeText = 'C (及格)';
|
|
} else {
|
|
gradeClass = 'grade-d';
|
|
gradeText = 'D (需要努力)';
|
|
}
|
|
|
|
const gradeBadge = document.getElementById('gradeBadge');
|
|
gradeBadge.textContent = '等级: ' + gradeText;
|
|
gradeBadge.className = 'grade-badge ' + gradeClass;
|
|
|
|
// 更新圆形进度条
|
|
const scoreCircle = document.querySelector('.score-circle');
|
|
const gradientDegree = (accuracy / 100) * 360;
|
|
scoreCircle.style.background = `conic-gradient(#7cffcb 0deg ${gradientDegree}deg, #5de6ff ${gradientDegree}deg 360deg)`;
|
|
|
|
// 显示错误详情
|
|
const errorList = document.getElementById('errorList');
|
|
errorList.innerHTML = '';
|
|
|
|
if (errorDetails.length > 0) {
|
|
errorDetails.forEach(error => {
|
|
const li = document.createElement('li');
|
|
li.className = 'error-item';
|
|
li.innerHTML = `
|
|
<div class="error-number">${error.number}.</div>
|
|
<div class="error-content">
|
|
<div class="error-word">${error.word}</div>
|
|
<div class="error-answer">您的答案: ${error.userAnswer}</div>
|
|
<div class="error-correct">
|
|
<i class="fas fa-times" style="color: #ff6b6b;"></i>
|
|
<span class="error-arrow">→</span>
|
|
<i class="fas fa-check" style="color: #7cffcb;"></i>
|
|
<span style="margin-left: 10px;">正确答案: ${error.word}</span>
|
|
</div>
|
|
</div>
|
|
`;
|
|
errorList.appendChild(li);
|
|
});
|
|
} else {
|
|
const li = document.createElement('li');
|
|
li.innerHTML = '<div style="color: #7cffcb; text-align: center; padding: 20px;"><i class="fas fa-check-circle"></i> 恭喜!全部正确!</div>';
|
|
errorList.appendChild(li);
|
|
}
|
|
}
|
|
|
|
// 重新开始默写
|
|
function restartDictation() {
|
|
document.getElementById('resultArea').style.display = 'none';
|
|
document.getElementById('dictationArea').style.display = 'block';
|
|
|
|
// 重置状态
|
|
userAnswers = new Array(importedWords.length).fill('');
|
|
currentWordIndex = 0;
|
|
dictationStarted = true;
|
|
showCurrentWord();
|
|
}
|
|
|
|
// 拖拽上传功能
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
const uploadArea = document.getElementById('fileUploadArea');
|
|
|
|
uploadArea.addEventListener('dragover', function(e) {
|
|
e.preventDefault();
|
|
uploadArea.style.borderColor = '#7cffcb';
|
|
uploadArea.style.backgroundColor = 'rgba(124, 255, 203, 0.1)';
|
|
});
|
|
|
|
uploadArea.addEventListener('dragleave', function(e) {
|
|
e.preventDefault();
|
|
uploadArea.style.borderColor = '';
|
|
uploadArea.style.backgroundColor = '';
|
|
});
|
|
|
|
uploadArea.addEventListener('drop', function(e) {
|
|
e.preventDefault();
|
|
uploadArea.style.borderColor = '';
|
|
uploadArea.style.backgroundColor = '';
|
|
|
|
if (e.dataTransfer.files.length) {
|
|
document.getElementById('configFile').files = e.dataTransfer.files;
|
|
const event = new Event('change');
|
|
document.getElementById('configFile').dispatchEvent(event);
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
</body>
|
|
</html> |