2015-12-15 3 views
3

У меня есть функция, которая получает xy координаты от другого клиента в моем концентраторе SignalR. когда clientA перемещает мышь, его xy-coordinate выслан на ClientB.Показать элемент на заданной координате x-y каждые несколько мс

Я пытаюсь напечатать простой @ на экране clientB при этом x-y координаты. Это работает, но единственная проблема заключается в том, что она очень медленная (я думаю, потому что функция вызывается для каждого момента перемещения мыши 1px). Когда я перемещаю мышь на clientA на несколько секунд, отпечатанный «@» на экране clientB отстает.

Имеет ли это какое-либо отношение к коду, который я написал для отображения этого @?

hub.client.MouseMoved = function (x, y, id) { 
        id = "@"; //for testing purposes 
        var e = document.getElementById(id); 
         
        if (!e) { //if e is not found, create e 
            e = $('<div id="' + id + '">' + id + '</div>'); 
            e.css('position', 'absolute'); 
            console.dir(e); 
            $(e).appendTo(document.body); 
        } 
        else { 
            e = $(e); 
        } 
            e.css({ left: x + "px", top: y + "px" }); //set position of cursor to x y coordinate. 
        } 
    } 
+0

использование комплектInterval для этого. –

+0

Я попытался установить setInterval вокруг этой функции. но, похоже, на это не реагирует. – Tomdeboer

ответ

1

Для предотвращения низкого уровня производительности, вы можете использовать таймер:

var timer; 

function executeMouseMoved(x, y, id){ 
    id = "@"; //for testing purposes 
    var e = document.getElementById(id); 
         
    if (!e) { //if e is not found, create e 
        e = $('<div id="' + id + '">' + id + '</div>'); 
        e.css('position', 'absolute'); 
        console.dir(e); 
        $(e).appendTo(document.body); 
    } 
    else { 
        e = $(e); 
    } 
    e.css({ left: x + "px", top: y + "px" }); //set position of cursor to x y coordinate. 
} 

hub.client.MouseMoved = function (x, y, id) { 
    clearInterval(timer); 
    timer = setTimeout(function(){executeMouseMoved(x,y,id);}, 50); //50ms 
} 

Надеется, что это помогает.

JsFiddle

+0

Я думал, что сработал. но это казалось столь же медленным. поэтому я изменил интервал от 50 до 1000. Но он все равно выполняет функцию каждый раз, а не каждые 1000 мс. вы объявляете «таймер», и вы очищаете интервал таймера. нет ли чего-то еще, что вы должны делать с таймером? – Tomdeboer

+0

Да, извините, я только что забыл установить таймер :). Я обновил код. – Yoplaboom

+0

, но даже если я его создаю, он все равно не срабатывает каждую секунду. – Tomdeboer

Смежные вопросы