Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.03.2017, 00:02
Новичок на форуме
Отправить личное сообщение для Lipon Посмотреть профиль Найти все сообщения от Lipon
 
Регистрация: 19.03.2017
Сообщений: 3

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 в 00:07.
Ответить с цитированием
  #2 (permalink)  
Старый 20.03.2017, 01:40
Новичок на форуме
Отправить личное сообщение для Lipon Посмотреть профиль Найти все сообщения от Lipon
 
Регистрация: 19.03.2017
Сообщений: 3

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

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

Последний раз редактировалось Lipon, 20.03.2017 в 09:00.
Ответить с цитированием
  #3 (permalink)  
Старый 20.03.2017, 02:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Lipon,
window.addEventListener("load",callback)
Ответить с цитированием
  #4 (permalink)  
Старый 20.03.2017, 04:43
Новичок на форуме
Отправить личное сообщение для Lipon Посмотреть профиль Найти все сообщения от Lipon
 
Регистрация: 19.03.2017
Сообщений: 3

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

Последний раз редактировалось Lipon, 20.03.2017 в 09:15.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему возвращает значения RGB каналов? Black_Star jQuery 14 06.02.2017 04:49
Input type="time" + JS +Safari (iPhone) dpts Opera, Safari и др. 0 21.09.2016 07:24
Input type="time" + JS +Safari (iPhone) dpts Opera, Safari и др. 0 21.09.2016 07:24
Передача нового значения value в select tvixa Элементы интерфейса 5 08.09.2015 15:41
Множественные значения в input - ЗА ВОЗНАГРАЖДЕНИЕ! Pb160 Events/DOM/Window 0 03.08.2015 12:29