Как определить модель iPad через JavaScript?
На «Хабре» наткнулся на любопытный код на JS, который определяет с каким Айпадом мы имеем дело — первым, вторым или третьим. Третий ото всех остальных отличить просто — у него в свойстве «devicePixelRatio» значение „2“ записано. А первый от второго как?
Оказывается способ есть — надо в событии «devicemotion» проверить есть ли у устройства акселерометр. Не знаю для чего это всё может пригодиться (разве что отключать
Я немного переписал код, сделал из него функцию, чуть упростил и навёл порядок. Получился вот такой код:
// функция для определения модели Айпада
function detectIPadVersion(callback, undefined) {
if ('ondevicemotion' in window) {
window.addEventListener('devicemotion', function self(event) {
if (~navigator.platform.indexOf('iPad')) {
var version = event.acceleration ? (window.devicePixelRatio === 2) + 2 : 1;
}
window.removeEventListener('devicemotion', self);
callback(version);
}, false);
} else {
callback(undefined);
}
};
// пример вызова, в callback будет передан номер модели (1,2 или 3) или undefined, в случае, если это не iPad
detectIPadVersion(alert);
Комментарии 26
Можно, конечно!
Изящно же
А что вассмущает-то?
Это как?
спасибо…
Комментарий для Евгения Степанищева:
Инвертировать условие, чтобы первым шел короткий блок,
двух-трех строках, быстренько разделался с формальным ответвлением и занимаешься реальным делом. Когда сначала идет длинный блок, то когда настанет else, уже успеешь потерять нить, к чему именно был этот else. Это расположение физически рядом тех блоков, которые рядом логически. Цена — ухудшение читаемости условия if, лишнее отрицание не украшает программу.
if (!('ondevicemotion' in window)) {
callback(undefined);
} else {
//длинный блок
}
Смысл в том, что когда сначала идет простое действие, проще уследить за логикой алгоритма, вся конструкция «if then else» легко обозрима, находится на
Ага, изящества через край. И первый же камент, где переспрашивается, что оно должно делать.
Это показатель чего?
Мне ещё интересно, откуда у вас столько желчи.
Исключительно того, что это не просто и не порядок.
Желчи? У меня? Вы хотите поговорить об этом?
Комментарий для Eyeless:
Это не наведение порядка, это упрощение. Это очень просто, правда. Я, конечно, понимаю, что программисты вырождаются, но не настолько же.
Желчи. У вас. Нет.
var a = condition ? 2 : 3; куда проще. И вопросов типа первого не вызывает. И даже уже присутствует в той же строчке.
var a = condition + 2 куда проще и вопросов никаких не вызывает.
Вызывает, прочитайте первый же(!) комментарий к заметке.
Что ж до
var version = 1 + (event.acceleration !== undefined) + (window.devicePixelRatio === 2);
Комментарий для Eyeless:
Я не знаю квалификации Неуча, но возможно его ник говорящий.
До какогоконца-то? То, что вы написали, мне не нравится, мне нравится мой вариант. Кстати, с чем вы спорите, я не понял? Вот с этой единственной строчкой? Ну так скопируйте код себе, исправьте на то что нравится и перестаньте мне морочить голову.
Как вы умудряетесь прочитывать не то, что написано?
Он не может одновременно быть понятным и нравится что ли? Ваш вариант тоже простой, но он мне не нравится. Почему я должен написать так как вы предлагаете — мне не ясно. Скопируйте себе и пишите как нравится вам.
tsya.ru
Просто не нужно называть приведение к нравящемуся варианту «упрощением и наведением порядка».
Всё что я хотел сказать, я уже сказал.