(function (window) { "use strict"; var OPTIONS = window.SCREEN_SIZE_OPTIONS || {}; // wrapper + options.padding * 2 var sizeList = [980,1220,1340]; var nameList = ['small', 'medium', 'large']; var sizesLength = sizeList.length; var isBranding = false; var htmlElement = document.documentElement; var lastState, className; var options = { padding: 20, sideWidth: 140, largeSideWidth: 240, bannerStub: sizeList[0], minBranding: OPTIONS.minBranding || sizeList[1], maxBranding: 1920, classRe: /\s*screen_(\S+)/gi, classPrefix: 'screen_' }; // ширина экрана для больших ушей, когда они полностью помещаются для самого большого экрана var widthForLargeSide = sizeList[sizeList.length - 1] + (options.largeSideWidth + options.padding) * 2; function screenSize(branding) { var windowWidth = window.innerWidth; var actualWidth = windowWidth; var sideWidth, canBranding, canBrandingStub, size, result, state; // запоминаем состояние последнего вызова, например screenSize(true) в слоте п-брендинга if (typeof branding === 'boolean') { isBranding = branding; } if (isBranding) { sideWidth = windowWidth > widthForLargeSide && options.largeSideWidth || options.sideWidth; // используем 20 отступы по бокам под брендирование if (sideWidth) { actualWidth -= (sideWidth + options.padding) * 2; } } canBranding = windowWidth >= options.minBranding && windowWidth <= options.maxBranding; // не показываем брендинг на экраны меньше 1024 и больше 1900 if (!canBranding) { actualWidth = windowWidth; } canBrandingStub = actualWidth >= options.bannerStub && actualWidth < options.minBranding; // подбираем экран под окно пользователя с учетом брендинга for (var sizeNo = 1; sizeNo < sizesLength; sizeNo++) { if (actualWidth < sizeList[sizeNo]) { size = nameList[sizeNo - 1]; break; } } if (!size) { size = nameList[nameList.length - 1]; } state = [size, isBranding, canBranding, canBrandingStub, sideWidth].join(); if (lastState != state) { lastState = state; className = htmlElement.className.replace(options.classRe, '').split(' '); className.push(options.classPrefix + size); if (isBranding) { className.push(options.classPrefix + 'branding-p_need'); if (canBranding) { className.push(options.classPrefix + 'branding-p'); className.push(options.classPrefix + 'branding-p_' + sideWidth); } else if (canBrandingStub) { className.push(options.classPrefix + 'branding-p_banner-stub'); } } htmlElement.className = className.join(' '); try { window.dispatchEvent(new Event('resize')); } catch (ex) {} } } /** * Создает функцию, игнорирующую вызовы происходящие чаще заданого интервала * @param originalFn функция, частоту вызова которой необходимо ограничить * @param [timeout = 100] интервал * @param [callImmediately = false] флаг, указывающий что функция должна выполняться в начале группы вызовов * @returns {Function} */ function debounce (originalFn, timeout, callImmediately) { var timer = null; return function debounced () { var context = this, args = arguments; function delayed () { if (!callImmediately) { originalFn.apply(context, args); } timer = null; } if (timer !== null) { clearTimeout(timer); } else if (callImmediately) { originalFn.apply(context, args); } timer = setTimeout(delayed, timeout || 100); }; } screenSize(); window.screenSize = screenSize; if (window.addEventListener) { window.addEventListener("resize", debounce(screenSize), false); } else if (window.attachEvent) { window.attachEvent("onresize", debounce(screenSize)); } })(this);
20 сентября
20 сентября 16:10
Renault придумала робомодули для доставки грузов В компании считают, что такое решение, в том числе, позволит снизить нагрузку на городскую дорожную сеть в часы пик
20 сентября 15:14
Бездомный из мести сжег парковку с «Мерседесами»В общей сложности пламя уничтожило 137 автомобилей, из которых большинство машины немецкого бренда стоимостью от $100 000
20 сентября 10:05
«Калашников» сделает электрические мотоциклы для всех Концерн намерен в 2019 году запустить в серийное производство гражданский электромотоцикл
19 сентября
19 сентября 17:30
ГАЗ показал долгожданного преемника «шишиги» (фото)На выставке коммерческого автотранспорта (IAA) представили новую модель внедорожного грузового автомобиля «Садко NEXT»
19 сентября 14:56
Новый Volkswagen Transporter: революционный дизайн (ретро)Новое – уже седьмое по счету – поколение Volkswagen Transporter будет построено на совершенно новой платформе
19 сентября 14:06
Звание грузовик года получила неожиданная новинка В этом году лучшим в сегменте грузового автотранспорта признали тяжелый грузовик Ford F-Max
19 сентября 13:11
Пассажиру пришлось сесть за руль такси из-за пьяного водителяИсторией своей поездки на такси поделился клиент Uber, который вызвал такси в индийский аэропорт Бангалор
19 сентября 11:34
У Mercedes-Benz появился 306-сильный хэтчбекНемецкая марка рассекретила AMG-версию хэтчбека A-класса нового поколения - A35 4Matic
18 сентября
18 сентября 17:00
Американка разогналась на велосипеде почти до 300 км/ч (видео)Новый мировой рекорд был установлен на дне высохшего озера Бонневилль бывшей чемпионкой США по велотреку Дениз Мюллер-Коренек
18 сентября 15:00
Цены на бензин: лимит повышения исчерпанВ правительстве заявили о необходимости жестко контролировать ситуацию на топливном рынке
18 сентября 14:39
Новый Hyundai Santa Fe: задавайте свои вопросыПрямо сейчас редактор «Авто Mail.Ru» Юрий Урюков тестирует новое поколение Hyundai Santa Fe на дорогах Киргизии
18 сентября 13:50
В отношении BMW, Daimler и Volkswagen открыли расследованиеЕврокомиссия заподозрила автоконцерны в сговоре с целью «ограничить разработку и внедрение систем контроля за выбросами для автомобилей»
18 сентября 12:30
В Китае начали дарить BMW (но не всем)На такой шаг пошел китайский застройщик, который отчаялся продать хоть сколько-то квартир в новом доме
18 сентября 11:40
Стало известно, как сильно в России скручивают пробегЧаще всего величина корректировки пробега растет с возрастом авто, но иногда даже у годовалых машин скручивают до 21 тыс. км
18 сентября 10:35
В Москве в ДТП пострадали «Гелик», «Бентли» и «Ламбо» Виновником аварии оказался водитель Lamborghini: сначала автомобиль столкнулся с Audi, а затем спорткар отбросило на припаркованные машины
18 сентября 09:44
Audi полностью рассекретила кроссовер e-tronПремьера автомобиля должна была состояться еще в конце августа, однако мероприятие перенесли из-за ареста руководителя компании Руперта Штадлера
17 сентября
17 сентября 17:17
Mitsubishi показала первый тизер нового L200Ожидается, что официальная премьера автомобиля состоится в ближайшее время
17 сентября 14:33
Раскрыт список претендентов на звание «Лучший автомобиль года»Организаторы конкурса «Всемирный автомобиль года» (World Car of the Year Awards) раскрыли первый список номинантов
17 сентября 11:05
BMW представила прототип нового кроссовера (фото)Презентация концепта прошла на борту грузового самолета Boeing, который проделал путь от Мюнхена до Нью-Йорка и Сан-Франциско, вернувшись в Германию через Пекин
Подпишитесь на нас
Новости от Авто Mail.Ru