Javascript-форум (https://javascript.ru/forum/)
-   Библиотеки/Тулкиты/Фреймворки (https://javascript.ru/forum/library-toolkit-framework/)
-   -   Модуль для работы с геометрией окна (https://javascript.ru/forum/library-toolkit-framework/4931-modul-dlya-raboty-s-geometriejj-okna.html)

JSprog 31.08.2009 10:57

Модуль для работы с геометрией окна
 
Хочу представить вам ещё один модуль Дэвида Флэнагана.
Для работы с геометрией окна.
Задача модуля:представить кросс-браузерные методы для определения:
1)положения окна на экране
2)размеров клиентской области окна
3)размеров документа
4)смещения документа относительно окна
var Geometry = {};
if (window.screenLeft === undefined) { // Для IE и других
Geometry.getWindowX = function() { return window.screenLeft; };
Geometry.getWindowY = function() { return window.screenTop; };
}
else if (window.screenX) { // Для Firefox и других
Geometry.getWindowX = function() { return window.screenX; };
Geometry.getWindowY = function() { return window.screenY; };
}


if (window.innerWidth) { // Все броузеры, кроме IE
Geometry.getViewportWidth = function() { return window.innerWidth; };
Geometry.getViewportHeight = function() { return window.innerHeight; };
Geometry.getHorizontalScroll = function() { return window.pageXOffset; };
Geometry.getVerticalScroll = function() { return window.pageYOffset; };
}
else if (document.documentElement && document.documentElement.clientWidth) {
// Эти функции предназначены для IE и документов с объявлением DOCTYPE
Geometry.getViewportWidth =
function() { return document.documentElement.clientWidth; };
Geometry.getViewportHeight =
function() { return document.documentElement.clientHeight; };
Geometry.getHorizontalScroll =
function() { return document.documentElement.scrollLeft; };
Geometry.getVerticalScroll =
function() { return document.documentElement.scrollTop; };
}
else if (document.body.clientWidth) {
// Эти функции предназначены для IE без объявления DOCTYPE
Geometry.getViewportWidth =
function() { return document.body.clientWidth; };
Geometry.getViewportHeight =
function() { return document.body.clientHeight; };
Geometry.getHorizontalScroll =
function() { return document.body.scrollLeft; };
Geometry.getVerticalScroll =
function() { return document.body.scrollTop; };
}


// Следующие функции возвращают размеры документа.
// Они не имеют отношения к окну, но бывает удобно иметь их.
if (document.documentElement && document.documentElement.scrollWidth) {
Geometry.getDocumentWidth =
function() { return document.documentElement.scrollWidth; };
Geometry.getDocumentHeight =
function() { return document.documentElement.scrollHeight; };
}
else if (document.body.scrollWidth) {
Geometry.getDocumentWidth =
function() { return document.body.scrollWidth; };
Geometry.getDocumentHeight =
function() { return document.body.scrollHeight; };
}

Kolyaj 31.08.2009 12:02

JSprog,
ты в наборе текста тренируешься? Или тебе их даже перепечатывать не приходится?

B~Vladi 31.08.2009 12:09

Функции определения клиентской области неправильные.

JSprog 31.08.2009 12:10

Цитата:

Сообщение от Kolyaj
Функции определения клиентской области неправильные.

Почему?

Kolyaj 31.08.2009 12:11

JSprog,
во-первых, это не моя цитата. Во-вторых, ты сам-то проверял все те функции, которые постишь?

JSprog 31.08.2009 12:13

Я хз почему написано что твоя=)
Да всё работет

JSprog 31.08.2009 12:20

А если ты про то что там есть отдельно для doctype и без него то это для старых версий ИЕ

Kolyaj 31.08.2009 12:25

Цитата:

Сообщение от JSprog
Да всё работет

В скольких браузерах проверял?

И еще: если уж выкладываешь скрипты, так оформляй их нормально.

JSprog 31.08.2009 12:32

В ИЕ и в Мозиле(а значит и всех W3C браузерах)

B~Vladi 31.08.2009 12:33

Вот и без всяких DOCTYPE

function getClientWidth(){return document.compatMode=='CSS1Compat'&&!window.opera?document.documentElement.clientWidth:document.body.clientWidth;}
function getClientHeight(){return document.compatMode=='CSS1Compat'&&!window.opera?document.documentElement.clientHeight:document.body.clientHeight;}

JSprog 31.08.2009 12:34

Тут только для ИЕ!
И не два а один метод!
И то не работает!
Гений блин...

B~Vladi 31.08.2009 12:35

Цитата:

Сообщение от JSprog
В ИЕ и в Мозиле

Этого мало. Судя по твоему выводу:
Цитата:

Сообщение от JSprog
а значит и всех W3C браузерах

Ты ещё не успел хапнуть на себе всех приколов браузеров:)

B~Vladi 31.08.2009 12:36

Цитата:

Сообщение от JSprog
Тут только для ИЕ!

У меня или у тебя?!

B~Vladi 31.08.2009 12:39

Цитата:

Сообщение от JSprog
И то не работает!

Что у тебя не работает?!

JSprog 31.08.2009 12:39

У тебя
3 Дабл поста это обязательно?

B~Vladi 31.08.2009 12:40

У меня всё и везде работает:)

JSprog 31.08.2009 12:40

Ты там } не поставил...

B~Vladi 31.08.2009 12:41

Аха, исправил.

ZoNT 31.08.2009 12:41

Цитата:

Сообщение от JSprog
Ты там } не поставил...

Это защита от копипастеров...

B~Vladi 31.08.2009 12:44

Цитата:

Сообщение от ZoNT
Это защита от копипастеров...

:write: точно

JSprog, вопрос определения размеров клиентской области как раз создаёт трудности в опере(причём в разных версиях - по-разному), которую ты не тестил.

JSprog 31.08.2009 12:47

А как они работают?

B~Vladi 31.08.2009 12:47

Цитата:

Сообщение от JSprog
У тебя
3 Дабл поста это обязательно?

У тебя 10 тем флуда, так надо?!

JSprog 31.08.2009 12:48

В опере мой код тоже работает
Цитата:

Сообщение от B~Vladi
У тебя 10 тем флуда, так надо?!

:write:

Kolyaj 31.08.2009 12:52

Цитата:

Сообщение от JSprog
в Мозиле(а значит и всех W3C браузерах)

Забавный вывод.

B~Vladi 31.08.2009 12:53

Цитата:

Сообщение от JSprog
А как они работают?

Эта тема уже разбиралась тут.

JSprog 31.08.2009 12:54

Ок


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