Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   getComputedStyle не всегда возвращает значения (https://javascript.ru/forum/events/68000-getcomputedstyle-ne-vsegda-vozvrashhaet-znacheniya.html)

Lipon 20.03.2017 00:02

getComputedStyle не всегда возвращает значения
 
Нужно мне получить значения стилей в пикселях которые браузер рендерит. Для этого использую getComputedStyle, но width, height, line-height отдаются всегда нормально, а вот пайдинги и марджины отдаются через раз и вместо значений обычно всегда 0px, но волей случая иногда возвращает нормальные значения. Притом рандомно, то отдает их, то не отдает и так во всех браузерах. Не пойму куда копать. Заранее спасибо за помощь.

Использую для сборки webpack2("style-loader", "css-loader?localIdentName=[hash:base64:10]") +
babel ([
["es2015", {
modules: false
}],
"stage-0"
].

Список стилей:
  • "width",
  • "height",
  • "line-height",
  • "padding-top",
  • "padding-right",
  • "padding-bottom",
  • "padding-left",
  • "margin-top",
  • "margin-right",
  • "margin-bottom",
  • "margin-left"

getStyle
property = this.toCamelCase(property);

let ret, styles, view = element.ownerDocument.defaultView;

if (!view || !view.opener) {
    view = window;
}

styles = view.getComputedStyle(element, null);

return styles[property];


Document ready event listener

let eventCallback = function () {
    document.removeEventListener("DOMContentLoaded", eventCallback, false);
    callback();
};

document.addEventListener("DOMContentLoaded", eventCallback, false);

Lipon 20.03.2017 01:40

Методом проб ошибок помогла замена callback();
на
setTimeout(callback, 500);

Но меня такое решение не устраивает, теряем .5 секуды, перед обработкой документа. Как отловить момент полной загрузки страницы?

рони 20.03.2017 02:23

Lipon,
window.addEventListener("load",callback)

Lipon 20.03.2017 04:43

Цитата:

Сообщение от рони (Сообщение 447877)
Lipon,
window.addEventListener("load",callback)

Пробовал, window.removeEventListener("load", eventCallback, false); тоже срабатывает раньше чем страница может отдать присчитанное значение getComputedStyle.
Так же document.readyState в последнем едж, фоксе и хроме не переходит в состояние complete, я пробовал циклом считывать в eventCallback, цикл зависает так как после состояния interactive нет изменений...


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