2013-11-29 4 views
0

У меня проблема с window.resize. Мой код js/jquery находится здесь

var x = $(window).width(); 
var y = $(window).height(); 
var z = $('#card').height(); 
var a = z + 140; // !!!zmienic gdy zmiana marginesu z gory lub paddingu (100 margin + 20x2 padding) 
var b = 1.78 * y; 
var c = 1.78 * a; 
function updateBodySize(){ 
    x = $(window).width(); 
    y = $(window).height(); 
    z = $('#card').height(); 
    a = z + 140; // !!!zmienic gdy zmiana marginesu z gory lub paddingu (100 margin + 20x2 padding) 
    b = 1.78 * y; 
    c = 1.78 * a; 
    if (c>b) { 
     if (x>c) { 
      $('body').css({'background-size': x + 'px auto'}); 
     } 
     else { 
      $('body').css({'background-size': 'auto ' + c + 'px'}); 
     } 
     $('body').css({'height': a + 'px'}); 
    } 
    else { 
     if (x>b) { 
      $('body').css({'background-size': x + 'px auto'}); 
     } 
     else { 
      $('body').css({'background-size': 'auto ' + b + 'px'}); 
     } 
     $('body').css({'height': y + 'px'}); 
    } 
} 
$(document).ready(updateBodySize()); //kiedy zaladowany 
$(window).resize(updateBodySize()); //kiedy zmiana rozmiaru 

Комментарии на польском языке, но они не важны. Я хочу запустить функцию updateBodySize при каждом изменении размера браузера, но теперь эта функция запускается только тогда, когда документ готов (так что я знаю, что функция работает правильно) (строка последняя, ​​но одна), и похоже, что последняя строка игнорируется. Неправильно ли эта строка $(window).resize(updateBodySize());? Или что-то случилось с моей функцией? Я проверил этот код в Chrome 33.

ответ

2

ваших последних двух строках, кажется, проблема здесь:

$(document).ready(updateBodySize()); 
$(window).resize(updateBodySize()); 

Должно быть:

$(document).ready(updateBodySize); 
$(window).resize(updateBodySize); 

Примечание сбрасывание () из updateBodySize - ваша цель, чтобы передать функции updateBodySize до .ready и .resize, а не его результат. При вызове функции вместо этого, что вы делаете, передавая результат от updateBodySize() к функциям .ready и .resize, в сущности:

$(document).ready(null); 
$(window).resize(null); 

Который, как вы заметили, ничего не делает, кроме того, что updateBodySize() делает первый (два) раза, когда вы его назвали. Снимите (), и он будет рассматриваться как обработчик событий, который вы ожидаете.

PS:

Если вы не используете первый блок

var x = $(window).width(); 
var y = $(window).height(); 
var z = $('#card').height(); 
var a = z + 140; 
var b = 1.78 * y; 
var c = 1.78 * a; 

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

+0

Спасибо, теперь все работает :) Но мне интересно, почему эта функция работала один раз после загрузки страницы, если я поместил результат в '$ (document) .ready();', а не сам по себе. – bartoszka1996

+0

Это происходит (дважды, фактически), когда страница загружается, потому что ваш исходный код дважды вызывает функцию: один раз в '.ready (updateBodySize()) и один раз в' .resize (updateBodySize()) '. Каждый из этих * первых * запускал функцию, * затем * передавал результат функции на метод. –

+0

Хорошо, спасибо за помощь и объяснение – bartoszka1996

0

Попробуйте это:

$(function(){updateBodySize();}); //kiedy zaladowany 
$(window).resize(function(){updateBodySize();}); 
1

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

$(document).ready(function() { 
    updateBodySize(); 
}); //kiedy zaladowany 
$(window).resize(function() { 
    updateBodySize(); 
}); //kiedy zmiana rozmiaru 
+1

Вы правы, но, возможно, вы также можете использовать '$ (document) .ready (updateBodySize);' вместо этого. – Marco

0
$(document).ready(function() { 
    $(window).resize(updateBodySize()); 
}); 
+0

Не нужно! '$ (window)' всегда работает, даже если страница не полностью загружена, поскольку перед обработкой определяется «окно». –

+0

Это не обязательно, и это тоже неправильно: как объяснено в утверждённом ответе, передача результата updateBodySize (путем вызова updateBodySize()) ничего не сделает. – Gwenc37

1

Или вы могли бы попробовать это:

окно .onresize = updateBodySize;

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