当我移动鼠标太快时,Javascript函数不按预期工作.关于如何改进的想法
Javascript function works not as intended when I move mouse too quickly. Ideas on how to improve?
我的页面上有一个可拖放控件。它有一个客户端事件' onclientdrag ',我用它来突出显示我的页面。这个想法是,页面上有不同的区域,当用户在页面的某些部分上拖动控件时,页面会相应地高亮显示。
问题是,我看到高亮闪烁时,快速移动。我没有看到任何异常被抛出,但如果我快速移动鼠标,而停留在一个"区域"内,我仍然看到高亮显示被删除和重新添加。我只能假设这是因为方法没有及时完成—并且由于被拖拽而再次触发。哪些会导致意想不到的问题?
function RemoveHighlighting(dockZone) {
if (dockZone.get_docks().length == 0) {
dockZone.removeCssClass("zoneDropOk");
}
}
function AddHighlighting(dockZone) {
if (dockZone.get_docks().length == 0) {
dockZone.addCssClass("zoneDropOk");
}
}
var previousZone = null;
//Evaluates whether the currently moused-over item is a RadDockZone.
function TryGetZoneFromTarget(target) {
while (target != null && target.id) {
if (target.id.indexOf("RadDockZone") != -1) {
return $find(target.id);
}
target = target.parentNode;
}
return null;
}
//Adds highlighting to the dockZones when the user is dragging objects to the screen.
//Clear the old dockZone as the user moves out of it, and color new ones as they move into it.
function OnClientDragging(sender, eventArgs) {
var target = eventArgs.get_htmlElement();
var zone = TryGetZoneFromTarget(target);
if (zone) {
var currentZone = zone;
dockZoneDroppedOnID = zone.get_id();
if (previousZone == null) {
previousZone = currentZone;
$.queue(AddHighlighting(currentZone));
}
else if (previousZone != currentZone) {
$.queue(RemoveHighlighting(previousZone));
previousZone = currentZone;
$.queue(AddHighlighting(currentZone));
}
}
else {
dockZoneDroppedOnID = "";
if (previousZone != null && $.queue.length == 0) {
RemoveHighlighting(previousZone);
previousZone = null;
}
}
}
我应该尝试使这个脚本更有效,或者可能设置一个变量在局部作用域之外,以表明前一个事件仍在运行,并取消当前事件?
编辑:我编辑了一个队列解决方案,工作得很好!我不确定这是不是一个完美的解决方案,但它解决了我的问题。
我认为在此范围之外设置变量将是一种更有效的方法,特别是,您可以使用或模仿jQuery的fx队列工作方式。
相关文章:
- onLoad函数不工作,如何使用BindListener修复它
- 动画.css - 它是如何工作的?如何使其自动工作
- Java 脚本不适用于外部工作表,但它适用于主 html 文件.为什么会这样,我该如何解决
- 纠结于如何添加“;“全选”;功能与折扣
- Facebook”;类似于“-如何使登录选项卡重定向到另一个选项卡
- 示例variableInputs for Processing 2.0 javaScript模式是如何工作的?如何调整
- 困惑于如何编写OO Javascript来实现简单的类模式
- deviceReady无法在PhoneGap应用程序中工作,如何操作
- Bootstrap's弹出窗口只工作于按钮-不锚或跨度
- Javascript连接一个函数,类似于如何添加文本
- Yii2 javascript不工作.我如何添加javascript
- innerHtml不能与离子2管道一起工作,如何呢?
- Javascript: object[method]()不工作或如何为纯Javascript代码构建jQuery插件
- 替换为只工作于第一个子元素
- 当我移动鼠标太快时,Javascript函数不按预期工作.关于如何改进的想法
- 谷歌工作表:如何让我的自定义功能自动刷新
- 我有ngCordova本地通知工作,如何让它为每个用户触发
- GWT setCapture在Firefox中也能工作,如何
- Stack Overflow自己的电子邮件验证正则表达式工作得如何
- IE9:为什么设置“-ms-transform”;工作于css,但不能与jquery.css()