DOM onresize событие

Что относительно чего-то более простого как это?

public IEnumerable<ICategory> GetSubCategories(long? categoryId)
{
    var subCategories = this.Repository.Categories.Where(c => (!categoryId.HasValue && c.ParentId == null) || c.ParentId == categoryId)
        .ToList().Cast<ICategory>();

    return subCategories;
}
22
задан UpTheCreek 27 August 2012 в 08:09
поделиться

4 ответа

В этом случае я бы настоятельно рекомендовал дебаггинг. Самый простой, эффективный и надежный способ сделать это на JavaScript, который я нашел, - это плагин jQuery Бена Алмана Throttle/Debounce (можно использовать как с jQuery, так и без него - я знаю... звучит странно).

С дебаунсингом код для этого будет простым:

$(window).resize($.debounce(1000, function() {
   // Handle your resize only once total, after a one second calm.
   ...
}));

Надеюсь, это кому-нибудь поможет. ;)

30
ответ дан 29 November 2019 в 04:20
поделиться

This is not perfect but it should give you the start you need.

var initialX = null;
var initialY = null;
var lastResize = null;
var waiting = false;
var first = true;
var id = 0;

function updateResizeTime()
{
    if (initialX === event.clientX && initialY === event.clientY)
    {
        return;
    }

    initialX = event.clientX;
    initialY = event.clientY;

    if (first)
    {
        first = false;
        return;
    }

    lastResize = new Date();            
    if (!waiting && id == 0)
    {
        waiting = true;
        id = setInterval(checkForResizeEnd, 1000);
    }
}

function checkForResizeEnd()
{
    if ((new Date()).getTime() - lastResize.getTime() >= 1000)
    {
        waiting = false;
        clearInterval(id);
        id = 0;
        alert('hey!');
    }
}

window.onresize = function()
{
    updateResizeTime();
}
5
ответ дан 29 November 2019 в 04:20
поделиться

Вы получаете несколько событий, потому что на самом деле событий несколько. Windows анимирует изменение размера, делая это несколько раз при перетаскивании окна (по умолчанию, я думаю, вы можете изменить это в реестре).

Что вы могли бы сделать, так это добавить задержку. Выполняйте clearTimeout, setTimout (myResize, 1000) каждый раз, когда запускается событие IE. Тогда только последний будет изменять размер.

4
ответ дан 29 November 2019 в 04:20
поделиться

Я всегда использую это, когда я хочу что-то сделать после изменения размера. Вызовы setTimeout и clearTimeout не оказывают сколько-нибудь заметного влияния на скорость изменения размера, поэтому не проблема, что они вызываются несколько раз.

var timeOut = null;
var func = function() { /* snip, onresize code here */};
window.onresize = function(){
   if(timeOut != null) clearTimeout(timeOut);
   timeOut = setTimeout(func, 100);
}
7
ответ дан 29 November 2019 в 04:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: