jsPsych 行为实验开发指南:从入门到专业的完整路径
jsPsych 是一款专为浏览器环境设计的行为实验开发工具,通过 JavaScript 实现心理学、认知科学等领域的实验程序。本文将系统解析 jsPsych 的核心价值,提供从零开始的实战路径,并深入探讨高级应用技巧,帮助技术初学者快速掌握这一强大工具。
一、核心价值矩阵:为什么选择 jsPsych 开发行为实验?
1.1 无需后端环境,浏览器直接运行
传统实验软件往往需要复杂的安装配置,而 jsPsych 基于纯前端技术构建,只需浏览器即可运行,大大降低了实验部署门槛。研究者可以将实验直接部署到服务器,参与者通过链接即可访问,无需安装任何客户端软件。
1.2 毫秒级计时精度,满足行为研究需求
对于反应时实验,时间精度至关重要。jsPsych 提供可靠的毫秒级计时功能,确保实验数据的准确性。其内部时间戳机制能够精确记录刺激呈现、反应发生等关键时间点,为研究提供高质量数据支持。
1.3 丰富插件生态,覆盖各类实验范式
jsPsych 拥有完善的插件系统,涵盖从简单的键盘反应到复杂的眼动追踪等多种实验类型。每个插件都经过优化,确保在不同设备上的一致性表现,研究者可以根据需求灵活组合使用。
1.4 多设备自适应,扩大样本获取范围
随着移动设备的普及,跨平台兼容性变得越来越重要。jsPsych 自动适配桌面和移动设备,确保实验在不同屏幕尺寸和操作系统上都能正常运行,帮助研究者获取更广泛的样本数据。
图:jsPsych 调查插件自动适配移动设备(左)和桌面设备(右)的界面展示,确保实验在不同终端上的一致性体验。
二、场景化实战:从零构建完整行为实验
2.1 准备开发环境
首先克隆 jsPsych 仓库到本地:
git clone https://gitcode.com/gh_mirrors/js/jsPsych
项目结构中,examples/ 目录包含各类实验示例,docs/ 目录提供详细文档,packages/ 目录包含核心库和插件源代码。建议初学者先浏览这些目录,了解项目组织方式。
2.2 构建第一个实验:情绪识别任务
下面创建一个简单的情绪识别实验,参与者需要判断呈现面孔的情绪类型:
<!DOCTYPE html>
<html>
<head>
<title>情绪识别实验</title>
<script src="packages/jspsych/dist/jspsych.js"></script>
<link rel="stylesheet" href="packages/jspsych/css/jspsych.css">
</head>
<body></body>
<script>
// 定义实验刺激材料
const stimuli = [
{ image: 'examples/img/happy_face_1.jpg', emotion: 'happy' },
{ image: 'examples/img/sad_face_1.jpg', emotion: 'sad' }
];
// 创建实验时间线
const timeline = [];
// 欢迎页面
const welcome = {
type: 'html-keyboard-response',
stimulus: `<h1>情绪识别实验</h1>
<p>在本实验中,你将看到一系列人脸图片,请判断面孔的情绪类型。</p>
<p>按空格键开始实验。</p>`,
choices: [' ']
};
timeline.push(welcome);
// 实验试次
const trial = {
type: 'image-keyboard-response',
stimulus: jsPsych.timelineVariable('image'),
choices: ['h', 's'],
prompt: '<p>请判断情绪类型:H=开心,S=悲伤</p>',
data: {
correct_response: jsPsych.timelineVariable('emotion')
},
on_finish: function(data) {
data.correct = (data.response === data.correct_response.charAt(0));
}
};
// 创建试次循环
const trial_procedure = {
timeline: [trial],
timeline_variables: stimuli,
repetitions: 2,
randomize_order: true
};
timeline.push(trial_procedure);
// 结果反馈页面
const results = {
type: 'html-keyboard-response',
stimulus: function() {
const data = jsPsych.data.get().filter({correct: true});
const accuracy = Math.round(data.count() / jsPsych.data.get().count() * 100);
return `<h1>实验结束</h1>
<p>你的正确率:${accuracy}%</p>
<p>按任意键查看详细数据。</p>`;
},
choices: jsPsych.ALL_KEYS
};
timeline.push(results);
// 初始化实验
jsPsych.init({
timeline: timeline,
show_progress_bar: true,
progress_bar_label: '实验进度',
on_finish: function() {
jsPsych.data.displayData();
}
});
</script>
</html>
2.3 添加进度条提升用户体验
进度条能帮助参与者了解实验进展,减少不确定性。在上述实验中,我们通过 show_progress_bar: true 启用了进度条功能。
图:带有进度条的情绪识别实验界面,顶部显示当前完成进度,帮助参与者了解实验剩余时间。
2.4 数据收集与导出
jsPsych 自动记录实验过程中的详细数据,包括反应时、按键反应、刺激信息等。实验结束后,可以通过多种方式导出数据:
// 导出为CSV格式
const csvData = jsPsych.data.get().csv();
// 保存数据到本地文件
jsPsych.data.get().localSave('csv', 'emotion_recognition_data.csv');
// 发送数据到服务器
fetch('/save-data', {
method: 'POST',
body: JSON.stringify(jsPsych.data.get().json()),
headers: { 'Content-Type': 'application/json' }
});
三、深度应用:定制化与问题诊断
3.1 自定义实验样式
jsPsych 允许通过 CSS 自定义实验界面,以匹配研究需求或品牌风格。使用浏览器开发者工具可以方便地查看和修改元素样式。
图:使用浏览器开发者工具查看和修改 jsPsych 实验元素样式,左侧为实验界面,右侧为对应的 HTML 和 CSS 代码。
创建自定义 CSS 文件并引入:
<link rel="stylesheet" href="custom-experiment.css">
在 CSS 文件中自定义样式:
/* 自定义刺激文本样式 */
.jspsych-stimulus {
font-family: 'Arial', sans-serif;
font-size: 24px;
color: #333;
margin-bottom: 20px;
}
/* 自定义按钮样式 */
.jspsych-btn {
background-color: #4CAF50;
color: white;
padding: 10px 20px;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
}
.jspsych-btn:hover {
background-color: #45a049;
}
3.2 实验流程控制
复杂实验往往需要条件分支和循环结构。jsPsych 提供了灵活的流程控制机制:
// 条件分支示例
const conditional_trial = {
timeline: [difficult_trial],
conditional_function: function() {
// 获取前一个试次的正确率
const last_trial = jsPsych.data.get().last(1).values()[0];
// 如果正确率高于80%,则进入困难试次
return last_trial.accuracy > 0.8;
}
};
// 循环结构示例
const loop_node = {
timeline: [practice_trial],
loop_function: function(data) {
// 练习直到连续3次正确
const last_three = data.slice(-3);
const all_correct = last_three.every(trial => trial.correct);
return !all_correct; // 返回true将继续循环
}
};
3.3 常见误区解析
误区1:忽视资源预加载
问题:实验中图片或音频加载缓慢,导致计时不准确。 解决:使用 preload 插件确保资源加载完成:
const preload = {
type: 'preload',
images: ['examples/img/happy_face_1.jpg', 'examples/img/sad_face_1.jpg'],
message: '实验加载中,请稍候...'
};
误区2:过度依赖默认样式
问题:实验界面不符合研究需求或品牌形象。
解决:通过 CSS 自定义样式,或使用 css_classes 参数为特定试次添加样式类。
误区3:忽略移动设备兼容性
问题:实验在移动设备上显示异常或无法操作。 解决:使用 browser-check 插件检测设备兼容性,设计响应式刺激:
const browser_check = {
type: 'browser-check',
minimum_width: 320,
minimum_height: 480,
message: '您的设备屏幕太小,无法正常显示实验。请使用更大的设备访问。'
};
四、学习路径图:从入门到进阶
入门阶段
- 基础概念:阅读官方文档 docs/overview/timeline.md 了解时间线概念
- 核心插件:学习 docs/plugins/list-of-plugins.md 掌握常用插件功能
- 示例代码:运行 examples/demo-simple-rt-task.html 理解基本实验结构
中级阶段
- 数据处理:学习 docs/overview/data.md 掌握数据收集与分析方法
- 流程控制:参考 examples/conditional-and-loop-functions.html 实现复杂实验逻辑
- 样式定制:通过 docs/overview/style.md 学习界面美化技巧
高级阶段
- 插件开发:阅读 docs/developers/plugin-development.md 开发自定义插件
- 扩展功能:探索 docs/extensions/list-of-extensions.md 了解高级功能扩展
- 真实案例:研究 examples/real-world/ 目录中的实际实验项目
通过以上学习路径,你将逐步掌握 jsPsych 的核心功能和高级技巧,能够独立设计和实现专业的行为实验。记住,实践是学习的最佳方式,尝试修改示例代码,观察结果变化,不断积累经验。
jsPsych 作为一款开源工具,拥有活跃的社区支持和持续的更新迭代。定期查看项目文档和示例,参与社区讨论,你将能够充分利用这一强大工具开展自己的研究工作。
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
LongCat-AudioDiT-1BLongCat-AudioDiT 是一款基于扩散模型的文本转语音(TTS)模型,代表了当前该领域的最高水平(SOTA),它直接在波形潜空间中进行操作。00- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
HY-Embodied-0.5这是一套专为现实世界具身智能打造的基础模型。该系列模型采用创新的混合Transformer(Mixture-of-Transformers, MoT) 架构,通过潜在令牌实现模态特异性计算,显著提升了细粒度感知能力。Jinja00
FreeSql功能强大的对象关系映射(O/RM)组件,支持 .NET Core 2.1+、.NET Framework 4.0+、Xamarin 以及 AOT。C#00