20.05.2009, 14:54
|
|
Рассеянный профессор
|
|
Регистрация: 06.04.2009
Сообщений: 2,379
|
|
Сообщение от B~Vladi
|
если у Вас есть что-то конкретное - говорите...
|
prototype.1.6.1_rc2.js
str 3093
document.viewport = {
getDimensions: function() {
return { width: this.getWidth(), height: this.getHeight() };
},
getScrollOffsets: function() {
return Element._returnOffset(
window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
}
};
(function(viewport) {
var B = Prototype.Browser, doc = document, element, property = {};
function getRootElement() {
if (B.WebKit && !doc.evaluate)
return document;
if (B.Opera && window.parseFloat(window.opera.version()) < 9.5)
return document.body;
return document.documentElement;
}
function define(D) {
if (!element) element = getRootElement();
property[D] = 'client' + D;
viewport['get' + D] = function() { return element[property[D]] };
return viewport['get' + D]();
}
viewport.getWidth = define.curry('Width');
viewport.getHeight = define.curry('Height');
})(document.viewport);
Единственный минус: не учитывается compatMode. Но это сейчас уже не столь актуально.
Последний раз редактировалось Riim, 20.05.2009 в 14:56.
|
|
20.05.2009, 15:09
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Очень хрупко...
window.parseFloat(window.opera.version()) < 9.5
Не стал бы таким пользоваться...
|
|
20.05.2009, 15:10
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
prototype.1.6.1_rc2.js
не до конца понятно для чего этот код.
|
|
20.05.2009, 15:15
|
|
Рассеянный профессор
|
|
Регистрация: 06.04.2009
Сообщений: 2,379
|
|
Сообщение от B~Vladi
|
Очень хрупко...
|
У вас предвзятое мнение. Хрупко как раз у вас.
|
|
20.05.2009, 15:20
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от Riim
|
У вас предвзятое мнение. Хрупко как раз у вас.
|
Везде и в любых авторитетных источниках говорится о неправильном подходе к написанию кросс-браузерных функций. А именно о том, что почти во всех библиотеках и фреймворках есть проверка версии или типа браузера и не её основе строят логику. Это не есть гуд. Покажите мне кусок моего кода, где используется неправельный код.
|
|
20.05.2009, 15:24
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
ИМХО
писать такие вещи нада так, что бы в конце всех условий была такая контрукция, которая описана в доках W3C.
|
|
20.05.2009, 15:33
|
|
Рассеянный профессор
|
|
Регистрация: 06.04.2009
Сообщений: 2,379
|
|
Сообщение от B~Vladi
|
А именно о том, что почти во всех библиотеках и фреймворках есть проверка версии или типа браузера и не её основе строят логику. Это не есть гуд.
|
Мнение в некотором смысле верное, но и меру нужно знать. В Opera9.5+ верное значение перенесли в documentElement.clientHeight. Как вы это хотите определить с помощью:
Сообщение от B~Vladi
|
Вместо этого идёт проверка соответствующих своиств или методов
|
?
Факт остается фактом: пока ваш вариант некроссбраузерен. Вариант из PrototypeJs, по-вашему, плох, но он работает верно. Когда напишете вашим способом кроссбраузерный вариант, тогда и поговорим.
|
|
20.05.2009, 15:35
|
|
Рассеянный профессор
|
|
Регистрация: 06.04.2009
Сообщений: 2,379
|
|
Сообщение от B~Vladi
|
писать такие вещи нада так, что бы в конце всех условий была такая контрукция, которая описана в доках W3C.
|
К этому нужно стремиться, но при всем желании это не всегда возможно.
|
|
20.05.2009, 15:42
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от Riim
|
documentElement.clientHeight.
|
А в чём, собственно, проблема?! Пусть переносят...
Сообщение от Riim
|
Факт остается фактом: пока ваш вариант некроссбраузерен. Вариант из PrototypeJs, по-вашему, плох, но он работает верно. Когда напишете вашим способом кроссбраузерный вариант, тогда и поговорим.
|
Мой вариант кроссбраузен для тех, которые я описал (IE, FF, Opera всех актуальных версий) и я сомневаюсь, что в Safari или Chrome что-то не сработает. Зачем так утверждать?! Лучше напишите ту ф-цию, которая не работает в заявленных браузерах.
Никто не говорил, что вариант из prototype плох.
Какой способ мне написать?! аналог их объекта?!
|
|
20.05.2009, 15:57
|
|
Рассеянный профессор
|
|
Регистрация: 06.04.2009
Сообщений: 2,379
|
|
Сообщение от B~Vladi
|
А в чём, собственно, проблема?! Пусть переносят...
|
Давно уже перенесли. И в вашем скрипте это не учитывается.
Сообщение от B~Vladi
|
Мой вариант кроссбраузен для тех, которые я описал (IE, FF, Opera всех актуальных версий)
|
Это вы так думаете. Простейший пример: уберите DOCTYPE из документа или поставьте любой старый. Ну как, правильно работает?
Сообщение от B~Vladi
|
и я сомневаюсь, что в Safari или Chrome что-то не сработает.
|
Как же вы можете утверждать, что функции кроссбраузерены, если вы их даже толком не тестируете.
----
Вы слышите только себя и ваше мнение всегда самое правильное? Обсуждение теряет смысл.
|
|
|
|