Можно ли это как то упростить:
function is_iOS() {
var iDevices = ['iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod'];
while (iDevices.length) {
if (navigator.platform === iDevices.pop()) return true;
}
return false;
}
function fixedRec(el) {
if($(document).scrollTop() >= el.prev().offset().top + el.prev().outerHeight()) {
if($(document).scrollTop() < el.parent().outerHeight() - ($(window).outerHeight() / 1.5)) {
if(is_iOS() || $(window).width() < 1000){
el.removeClass('fixed').addClass('absolute').css({top: (top - 150)});
} else {
el.removeAttr('style').removeClass('absolute').addClass('fixed');
}
} else {
el.removeAttr('style').removeClass('fixed').addClass('absolute');
}
} else {
el.removeAttr('style').removeClass('absolute').removeClass('fixed');
}
}
Вместо этой жести
function is_iOS() {
var iDevices = ['iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod'];
while (iDevices.length) {
if (navigator.platform === iDevices.pop()) return true;
}
return false;
}
Можно сделать.
function checkIOS() {
var iDevices = ['iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod'];
return iDevices.includes(navigator.platform);
}
console.log(checkIOS());
Есть еще способ с .test(), но у вас уже есть массив.
Вы уверены, что там должно быть "ИЛИ" в проверке на устройства и размер окна?
is_iOS переписываем используя Array.prototype.some
function is_iOS() {
var iDevices = ['iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod'];
return iDevices.some(dev => dec === navigator.platform);
}
fixedRec делаем чуть менее выпуклым, за счёт замены else на return.
Обязательно добавляем комментарии, что происходит в каждом конкретном случае. Например: Долистали до следующего элемента.
function fixedRec(el) {
let top = $(document).scrollTop();
if (top < el.prev().offset().top + el.prev().outerHeight()) {
// comment
el.removeAttr('style').removeClass('absolute').removeClass('fixed');
return;
}
if (top >= el.parent().outerHeight() - ($(window).outerHeight() / 1.5)) {
// comment
el.removeAttr('style').removeClass('fixed').addClass('absolute');
return;
}
if(is_iOS() || $(window).width() < 1000){
el.removeClass('fixed').addClass('absolute').css({top: (top - 150)});
} else {
el.removeAttr('style').removeClass('absolute').addClass('fixed');
}
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости