drag-and-drop - Adobe Captivate - 拖放
问题描述
我正在使用 Adobe Captivate 制作在线学习活动,我们正在使用效果很好的拖放。唯一的问题是它不是动态的,因此一旦学生正确,他们就可以按照位置再次正确。是否可以打乱拖放对象的位置,以表明学生对问题的理解,而不仅仅是遵循记住的模式。
解决方案
不是开箱即用。没有像多选答案那样的“随机拖动源”复选框。通过将此脚本放入您的 OnEnter 操作并选择“执行 Javascript”,可以实现您所要求的功能:
$(function () {
var dss = cp.DD.CurrInteractionManager.m_ActiveInteraction.m_dsList;
var ypos = dss.map((i) => {
return $("div[id='" + i.n + "']").css("top");
});
ypos = shuffle(ypos);
dss.forEach((o, i) => {
$("div[id='re-" + o.n + "c']").css("top", ypos[i]);
$("div[id='" + o.n + "']").css("top", ypos[i]);
});
function shuffle(arr) {
for (var i = 0; i < arr.length; i++) {
var randId = Math.floor(Math.random() * arr.length);
var tmp = arr[i];
arr[i] = arr[randId];
arr[randId] = tmp;
}
return arr;
}
});
我没有出于复制/粘贴的目的在此处添加注释,因为那个糟糕的 Captivate JavaScript 窗口带有空白,因此这里是逐句演练的语句:
var dss = cp.DD.CurrInteractionManager.m_ActiveInteraction.m_dsList;
将所有拖动源收集到一个数组中。
var ypos = dss.map((i) => {return $("div[id='" + i.n + "']").css("top")});
提取每个对象的 Y 位置。
ypos = shuffle(ypos);
调用函数(定义如下)随机打乱 Y 位置数组的顺序。
dss.forEach((o, i) => {$("div[id='re-" + o.n + "c']").css("top", ypos[i]);
$("div[id='" + o.n + "']").css("top", ypos[i]);});
循环通过拖拽源并将每个拖拽源放置到新位置,同时将画布带上。
这里有几个警告。
- 如果允许多次尝试,“重置”按钮会将拖动源放回其原始位置。
- 这假设拖动源都以相同的水平位置排列。如果它们分散在各处,则还需要考虑 X 位置。
- 我没有在响应式或弹性项目上对此进行测试,我不确定 Adobe 在这些情况下如何为对象定位,这将适用于固定大小的项目。
- IE11 可能不支持箭头函数,如果需要支持,可能需要使用传统语法重新编写回调函数。
推荐阅读
- google-cloud-dataflow - 提交失败时的数据流行为
- python - PLY 文件和 Ransac
- nan - 在 python 中使用 statsmodel 进行逻辑回归期间 LLR p 值为 nan
- android - 使用 ExternalProject_Add 编译 google/protobuf - Android
- python - 如何完全删除opencv?
- python - 如何确定贝塞尔曲线 t 值的理想增量大小
- graph - 具有关系的 Neo4j 递归查询
- javascript - 如何在 Angular 12 中将 xml 转换为 js 对象
- python - Python 在 git bash 上的 conda 环境中运行时挂起
- inheritance - pybind11 的分段错误(核心转储)和继承类中的虚拟方法的覆盖