Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   jquery resize для div (а не только для window) (https://javascript.ru/forum/events/34788-jquery-resize-dlya-div-ne-tolko-dlya-window.html)

Vitaliy88 19.01.2013 13:05

jquery resize для div (а не только для window)
 
HELP ME!!!
Есть в JQUERY такая функция - resize:
пример её использования:
$(window).resize(function(){
alert('Размеры окна браузера изменены.');
}); - т.е если колёсиком изменить размер окна, то выведется сообщение.

Как сделать, чтобы тот же эффект получался при изменении размера любого блока, например так:
:( $('#blockdiv').resize(function(){
alert('Размеры окна браузера изменены.');

Похоже что resize применим только к элементу window, но наверняка есть способ для применения к другим элементам. Только как?
Подскажите, очень горит!

Serg_pnz 19.01.2013 13:42

Погуглить слабо?
http://kurilka.co.ua/archives/jquery-resize-textarea/

danik.js 19.01.2013 16:50

Serg_pnz, глаза разуй.
Vitaliy88, к сожалению нет такого. И вроде бы и не планируется. Как вариант решения - MutationObserver + MutationEvent (устарел) - с их помощью можно отследить изменение атрибута style. Подходит естественно только когда размеры элемента меняются путем установки style.width и style.height ...

danik.js 19.01.2013 16:51

Йопт...:blink:

Deff 19.01.2013 18:32

Vitaliy88, А кто меняет размер блока и почему?
(Возможно проще решать задачу с иного конца ?)
Ну или:

Таймер
<div  id="Test" style="position:relative;border:red solid 1px;width:200px;height:100px;"></div>

<script type="text/javascript">
var width="200px";
var height="100px";
setInterval (function (){
  var w=document.getElementById("Test").style.width;
  var h=document.getElementById("Test").style.height;
if(h!=height||width!=w){alert('Размеры div #Test изменены.');
  width=w;
  height=h;
}
},200);

setTimeout(function(){
  document.getElementById("Test").style.width='100px';
},3000)
</script>


Можно еще засунуть пустой фрейм с position:absolute
<div  id="Test" style="position:relative;border:red solid 1px;width:200px;height:100px;">
<iframe id="frame0" name="frame0" width=100% height=100% style="position:absolute;z-index:-1"></iframe>
Тут контент
</div>
<script type="text/javascript">
frame0.onresize = function(){
  alert('Размеры div #Test изменены.');
};
setTimeout(function(){
  document.getElementById("Test").style.width='100px';
},3000)
</script>

И отслеживать событие window.onresize внутри фрейма

danik.js 20.01.2013 07:18

Deff, спасибо за идею с iframe - это гениально )

Цитата:

Сообщение от Deff
А кто меняет размер блока и почему?

Согласен, обычно блок меняется скриптом, и тогда если это наш скрипт, то проблема в кривости нашего приложения. Но не всегда скрипт наш, тогда ниче не поделаешь.
Более того, у элемента может быть указано css-свойство resize: both и тогда изменение размеров может инициировать юзер, а не скрипт.
В DOM3 Events спецификации сказано, что браузер может слать это событие не только для defaultView. Вообще, тут налицо пробелы в спецификации, и помоему это никого не волнует.

Serg_pnz, какие же мы нежные и ранимые :haha: ..

smat 07.08.2013 11:29

Vitaliy88, у Бена Алмана есть решение этого вопроса - посмотрите тут:
http://benalman.com/code/projects/jq...amples/resize/

danik.js 07.08.2013 13:45

smat, ты опоздал. Deff уже предлагал таймер. Таймер - это самый кривой костыль который можно использовать.

smat 07.08.2013 14:57

Цитата:

Сообщение от danik.js (Сообщение 266279)
smat, ты опоздал. Deff уже предлагал таймер. Таймер - это самый кривой костыль который можно использовать.

Я не опоздал - был поставлен конкретный вопрос, и человек ждал на него конкретный ответ.
Deff пытался решить проблему с другого бока, но это может не подойти в других случаях.
А вот решение от Бена Алмана как раз и отвечает на поставленный вопрос.

danik.js 07.08.2013 15:08

К слову в WebKit есть один неприятный глюк. Выражается он в том что при изменении элемента с resize:both юзером (растягивая ресайзер) MutationObserver не реагирует на изменение свойства style (хотя оно изменяется). В других браузерах с этим проблем нет.


Часовой пояс GMT +3, время: 08:03.