Эмуляция clientHeight и clientWidth

SKolontay ✔

Client
Регистрация
20.08.2016
Сообщения
96
Благодарностей
30
Баллы
8
Если посмотреть на https://whoer.net/#extended в поле "window size", то значение для этого поля берется на основе document.documentElement.clientHeight и document.documentElement.clientWidth, а не из свойств объекта window.screen

Clip2net_171013010053.png

В результате чего, если на рабочей машине реальный размер экрана, к примеру, 1366x768, а надо надо сэмулировать размера окна 1600x900, то размер рабочей области максимум эмулируется 1333x666.

Плюс я смотрю люди уже задавались вопросами (например, тут http://zennolab.com/discussion/threads/window-size-vopros-na-kotoryj-nikto-ne-znaet-otvet.33212/), как эмулировать это поле правильно и так и не поняли, откуда берутся эти значения.

Поэтому предлагаю добавить эмуляцию полей:
  1. document.documentElement.clientHeight
  2. document.documentElement.clientWidth
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 480
Благодарностей
5 917
Баллы
113
Как мне пояснили разработчики. в лоб эмулировать не получится, потому что поедет верстка на сайте.
Правильно это использовать через instance.SetWindowSize или что-то типа этого, а потом переходить на страницу.
Вообщем вопрос непростой и требует разбора. Попробуем сделать функцию, которая будет эмулировать viewPort, т.е. подставлять нужный размер в браузере, и если он будет не умещаться. то будут появляться скролы.
 

SKolontay ✔

Client
Регистрация
20.08.2016
Сообщения
96
Благодарностей
30
Баллы
8
Правильно это использовать через instance.SetWindowSize или что-то типа этого, а потом переходить на страницу.
Это не спасет от ситуаций:

если на рабочей машине реальный размер экрана, к примеру, 1366x768, а надо надо сэмулировать размера окна 1600x900, то размер рабочей области максимум эмулируется 1333x666.
Я создал тему http://zennolab.com/discussion/threads/ehmuljacija-razmera-okna-brauzera-ego-polozhenija-i-t-d.42221/ по поводу эмуляции JS свойств, касающиеся размеров окна, его положения и т.д. Может вам пригодится, когда будете принимать решение подойти к данному вопросу системно.
 

SKolontay ✔

Client
Регистрация
20.08.2016
Сообщения
96
Благодарностей
30
Баллы
8
Кстати, походу баг обнаружил. Если использовать
Код:
instance.SetWindowSize(2000, 900);
то ничего не изменяется

Если использовать:
Код:
project.Profile.ScreenSizeHeight = 900;
project.Profile.ScreenSizeWidth = 2000;
то меняются window.screen.width и window.screen.height

Приложил проект, в котором тестировал. Тестировал в ZP 5.12.0.0

Это баг? Или я не понимаю, как SetWindowSize() должна работать?
 

Вложения

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 125
Баллы
113
  • Спасибо
Реакции: copper12 и zortexx

SKolontay ✔

Client
Регистрация
20.08.2016
Сообщения
96
Благодарностей
30
Баллы
8

SKolontay ✔

Client
Регистрация
20.08.2016
Сообщения
96
Благодарностей
30
Баллы
8
Если посмотреть на https://whoer.net/#extended в поле "window size", то значение для этого поля берется на основе document.documentElement.clientHeight и document.documentElement.clientWidth, а не из свойств объекта window.screen
Тут я был не прав. Посмотрел JS скрипты от whoer.net. В зависимоти от условия, значения там берутся на основе:
  • document.body.offsetWidth
  • document.body.offsetHeight
  • document.body.width
  • document.body.height
  • document.body.clientWidth
  • document.body.clientHeight

Сам кусок JS скрипта от whoer.net:

Код:
function get_window_size() {
    var win_width = "?";
    var win_height = "?";
    try {
        if (document.all) {
            win_width = document.body.offsetWidth;
            win_height = document.body.offsetHeight;
        } else if (document.layers) {
            win_width = document.body.width;
            win_height = document.body.height;
        } else if (document.body.clientWidth != null) {
            win_width = document.body.clientWidth;
            win_height = document.body.clientHeight;
        }
    } catch (e) {};
    return win_width + "x" + win_height +
        " (" + screen.width + "x" + screen.height + ")";
}
 

topor88

Новичок
Регистрация
24.11.2017
Сообщения
6
Благодарностей
0
Баллы
1
Как мне пояснили разработчики. в лоб эмулировать не получится, потому что поедет верстка на сайте.
Правильно это использовать через instance.SetWindowSize или что-то типа этого, а потом переходить на страницу.
Вообщем вопрос непростой и требует разбора. Попробуем сделать функцию, которая будет эмулировать viewPort, т.е. подставлять нужный размер в браузере, и если он будет не умещаться. то будут появляться скролы.
Админы обратите внимание на http://zennolab.com/discussion/threads/planiruetsja-li-dobavit-podmenu-webgl.42451/
 

Кто просматривает тему: (Всего: 3, Пользователи: 0, Гости: 3)