Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.02.2013, 03:07
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Отлов изменения размера элемента. Какие способы есть?
Стоит задача: ловить изменения размеров определенного div'а. Суть - есть некий виджет, ему нужно реагировать на изменения его размера.

Изменение размеров может наступить по множеству причин:
1) изменение размеров окна пользователем
2) изменение размеров самого элемента пользователем через нативный ресайзер (css: resize:both)
3) изменение размеров предков любым способом, в случае когда у нашего элемента заданы размеры в процентах.

Какие есть варианты?

Deff уже предложил варианты с iframe и конечно же setInterval

Для отслеживания прямого изменения размера через ресайзер можно отслеживать изменение атрибута style используя MutationObserver. Это не подходит в остальных случаях.
Ответить с цитированием
  #2 (permalink)  
Старый 05.02.2013, 03:10
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Тут более полный код «onresize» через фрейм => http://habrahabr.ru/post/166321/

Последний раз редактировалось Deff, 05.02.2013 в 03:13.
Ответить с цитированием
  #3 (permalink)  
Старый 05.02.2013, 04:53
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Простой пример - я делаю расширение для браузера, которое заменяет textarea на редактор кода. Редактор должен обновлять свой view при своем ресайзе. Тут только два варианта - setTimeout либо iframe. Тема , о которой говорят в комментах, типа приложение должно триггерить событие тут ваще не к месту. Короче, люди не думая комментят, считая что самые умные.

Может есть еще какие-нибудь интересные трюки?

И что насчет потребления ресурсов? Дорого ли стоит iframe?
Что указывать в src? вобще не указывать? Не будет ли проблем со всякими noscript и операми?
Ответить с цитированием
  #4 (permalink)  
Старый 05.02.2013, 11:00
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от danik.js
И что насчет потребления ресурсов? Дорого ли стоит iframe?
Пустой фрейм, (в отличие от фрейма с наличием src), - создаётся на странице в Опере и Хроме менее 25ms.
В в Опере и Хроме обычно тег следущий за пустым iframe исполняется - рендиться на странице уже при полностью исполненном в DOM элементе(т.е отследить загрузку пустого iframe скриптом, установленным сразу после тега <iframe в Опере и Хроме часто уже невозможно, (что легко делается при "непустом", т.е <iframe с наличием src и адресом )...В ИЕ 6 создание пустого фрейма менее 200 ms.


<script type="text/javascript">
var N=new Date().getTime();
function Tst(){
  N = new Date().getTime()-N;
  alert('Cкорость создания = '+N+'ms');
}

</script>
<!--тест -->
<div  id="Test" style="position:relative;border:red solid 1px;width:200px;height:100px;">
<iframe name="frame" width=100% height=100% style="position:absolute;z-index:-1" onload="Tst()"></iframe>
</div>


Пустой фрейм достаточно часто используется в javascript при создании пользовательских приложений с развязкой javascript библиотек.
К примеру на главной - используем для скорости только нативный ява-скрипт, в динамически создаваемом фрейме - подгружаем(создаем скриптом) тег скрипта подгружаемой библиотеки и необходимый контент,а по окончании работы, фрейм просто изымаем из Dom вместе с библиотеками.

Запускаем во фрейме библиотеку и выполняем чтение HTML на родителе фреймворком
<script>

function TestLibFrame() {
  window.docThis = frame1.parent.document;
  window.$$ = frame1.jQuery;
  var str = 'Запускаем jQuery на  странице без библиотеки:';
  alert(str +'\n\n' + $$("html",docThis).html()) 
} setTimeout("if('\v'=='v'){TestLibFrame()}",200); //Запуск для ИЕ;

function Funk0(aa) {
var a='Cтавим javascript - библиотеку во фрейм'
var iframe = aa
var iframeDoc = iframe.contentWindow.document;
var b = iframeDoc.createElement('div');
b.innerHTML=a;//alert(b.innerHTML)
iframeDoc.body.appendChild(b);
var s = iframeDoc.createElement('script');
s.setAttribute("type","text/javascript");
s.src = "http://yandex.st/jquery/1.4.4/jquery.min.js";
//s.setAttribute("onload","parent.TestLibFrame()");
s.onload = TestLibFrame;
b.appendChild(s);
}

</script>
<iframe name=frame1 onload="Funk0(this)"></iframe>

Последний раз редактировалось Deff, 08.02.2013 в 16:38.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отлов изменения input.value левым скриптом danik.js Общие вопросы Javascript 15 29.01.2013 01:41
какие есть учебники jQuery на русском? macdack Учебные материалы 3 08.10.2012 11:24
Есть скрипт "дата изменения страницы" на русском? Askarmod Общие вопросы Javascript 23 19.03.2012 10:02
Событие изменения элемента trikadin Events/DOM/Window 2 13.06.2011 23:02
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37