0

我有一个混合:

DragEvents = Ember.Mixin.create( {
    attributeBindings: 'draggable',
    draggable: 'true',
    dragStart: function(event) {
        controller.onDragStartEvent(this);
    },
    drag: function(event) {
        // this is called for each 'movement' of the object being dragged
        // want to collect information about the events and fire a callback
        // once every 100 ms
    },
    dragEnd: function(event) {
        // want to fire one last callback with the remaining drag event coordinates
    }
});

在拖动功能中,我对鼠标的坐标感兴趣,由下式给出

event.originalEvent.pageX, event.originalEvent.pageY

我想不通的是如何在每次调用拖动时收集该信息,并在拖动期间每 100 毫秒触发一次回调,参数是我收集的坐标数组。当调用 dragEnd 函数时,我想用剩余的拖动事件(那些已收集但未在前一个回调中发送的事件)触发回调。

回调是

controller.onDragEvent(coordinatesArray);
4

2 回答 2

2

ember run 有自己的小跑

http://emberjs.com/api/classes/Ember.run.html#method_throttle

确保目标方法的调用频率永远不会超过指定的间隔时间。

在您的情况下,代码将是

Ember.run.throttle(controller, 'onDragEvent',coordinatesArray, 100);

祝你好运

于 2013-10-18T15:24:56.420 回答
0

如果你想每 100 毫秒调用一次函数,你可以使用 JQuery 和queue函数来连接函数调用:http ://api.jquery.com/jQuery.queue/

如果您不了解 JQuery,它非常容易使用。按照以下说明操作:http: //jquery.com/download/,您就可以使用该queue功能了。一个例子是:

yourFunction() {
   $( "span" ).text( any );
   setTimeout( showIt, 100 );
  .queue(function(sig){
   yourFunction();
   sig();
  })
}

请记住,在 JQuery 中,您可以使用此符号$("#id")$(".class")引用一个标记或一组标记。

于 2013-10-18T14:50:32.790 回答