Событие изменения размера окна JavaScript

Начиная с Python 3.6, в стандартной библиотеке Python есть решение random.choices .

Пример использования: давайте настроим популяцию и весы, соответствующие тем, которые находятся в Вопрос OP:

>>> from random import choices
>>> population = [1, 2, 3, 4, 5, 6]
>>> weights = [0.1, 0.05, 0.05, 0.2, 0.4, 0.2]

Теперь choices(population, weights) генерирует один образец:

>>> choices(population, weights)
4

Необязательный аргумент ключевого слова k позволяет запрашивать более одного образца в один раз. Это ценно, потому что есть некоторая подготовительная работа, которую random.choices должен делать каждый раз, когда она вызывается, до создания каких-либо образцов; создавая сразу несколько образцов, нам нужно только сделать эту подготовительную работу один раз. Здесь мы создаем миллион выборок и используем collections.Counter, чтобы проверить, что распределение, которое мы получаем, грубо совпадает с весами, которые мы дали.

>>> million_samples = choices(population, weights, k=10**6)
>>> from collections import Counter
>>> Counter(million_samples)
Counter({5: 399616, 6: 200387, 4: 200117, 1: 99636, 3: 50219, 2: 50025})

573
задан Community 23 May 2017 в 12:10
поделиться

5 ответов

jQuery просто обертывает стандарт resize событие DOM, например,

window.onresize = function(event) {
    ...
};

, jQuery может делать некоторую работу, чтобы гарантировать, что изменять размеры событие последовательно запускается во всех браузерах, но я не уверен, отличается ли какой-либо из браузеров, но я поощрил бы Вас тестировать в Firefox, Safari и IE.

613
ответ дан informatik01 23 May 2017 в 22:10
поделиться
  • 1
    Большой ответ! Было бы более правильно, если бы Microsoft использовала слово, выводят вместо var, но ради краткости, я думаю, что они выбрали правильный. После всех этих лет это все еще поражает меня, как изящная.NET сравнивается с другими технологиями разработки. Я предполагаю it' s от групп разработчиков Microsoft, имеющих необходимость съесть их собственный корм для собак. BTW при использовании Resharper, работ var сразу становится очевидным. – Joel Rodgers 10 December 2011 в 18:21

Следующее сообщение в блоге может быть полезно для Вас: Фиксация окна изменяет размеры события в IE

, Это предоставляет этот код:

Sys.Application.add_load(function(sender, args) {
    $addHandler(window, 'resize', window_resize);
});

var resizeTimeoutId;

function window_resize(e) {
     window.clearTimeout(resizeTimeoutId);
     resizeTimeoutId = window.setTimeout('doResizeCode();', 10);
}
6
ответ дан Rory O'Kane 23 May 2017 в 22:10
поделиться
window.onresize = function() {
    // your code
};
7
ответ дан 22 November 2019 в 22:05
поделиться

Спасибо за ссылку на мое сообщение в блоге на http://mbccs.blogspot.com/2007/11/fixing-window-resize-event-in-ie.html .

Хотя вы можете просто подключиться к стандартному событию изменения размера окна, вы обнаружите, что в IE событие запускается один раз для каждого X и один раз для каждого перемещения оси Y, в результате чего запускается тонна событий, которые может повлиять на производительность вашего сайта, если рендеринг является интенсивной задачей.

Мой метод включает короткий тайм-аут, который отменяется при последующих событиях, чтобы событие не попало в ваш код, пока пользователь не закончит изменение размера окно.

12
ответ дан 22 November 2019 в 22:05
поделиться

Никогда не отменяйте функцию window.onresize.

Вместо этого создайте функцию для добавления прослушивателя событий к объекту или элементу. Это проверяет и в случае, если слушатели не работают, а затем отменяет функцию объекта в крайнем случае. Это предпочтительный метод, используемый в таких библиотеках, как jQuery.

объект : элемент или окно, объект
тип : изменение размера, прокрутка (тип события)
обратный вызов : ссылка на функцию

var addEvent = function(object, type, callback) {
    if (object == null || typeof(object) == 'undefined') return;
    if (object.addEventListener) {
        object.addEventListener(type, callback, false);
    } else if (object.attachEvent) {
        object.attachEvent("on" + type, callback);
    } else {
        object["on"+type] = callback;
    }
};

Затем использование выглядит следующим образом:

addEvent(window, "resize", function_reference);

или с анонимной функцией:

addEvent(window, "resize", function(event) {
  console.log('resized');
});
517
ответ дан 22 November 2019 в 22:05
поделиться
Другие вопросы по тегам:

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