上一页下一页

收集有关可拖动层的信息

当将“拖动层”动作附加到某个对象时,Dreamweaver 将 MM_dragLayer() 函数插入到您的文档的 head 部分。除了将层注册为可拖动之外,此函数还会为每个可拖动的层定义三项属性:MM_LEFTRIGHTMM_UPDOWNMM_SNAPPED,您可以在自己的 JavaScript 函数中使用这些属性确定层的相对水平位置、层的相对垂直位置以及层是否达到拖动目标。

备注: 此处提供的信息仅供有经验的 JavaScript 编程人员使用。

例如,下面的函数在一个叫做 curPosField 的表单域中显示 MM_UPDOWN 属性的值(层当前的垂直位置)。(因为表单域在 Navigator 和 Internet Explorer 中都是动态的,即您可以在页完成载入之后更改它们的内容,所以它们非常适合用于显示不断更新的信息。)

function getPos(layername){
   var layerRef = MM_findObj(layername); 
   var curVertPos = layerRef.MM_UPDOWN;
   document.tracking.curPosField.value = curVertPos;
}

您可以编写一个函数根据该值距离拖放区域的远近程度在表单域中显示消息,或者您可以调用另一个函数根据该值显示或隐藏层,而不是在表单域中显示 MM_UPDOWNMM_LEFTRIGHT 的值。只要具有足够的想像力和 JavaScript 技巧,您几乎可以以任何方式响应 MM_UPDOWNMM_LEFTRIGHT 的值。

当页上有多个层并且所有这些层都必须到达它们的目标后访问者才可以前进到下一页或下一个任务时,读取 MM_SNAPPED 属性将特别有用。例如,您可以编写一个函数对 MM_SNAPPED 值为 true 的层进行计数,并在每放下一个层时都调用该函数。当已靠齐的计数达到所需的数目时,您可以将访问者送到下一页或显示一条祝贺消息。

如果您曾使用 onMouseOver 事件将“拖动层”动作附加到多个层中的链接,则您必须对 MM_dragLayer() 函数进行微小的更改,以防止已靠齐的层的 MM_SNAPPED 属性在鼠标指针滑过该层时被重置为 false。(如果您使用“拖动层”来创建图片拼板游戏就可能发生这种情况,因为访问者很可能在放置其他块时将鼠标指针滑过已靠齐的块。)MM_dragLayer() 函数不能防止此行为的发生,因为有时这是我们所希望的,例如当您要为单个层设置多个拖放目标时。

若要防止已靠齐的层重新对齐,请执行以下操作:
  1. 在对代码进行任何更改之前先制作文档的备份拷贝。(您可以在 Dreamweaver 中的“站点”面板,或者在 Windows 资源管理器 (Windows) 或 Finder (Macintosh) 中完成此操作。)
  2. 选择“编辑”>“查找”。
  3. 在“查找内容”弹出式菜单中选择“HTML 源代码”。
  4. 在相邻的文本域中键入 (!curDrag)
  5. 单击“查找下一个”。
  6. 如果 Dreamweaver 询问是否要从文档的开头继续查找,单击“是”。Dreamweaver 找到一个内容如下的语句:

    if (!curDrag) return false;
    
  7. 关闭“查找”对话框,然后在文档窗口的代码视图中或代码检查器中修改该语句,修改后为:
  8. if (!curDrag || curDrag.MM_SNAPPED != null) return false;

    两个管道符 (||) 表示“或”,curDrag 是表示被注册为可拖动的层的变量。该语句的意思是“如果 curDrag 不是一个对象,或者如果它已具有 MM_SNAPPED 值,则不要继续执行函数的其余部分。”


  上一页下一页