Jump to content
  • 0

Обновление значения


Critical Error
 Share

Question

Ребята, здравствуйте. Подскажите, пожалуйста, как для var сделать отслеживание изменения значения:

var width = $('#content').width();

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

Link to comment
Share on other sites

13 answers to this question

Recommended Posts

  • 0

Да, повесил. Все нужные переменные определяются единственный раз в начале скрипта и являются общими для всех функций ниже.

При ресайзе идет работает

$(window).bind('resize', function(){
// объявление переменных по новой
// скрипт реинициализации.
});

Получается так, что при ресайзе переменные обновляются и все нормально. Ширина объявляется по новой. А вот те функции, которые ниже, в них, при уже измененной ширине браузера, переменные берутся из первоначальных, кот. в начале скрипта.

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

Link to comment
Share on other sites

  • 0

Ну так организуйте некое хранилище для данных, которые должны быть доступны всем вашим функциям :) Например, с использованием замыкания: http://jsfiddle.net/4aRZZ/

Я сам чайник в JS, поэтому сейчас прибегут фанаты и напинают.

Link to comment
Share on other sites

  • 0
  On 9/15/2012 at 10:04 AM, Critical Error said:

Интересует вот что - как правильно оформить функцию в определении переменной, даже через тот setInterval чтобы она возвращала значение этой ширины?

Почитайте про область видимости переменных. Переменная сначала ищется в scope функции, которая к ней обращается, потом у родителя и так далее. Самый верхний родитель - window, но загаживать глобальную область видимости - это не по-джедайски. Я сейчас как раз пытаюсь разобраться с замыканиями и инкапсуляцией данных в js :)

Если исходить из примера выше:

  1. Функция clickHandler, при обращении к переменной clicks, ищет ее в своей области видимости. А нету.
  2. Ищет у родителя (countClicks). Находит и использует.

Тот же пример, но с таймером: http://jsfiddle.net/4aRZZ/1/

По правде говоря, я надеюсь что в этот топик заглянет JS спец и укажет на мои ошибки, потому как я только начинаю понимать, как это работает :)

Edited by hedgehog
Link to comment
Share on other sites

  • 0
  On 9/15/2012 at 9:35 AM, Critical Error said:
Чтобы не писать в каждой функции объявление этих переменных, хочется понять как можно эти первоначальные значения обновлять если происходит ресайз.
  On 9/15/2012 at 9:58 AM, hedgehog said:
Ну так организуйте некое хранилище для данных, которые должны быть доступны всем вашим функциям :) Например, с использованием замыкания

$( window ).on( 'resize', (function() {
var x = 1;
return function() {
alert( x );
}
}()));

hedgehog,

var countclicks = (function() {
// some code
})(); // <--

var countclicks = (function() {
// some code
}()); // <-- не критично, но на мой взгляд этот вариант предпочтительней

  On 9/15/2012 at 10:12 AM, hedgehog said:
По правде говоря, я надеюсь что в этот топик заглянет JS спец и укажет на мои ошибки, потому как я только начинаю понимать, как это работает :)

я не спец, но для начала запомните, что функции в js имеют лексическую область видимости

  On 9/15/2012 at 10:12 AM, hedgehog said:
сейчас как раз пытаюсь разобраться с замыканиями и инкапсуляцией данных в js :)

коротко о главном

http://javascript.ru/forum/misc/31048-obyasnite-pochemu-funkciya-rabotaet-imenno-tak-2.html#post201858

http://javascript.ru/forum/misc/31048-obyasnite-pochemu-funkciya-rabotaet-imenno-tak-2.html#post201974

Edited by nerv
  • Like 1
Link to comment
Share on other sites

  • 0

А у этого #content ширина, случайно, не в процентах задана? Тогда нужно смотреть какое-нибудь innerWidth или outerWidth, потому что width как бы в процентах, так и будет. Я так это понимаю. Или в жиквере всё не так?

Link to comment
Share on other sites

  • 0
  On 9/15/2012 at 7:46 PM, Int said:

А у этого #content ширина, случайно, не в процентах задана? Тогда нужно смотреть какое-нибудь innerWidth или outerWidth, потому что width как бы в процентах, так и будет. Я так это понимаю. Или в жиквере всё не так?

http://jsfiddle.net/5JEF8/1/

Edited by nerv
Link to comment
Share on other sites

  • 0
  On 9/15/2012 at 7:38 PM, nerv said:
hedgehog,

var countclicks = (function() {
// some code
})(); // <--

var countclicks = (function() {
// some code
}()); // <-- не критично, но на мой взгляд этот вариант предпочтительней

А в чем разница? Я пока не до конца понимаю смысл этих скобок.

  On 9/15/2012 at 7:38 PM, nerv said:
  nerv said:
смысл замыкания в том, чтобы оставить сборщик мусора не у дел :)

Эпично!

Link to comment
Share on other sites

  • 0
  On 9/16/2012 at 7:52 AM, hedgehog said:
Я пока не до конца понимаю смысл этих скобок.

var countclicks = (function() {

// some code

}());

скобки группировки

скобки вызова

Особенности функций в JavaScript

  On 9/16/2012 at 7:52 AM, hedgehog said:
А в чем разница?

стр.98

Edited by nerv
  • Like 1
Link to comment
Share on other sites

  • 0
  On 9/16/2012 at 8:54 AM, nerv said:

Вашу машу... Почему этого всего нету в десятках статей о замыканиях, которые я читал? После всего прочитанного возникает неприятная ситуация: знаешь, что можно сделать так и так, но понятия не имеешь, что конкретно делает этот код и как его применить самому.

Спасибо за pdf'ку!

Link to comment
Share on other sites

  • 0

Короче, я психнул :), и сделал объявление переменных в каждой функции, их там немного. Вот что теперь загвоздка в том, что при сворачивании/разворачивании по кнопке окна браузера не срабатывает resize.

Вот что вышло:

  Reveal hidden contents

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy