Pull to refresh
0
0

User

Send message
>И будет ли затронут тот или иной элемент зарание не известно.

Почему же не известно? Если верить статьям, то:
Incremental reflow подразумевает отложенное выполнение, т.е. объединение всех заданий по вычислениям для последующей обработки (нечто, напоминающее пакетный режим). Однако любые дополнительные запросы к системе за вычислениями вызывают Reflow method корневой структуры-html, от которой начинается рекурсивное движение к целевой структуре по дереву документа и выполнение вычислений на каждом этапе. И тут, по причине асинхронной природы этого процесса, начинается еще и одновременное выполнение всех тех задач, которые были ранее поставлены в очередь.

>Если можете поправить определение reflow чтобы это было понятно - внесите свой вклад :)

Если бы мог, то уже бы внес. ;)
Хотя, как говорится, попытка не пытка, и если в качестве базиса выбрать статью Notes on HTML Reflow, то можно попытаться определиться следующим образом.
Reflow - это вычисление параметров геометрии форматируемых структур. В HTML такая структура, как правило, соответствует одному элементу, и она (эта структура) имеет форму прямоугольника (при вычислениях используются его высота, ширина и отступ от родительской структуры).

>Нужно подобрать лучший параметр ветвления вместо window.GeckoActiveXObject.

Было бы разумно проверять в условии наличие тех свойств и методов, которые необходимо использовать:
if (document.defaultView && …

>Т.о. "универсальным решением" будет функция isHidden. ;)

Обе isHidden жестко привязаны к имени класса, и, следовательно, не могут называться универсальными. К тому же та, что внутри isHiddenFast будет работать некорректно (проблема: return !!p && p!=b; => нет проверки класса элемента, если элемент - это body). Чтобы увидеть это, измените ранее упомянутый пример на:

<body class='hide'>
<span id='test'>test</span>
</body>
>Коммитятся все отложенные reflow, а не только те...

Вы ведь только теперь написали: "не только те" (об этом и речь).

>Понятно почему? Если нет...

А вот так не надо.

>Мы получили универсальное решение...

Проверьте свое "универсальное решение" на этом примере:

<div class='hide'>
<span id='test'>test</span>
</div>

<script type='text/javascript'>

alert(isHiddenFast(document.getElementById('test')));

</script>

Я извиняюсь за то, что невнятно высказался. Лучше я приведу пример. В вашем тесте в функцию test_offset добавьте вот это:

var o = document.getElementsByTagName('meta').item(0);

И пусть в цикле в вызове функции fnOffset будет именно этот аргумент (переменная "o" вместо переменной "с").
Здравствуйте, автор статьи!
Ответьте, пожалуйста, на следующий вопрос (если ответ не является секретом). На основании чего Вы сделали вывод о том, что запрашивая offsetHeight, мы "измеряем" элемент, что вынуждает браузер сделать reflow? Мне понятно то, что таким образом мы "измеряем" элемент, но почему этот процесс становится причиной повторного вывода (laying out) элемента?

Information

Rating
Does not participate
Registered