Комбинируйте onload и onresize (jQuery)

Я хочу вызвать функцию при загрузке, а также при изменении размера.

Есть ли лучший способ переписать это более компактно?

$('.content .right').width($(window).width() - (480));
$(window).resize(function(e) {
    $('.content .right').width($(window).width() - (480));
});

person eozzy    schedule 29.12.2009    source источник


Ответы (5)


Вы можете привязаться только к событию resize и запускать это событие автоматически при загрузке:

// Bind to the resize event of the window object
$(window).on("resize", function () {
    // Set .right's width to the window width minus 480 pixels
    $(".content .right").width( $(this).width() - 480 );
// Invoke the resize event immediately
}).resize();

Последний вызов .resize() запустит этот код при загрузке.

person Sampson    schedule 29.12.2009
comment
@kzh У вас были проблемы с .resize? Это стандартное использование метода, поскольку в документации указано: Свяжите обработчик событий с событие JavaScript изменения размера или запуск этого события для элемента. - person Sampson; 17.04.2013
comment
@JonathanSampson Нет. Без проблем. Просто показываю новый синтаксис. - person kzh; 18.04.2013
comment
@kzh .trigger и .resize оба из jQuery 1.0. - person Sampson; 18.04.2013
comment
почему .resize () вызовет его при загрузке? - person Claudiu Creanga; 12.06.2015
comment
Вы, сэр, заслуживаете печенья. - person Gokhan Sari; 02.01.2017
comment
@ Сэмпсон, в чем логика? - person borayeris; 21.06.2017

Я думаю, что лучшим решением будет просто привязать его также к событию загрузки:

$(window).on('load resize', function () {
    $('.content .right').width( $(this).width() - 480 );
});
person Hativ    schedule 13.07.2014
comment
Я согласен. Это самый чистый путь. - person Alex Weber; 27.12.2014

Приятно заметить повторяющуюся логику и вместо этого разбить ее на функцию:

function sizing() {
  $('.content .right').width($(window).width() - 480);
}

$(document).ready(sizing);
$(window).resize(sizing);
person Emil Vikström    schedule 29.12.2009
comment
Спасибо, это сработает как при готовности DOM, так и при изменении размера окна. - person Wasim Shaikh; 12.09.2013

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

$(document).ready(function() {
  var adjust_size = function() {
    $('.content .right').width($(window).width() - 480);
  };
  adjust_size();
  $(window).resize(adjust_size);
});

Я назвал функцию adjust_size, потому что предпочитаю глаголы для функций, ориентированных на действие.

person David J.    schedule 29.10.2012
comment
Это был единственный способ заставить его работать для сценария, который я использовал. - person Nick W.; 26.07.2017

Простой способ:

html:
<body onload="$(window).resize()"> 

javascript:
$(window).resize(function () { 
...
});
person mmg    schedule 05.09.2016