/* Хранилищие функций для scripts.js (применяются на всем сайте) */ (function() { window.SVK = window.SVK || {}; var w = $(window), body = $('body'); SVK.$w = $(window); SVK.$b = $('body'); /** * SVK.tabs - реализует переключение табов * @param item - родительский элемент табов * * @example * SVK.tabs('.tabs'); *
*
*
*
*
- если нужен *
*
*
*
*
*
*/ SVK.tabs = function(item) { if ($(item).length == 0){ return } setTimeout(function(){ $(item).each(function(index,element){ var activeTab = $(element).find('.tabs-header .active'), activeTabData = activeTab.data('tab'), activeTabWidth = activeTab.width(), activeLeft = activeTab.position().left; $(element).find('.bottom-line').css({ width: activeTabWidth, left: activeLeft }); $(element).find('.tabs-body .tab').hide(); $(element).find('.tabs-body .tab').filter("[data-tab='" + activeTabData + "']").show(); }); $(item).find('.tabs-header-item').on('click', function(){ if ($(this).hasClass('active')) { // при клике на открытый таб ничего не происходит return false; } var activeTabData = $(this).data('tab'), activeTabWidth = $(this).width(), activeLeft = $(this).position().left; $(this).addClass('active').siblings().removeClass('active'); // для табов с подчеркиванием $(item).find('.bottom-line').css({ width: activeTabWidth, left: activeLeft }); $(item).find('.bottom-line').removeClass('no-animate'); $(this).closest('.tabs').find('.tabs-body .tab').hide(); $(this).closest('.tabs').find('.tabs-body .tab').filter("[data-tab='" + activeTabData + "']").show(); }); $(item).find('.tabs-body-h-item').on('click', function(){ var tabData = $(this).data('tab'); $(this).closest('.tabs').find('.tabs-body-h-item').removeClass('active'); $(this).addClass('active'); $(this).closest('.tabs').find('.tabs-header-item').filter("[data-tab='" + tabData + "']").trigger('click'); $('html, body').scrollTop($(this).closest('.tabs').offset().top); }); w.on('resize', function(){ var activeItem = $(item).find('.tabs-header-item.active'), activeLeft = activeItem.position().left; $(item).find('.bottom-line').addClass('no-animate').css({ left: activeLeft, width: activeItem.width() }); $(item).find('.bottom-line').removeClass('no-animate'); }) }, 200); }; SVK.spinnersSet = function(element, sumContainer){ $(element).find('.spinner').each(function(index,element){ $(element).find('.decrease').on('click', function(e){ e.preventDefault(); if ($(this).hasClass('disabled')){ return false } $(element).trigger('spinner.decrease'); }); $(element).find('.increase').on('click', function(e){ e.preventDefault(); if ($(this).hasClass('disabled')){ return false } $(element).trigger('spinner.increase'); }) }); var adultsSpinner = $(element).find('.spinner.adults'), childrenSpinner = $(element).find('.spinner.children'), infantSpinner = $(element).find('.spinner.infant'); var descWordsForms = { adults: ['взрослый', 'взрослых', 'взрослых'], children: ['ребенок', 'ребенка', 'детей', 'без детей'], infant: ['младенец', 'младенца', 'младенцев', 'без младенцев'], passenger: ['пассажир', 'пассажира', 'пассажиров'] }; /*спиннер взрослых людей*/ adultsSpinner.on('spinner.increase', function(){ changeSpinner($(this), 1, descWordsForms.adults); }).on('spinner.decrease', function(){ changeSpinner($(this), -1, descWordsForms.adults); }); adultsSpinner.on('spinner.increase spinner.decrease', function(){ /*разбираемся с полем детей*/ var infantCount = infantSpinner.data('value'), adultCount = $(this).data('value'), childrenCount = childrenSpinner.data('value'); var availableChildrenPlaces = 9 - adultCount - infantCount; if (childrenCount > availableChildrenPlaces){ /*если у нас выбрано количество детей больше, чем 9 - (взрослые + младенцы) , но так как дети приоритетнее младенцев, отдадим под них максимальное кол-во мест*/ if ((childrenCount + adultCount) > 9) { /*если текушая сумма детей + взрослых превышает 9 человек, уменьшаем кол-во детей и допустимое число младенцев пишем в 0*/ var newChildrenCount = 9 - adultCount; childrenSpinner.data('max-value', newChildrenCount); changeSpinner(childrenSpinner, newChildrenCount - childrenCount, descWordsForms.children); /*а теперь кол-во младенцев пишем в 0*/ infantSpinner.data('max-value', 0); changeSpinner(infantSpinner, 0 - infantSpinner.data('value'), descWordsForms.infant); } else { /*если (взрослый + дети) не превышают кол-ва пассажиров, то устанавливаем максимальное кол-во детей, равное кол-ву детей*/ childrenSpinner.data('max-value', childrenCount); var newInfantCount = 9 - (childrenCount + adultCount); infantSpinner.data('max-value', newInfantCount); if (infantCount > newInfantCount){ /*если кол-во младенцев превышает отведенное под них место*/ changeSpinner(infantSpinner, newInfantCount - infantCount, descWordsForms.infant); } } } else { childrenSpinner.data('max-value', availableChildrenPlaces); infantSpinner.data('max-value', Math.min(availableChildrenPlaces, adultCount)); if (infantCount > infantSpinner.data('max-value')){ /*если кол-во младенцев превышает отведенное под них место*/ changeSpinner(infantSpinner, infantSpinner.data('max-value') - infantCount, descWordsForms.infant); } } }); /*спиннер детей*/ childrenSpinner.on('spinner.increase', function(){ changeSpinner($(this), 1, descWordsForms.children); }).on('spinner.decrease', function(){ changeSpinner($(this), -1, descWordsForms.children); }); childrenSpinner.on('spinner.increase spinner.decrease', function(){ var infantCount = infantSpinner.data('value'), adultCount = adultsSpinner.data('value'), childrenCount = childrenSpinner.data('value'); var availableInfantPlaces = Math.min(adultCount, 9 - (adultCount + childrenCount)); infantSpinner.data('max-value', availableInfantPlaces); if (infantCount > availableInfantPlaces){ changeSpinner(infantSpinner, availableInfantPlaces - infantCount, descWordsForms.infant); } }); /*спиннер младенцев*/ infantSpinner.on('spinner.increase', function(){ changeSpinner($(this), 1, descWordsForms.infant); }).on('spinner.decrease', function(){ changeSpinner($(this), -1, descWordsForms.infant); }); infantSpinner.on('spinner.increase spinner.decrease', function(){ var infantCount = infantSpinner.data('value'), adultCount = adultsSpinner.data('value'); childrenSpinner.data('max-value', 9 - (adultCount + infantCount)); }); $(element).find('.spinner').on('spinner.decrease spinner.increase', function(){ var passengersSum = 0; $(element).find('.spinner').each(function(index,innerElement){ if ($(innerElement).data('value') < $(innerElement).data('max-value')){ $(innerElement).find('.increase').removeClass('disabled'); } else { $(innerElement).find('.increase').addClass('disabled'); } passengersSum = passengersSum + $(innerElement).data('value'); }); /*вывод суммарных данных в поле. если только взрослые, то подписываем их как "взрослые", если не только взрослые - то "пассажиры"*/ if (passengersSum == adultsSpinner.data('value')) { $(sumContainer).text(passengersSum + ' ' + SVK.pluralForm(passengersSum, descWordsForms.adults[0], descWordsForms.adults[1], descWordsForms.adults[2])); } else { $(sumContainer).text(passengersSum + ' ' + SVK.pluralForm(passengersSum, descWordsForms.passenger[0], descWordsForms.passenger[1], descWordsForms.passenger[2])); } $(sumContainer).trigger('reservation.count'); }); /*основная фукция изменения количества в любом спинере*/ function changeSpinner(spinner, countChange, wordsForms){ var currentValue = spinner.data('value'), newValue = currentValue + +(countChange); spinner.data('value', newValue); if (newValue == 0){ spinner.find('span').text(wordsForms[3]); } else { spinner.find('span').text(newValue + ' ' + SVK.pluralForm(newValue, wordsForms[0], wordsForms[1], wordsForms[2])); } /*значит увеличили количество*/ if (countChange > 0){ spinner.find('.decrease').removeClass('disabled'); } else { if (newValue == spinner.data('min-value')){ spinner.find('.decrease').addClass('disabled'); } } } }; /** * Функция возвращает правильное слово для множественного числа * * @param $num число элементов * @param $form1 название элемента, первая форма (день, фотография) * @param $form2 название элемента, вторая форма (дня, фотографии) * @param $form5 название элемента, пятая форма (дней, фотографий) * * @return правильная форма названия элементов в зависимости от числа элементов */ SVK.pluralForm = function($num, $form1, $form2, $form5) { if (typeof $num != 'string' && $num) { // работа только со строкой (фикс для IE8) $num = $num.toString(); } else if (!$num) { return $form1; } var $n = parseInt($num.slice(-2), 10); if ($n >= 5 && $n <=20) return $form5; else { $n = parseInt($num.slice(-1), 10); if ($n == 0 || ($n>=5 && $n<=9) ) return $form5; else if ($n == 1) return $form1; else return $form2; } }; /** * радиокнопки со стилизацией для ие8 (в других стилизуется через :checked) * @param container */ SVK.radioBtn = function(container){ if ($('html').hasClass('.lt-ie9')) return; $(container).each(function(index,element){ $(element).find('[checked=checked]').next().addClass('active'); $(element).find('label').on('click', function(){ $(this).addClass('active').closest('.btn-group-item').siblings().find('.active').removeClass('active'); }); }); }; SVK.yearsLine = function(container){ var lineElementWidth = $(container).eq(0).find('.year').eq(0).width(), controlWidth = $(container).eq(0).find('.arrow').eq(0).width(), $w = $(window); $(container).each(function(index,element){ var elementsCount = $(element).find('.year').length, elementsSumWidth = elementsCount * lineElementWidth, yearsLine = $(element).find('.years-line-inner'), prevArrow = $(element).find('.arrow-prev'), nextArrow = $(element).find('.arrow-next'), containerWidth = $(element).width(), activeIndexRelativeMainContainer = $(element).find('.active').index(), elementsCountInHalfContainer = Math.floor((containerWidth/2) / lineElementWidth), elementsCountInFullContainer = Math.floor(containerWidth / lineElementWidth); /*первоначальное состояние. определяем, нужны ли стрелки, делаем, чтобы активный пункт был в зоне видимости*/ if(containerWidth < elementsSumWidth){ $(element).addClass('with-controls'); containerWidth = $(element).width(); elementsCountInHalfContainer = Math.floor((containerWidth/2) / lineElementWidth); elementsCountInFullContainer = Math.floor(containerWidth / lineElementWidth); setActiveToCenter(element, containerWidth, activeIndexRelativeMainContainer, elementsCountInHalfContainer, yearsLine, elementsCount); } else { prevArrow.addClass('disabled'); nextArrow.addClass('disabled'); } prevArrow.on('click', function(){ if ($(this).hasClass('disabled')) return; nextArrow.removeClass('disabled'); var maxScrollWidth = (elementsCountInFullContainer - 1) * lineElementWidth, currentScrollLeft = Math.abs(parseFloat(yearsLine.css('margin-left'))); if (currentScrollLeft > maxScrollWidth){ yearsLine.css({ 'margin-left': - (currentScrollLeft - maxScrollWidth) }); return; } yearsLine.css({ 'margin-left': 0 }); $(this).addClass('disabled'); }); nextArrow.on('click', function(){ if ($(this).hasClass('disabled')) return; prevArrow.removeClass('disabled'); var maxScrollWidth = (elementsCountInFullContainer - 1) * lineElementWidth, currentScrollLeft = Math.abs(parseFloat(yearsLine.css('margin-left'))); if (currentScrollLeft + maxScrollWidth + containerWidth < elementsSumWidth){ yearsLine.css({ 'margin-left': - (currentScrollLeft + maxScrollWidth) }); return; } yearsLine.css({ 'margin-left': - (elementsSumWidth - containerWidth) }); $(this).addClass('disabled'); }); $w.on('resize', function(){ containerWidth = $(container).width(); if(containerWidth >= elementsSumWidth){ $(element).removeClass('with-controls'); yearsLine.removeAttr('style'); prevArrow.addClass('disabled'); nextArrow.addClass('disabled'); elementsCountInHalfContainer = Math.floor((containerWidth/2) / lineElementWidth); elementsCountInFullContainer = Math.floor(containerWidth / lineElementWidth); return; } $(element).addClass('with-controls'); containerWidth = $(container).width(); elementsCountInHalfContainer = Math.floor((containerWidth/2) / lineElementWidth); elementsCountInFullContainer = Math.floor(containerWidth / lineElementWidth); var currentScrollLeft = Math.abs(parseFloat(yearsLine.css('margin-left'))) || 0; if (currentScrollLeft + containerWidth >= elementsSumWidth){ yearsLine.css({ 'margin-left': - (elementsSumWidth - containerWidth) }); nextArrow.addClass('disabled'); return; } nextArrow.removeClass('disabled'); }) }); /*устанавливает первоначальное положение, чтобы активный пункт был виден*/ function setActiveToCenter(container, containerWidth, activeIndexRelativeMainContainer, elementsCountInHalfContainer, yearsLine, elementCountInLine){ if (activeIndexRelativeMainContainer + 1 <= elementsCountInHalfContainer){ $(container).find('.arrow-prev').addClass('disabled'); return; } if (activeIndexRelativeMainContainer + 1 >= elementCountInLine - elementsCountInHalfContainer){ yearsLine.css({ 'margin-left': - (elementCountInLine * lineElementWidth - containerWidth) }); $(container).find('.arrow-next').addClass('disabled'); return; } yearsLine.css({ 'margin-left': (containerWidth / 2) - (activeIndexRelativeMainContainer * lineElementWidth + lineElementWidth / 2) }); } }; SVK.isMobile = function () { return $(window).width() < 1024 ? true : false; }; /** * Календарь на главной * @param outerContainer - контейнер, в котором лежит календарь (dropdown) * parameter == past (если нужны даты из прошлого) * календарю с прошлыми датами нужны дополнительные классы и дата-атрибут * @param {boolean} pastDate - Используется в календаре прошедшее время */ SVK.calendar = function(outerContainer, pastDate){ var monthNames = document.regionalParams.calendar.months, currentData = new Date(), currentMonth = currentData.getMonth(), isPast = pastDate || false, fromText = document.regionalParams.calendar.there, toText = document.regionalParams.calendar.back; $(outerContainer).each(function(index, container){ var monthsContainer = $(container).find('.months-part ul'), radioButtons = $(container).find('.btn-group input[type="radio"]'), oneWayDirection = radioButtons.filter('[data-tab="one-way"]'), dateFrom = $(container).closest('.form-item').find('.date-from'), dateTo = $(container).closest('.form-item').find('.date-to'), datepicker = $(container).find('.datepicker'), calendarContainer = $(container).find('.calendars-cont'), yearValue, addedLine, i = 0, monthNumber = 0; var labelRadio = $(container).find('.btn-group .btn-contour'); /*Генерируем месяцы*/ /*для случая, когда календарь для прошлых дат*/ if (isPast){ for (i = 0; i < 12; i++) { monthNumber = Math.abs((i + currentMonth + 1) % 12); addedLine = $('
  • ' + monthNames[monthNumber] + '
  • '); monthsContainer.append(addedLine); // Если январь if (monthNumber == 0){ $(addedLine).append('' + (currentData.getFullYear()) + ''); } } } else { for (i = 0; i < 12; i++){ monthNumber = (i + currentMonth) % 12; addedLine = $('
  • ' + monthNames[monthNumber] + '
  • '); monthsContainer.append(addedLine); // Если январь if (monthNumber == 0){ yearValue = currentData.getFullYear() + 1; if (i == 0) { yearValue--; } $(addedLine).append('' + yearValue + ''); } } } /*инлайновые календари*/ datepicker.datepicker({ numberOfMonths: 12, showButtonPanel: false, minDate: currentData, beforeShowDay: function(date) { var date1 = $.datepicker.parseDate($.datepicker._defaults.dateFormat, dateFrom.data('date') || ''), date2 = $.datepicker.parseDate($.datepicker._defaults.dateFormat, dateTo.data('date') || ''); return [true, date1 && ((date.getTime() == date1.getTime()) || (date2 && date >= date1 && date <= date2)) ? (date.getTime() == date1.getTime()) ? "dp-highlight dp-highlight-first": (date.getTime() == date2.getTime()) ? "dp-highlight dp-highlight-last": "dp-highlight" : ""]; }, onSelect: function(dateText, inst) { var date1 = dateFrom.data('date'), date2 = dateTo.data('date'); if (oneWayDirection.is(':checked')) { dateFrom.data('date', dateText).html(getDateFromString(dateText)).addClass('active'); $(container).trigger('close.datepicker'); } else if (!date1 || date2){ dateFrom.data('date', dateText).html(getDateFromString(dateText) + ' ').addClass('active'); dateTo.data('date', '').html(toText); } else { /*если вторая дата больше или равна первой*/ $(container).trigger('close.datepicker'); if (compareDates(dateText, dateFrom.data('date'))){ dateTo.data('date',dateText).html(getDateFromString(dateText)).addClass('active'); } else { /*иначе - меняем их местами*/ dateTo.data('date', dateFrom.data('date')).html(getDateFromString(dateFrom.data('date'))).addClass('active'); dateFrom.data('date',dateText).html(getDateFromString(dateText) + ' ').addClass('active'); } } $(this).trigger('dateSelect', [inst, dateText]); }, afterShow: function(){ if (SVK.isMobile) return; // кастомное событие, которое я добавила в код datepicker var inlineCalendars = $(container).find('.ui-datepicker-calendar'), tableCells = inlineCalendars.find('tbody td'); inlineCalendars.each(function(index,element){ var lastString = $(element).find('tbody tr').last(); if (lastString.find('td').first().text() == 0) lastString.remove(); }); /*ховер по ячейкам календаря*/ var fromActiveDate = tableCells.filter('.dp-highlight-first'), activeIndexRelativeMainContainer = datepicker.find('td').index(fromActiveDate); tableCells.on('mouseenter', function () { var dateFromTemp = dateFrom.data('date') ? dateFrom.data('date') : ''; // Дата под указателем мыши // плюс один нужен для того, чтобы месяцы правильно назывались. var date = ($(this).text().length == 1 ? '0' + $(this).text() : $(this).text()) + '.' + ($(this).data('month') + 1) + '.' + $(this).data('year'); datepicker.filter('highlighted-cell').removeClass('highlighted-cell'); if ($(this).text() == 0 || $(this).hasClass('ui-state-disabled')) return; if (oneWayDirection.is(':checked')) { dateFrom.html(getDateFromString(date)).addClass('hover'); return; } var curIndexRelativeContainer = datepicker.find('td').index(this); // покраска между датами if ((dateFrom.hasClass('active') || dateTo.hasClass('active')) && !oneWayDirection.is(':checked')) { if (curIndexRelativeContainer > activeIndexRelativeMainContainer) { datepicker.find('td').slice(activeIndexRelativeMainContainer + 1, curIndexRelativeContainer).addClass('highlighted-cell'); } else { datepicker.find('td').slice(curIndexRelativeContainer + 1, activeIndexRelativeMainContainer).addClass('highlighted-cell'); } } if (dateFromTemp != '') { if (!compareDates(dateFromTemp, date)) { dateTo.html(getDateFromString(date)).addClass('hover'); } else { dateTo.html(getDateFromString(dateFromTemp)).addClass('active').removeClass('hover'); dateFrom.html(getDateFromString(date) + ' ').addClass('hover'); } } else { if (!oneWayDirection.is(':checked')) { dateFrom.html(getDateFromString(date) + ' ').addClass('hover'); } else { dateFrom.html(getDateFromString(date)).addClass('hover'); } } }).on('mouseleave', function () { datepicker.find('.highlighted-cell').removeClass('highlighted-cell'); dateFrom.removeClass('hover'); if (!dateFrom.hasClass('active')) { if (!oneWayDirection.is(':checked')) { dateFrom.html(fromText + ' '); } else { dateFrom.html(fromText); } } if (dateTo.data('date') != '') { dateTo.removeClass('hover'); } if (!oneWayDirection.is(':checked')) { dateTo.html(toText); } }); } }); function checkText(date1, date2) { if (date1 && !date2) { dateFrom.html(getDateFromString(dateFrom.data('date'))); dateTo.data('date', '').html(fromText); } if (!oneWayDirection.is(':checked')) { dateFrom.removeClass('active').html(fromText + ' '); dateTo.removeClass('active').html(toText) } else { dateFrom.removeClass('active').html(fromText); } } $(document).on('click', '.js-form-item-when .date', function (e) { checkText(); }); $(container).on('close.datepicker', function () { if (dateFrom.data('date') !== undefined) { dateFrom.removeClass('hover'); dateTo.removeClass('hover'); } else { dateFrom.html(''); dateTo.html(''); } }); /*если календарь для прошлых дат*/ if (isPast){ datepicker.datepicker('option', 'minDate', null).datepicker('option', 'maxDate', currentData); } //радиокнопки "туда-обратно" и "только туда" radioButtons.change(function(){ dateTo.data('date', '').text(''); datepicker.find('.dp-highlight').not('.dp-highlight-first').removeClass('dp-highlight dp-highlight-last'); dateFrom.parents('.regular-flight').find('.js-form-item-when label').hide(); if (oneWayDirection.is(':checked')){ dateFrom.html(fromText); if (dateFrom.data('date') != '') { $(container).trigger('close.datepicker'); dateFrom.html(getDateFromString(dateFrom.data('date'))); } } else { dateFrom.html(fromText + ' '); dateTo.html(toText); } }); var datepickerHeight = datepicker.outerHeight(), monthsHeight = $(container).find('.months-part').outerHeight(); $(container).on('dropdown.opened', function(){ datepickerHeight = datepicker.outerHeight(); monthsHeight = $(container).find('.months-part').outerHeight(); if (isPast && dateFrom.find('.grey').length > 0){ calendarContainer.scrollTop(100000); } }); //скролл по каледнарю calendarContainer.on('scroll.datepicker', function(){ monthsHighlighter.css({ top: $(this).scrollTop() * monthsHeight / datepickerHeight }) }); /*клик по месяцу*/ var monthsHighlighter = $(container).find('.months-part .highlighter'); $(monthsContainer).find('li').on('click', function(){ var indexOfElement = ($(this).index() != 11) ? $(this).index() : 10, newPositionOfHighlighter = $(monthsContainer).find('li').eq(indexOfElement).position().top; if (newPositionOfHighlighter == monthsHighlighter.position().top) return; calendarContainer.animate({ scrollTop: calendarContainer.find('.ui-datepicker-group').eq(indexOfElement).position().top }, 200, function(){ monthsHighlighter.animate({ top: $(monthsContainer).find('li').eq(indexOfElement).position().top }, 100); }); }); }); /** * преобразует строку с датой типа "09.07.2015" в строку "9 июл" * @param date строка с датой * @returns {string} текстовая строка */ function getDateFromString(date) { var number = parseInt(date.substr(0,2)); var month = parseInt(date.substr(3,2)); return number + ' ' + monthNames[month - 1].substr(0,3).toLowerCase(); } /** * сравнение 2х чисел в форматах dd.mm.yyyy * @param date1 dd.mm.yyyy * @param date2 dd.mm.yyyy * * return true if date1 >= date2 */ function compareDates (date1, date2) { return (getNumberDate(date1, 'year') == getNumberDate(date2, 'year')) ? (getNumberDate(date1, 'month')) == (getNumberDate(date2, 'month')) ? (getNumberDate(date1, 'day')) >= (getNumberDate(date2, 'day')) : (getNumberDate(date1, 'month')) > (getNumberDate(date2, 'month')) : (getNumberDate(date1, 'year') > getNumberDate(date2, 'year')); } /** * Получаем нужную цифру из даты * @param date дата в форматах dd.mm.yyyy / d.mm.yyyy / d.m.yyyy / dd.m.yyyy * @param instance какую из цифр нам нужно получить day, month, year * */ function getNumberDate (date, instance) { var val = 0; switch (instance) { case 'year': val = 2; break; case 'month': val = 1; break; case 'day': val = 0; break; } return parseInt(date.split('.')[val]); } }; SVK.inputsFocusEffect = function(input){ $(document).on('focus', input, function(){ $(this).closest('.input-with-scale-label').addClass('selected focused'); }).on('blur', input, function(){ $(this).closest('.input-with-scale-label').removeClass('focused'); if (!$(this).val()){ $(this).closest('.input-with-scale-label').removeClass('selected'); } }); }; SVK.connectedGallery = function(container) { var previewItemWidth = 119; $(container).each(function(ind, element) { if ($(element).find('ul li').length > 1) { // INIT GALLERY var canClick = true; var mainSlider = $(element).find('ul').bxSlider({ pager: false, infiniteLoop: false, hideControlOnEnd: true, nextText: '', prevText: '', onSlideBefore: function($slideElement, oldIndex, newIndex){ scrollPreview(element, newIndex); }, onSlideAfter: function(){ canClick = true; } }); // инициализируем линию превьюшек $(element).find('.thumbnails-wrap').show(); $(element).find('.js-preview .thumbnails-item').first().addClass('active'); $(element).find('.js-custom-h-scroll').scrollbar(); // HANDLERS // Клик по превью изображениям $(element).on('click', '.thumbnails-item', function() { if(canClick) { canClick = false; var index = $(this).index(); mainSlider.goToSlide(index); scrollPreview(element, index); } }); } }); // FUNCTIONS function scrollPreview(parentCont, index) { var $currentItem = $(parentCont).find('.thumbnails-item').eq(index); var halfParentWidth = $(parentCont).width() / 2; var halfElementWidth = $currentItem.outerWidth() / 2; $currentItem.addClass('active').siblings().removeClass('active'); $(parentCont).find('.js-custom-h-scroll').stop().animate({ //scrollLeft: (index - 3) * previewItemWidth // по 3 элемента с каждой стороны активнного scrollLeft : $currentItem.outerWidth(true) * index - halfParentWidth + halfElementWidth }); } } /** * MagnificPopup для ссылок, которые ссылаются на изображение. * Текст из атрибута title вставляется под картинку * Пример DOM: Спецпитание мусульманское * * */ SVK.openModalImage = function(href) { $(href).magnificPopup({ type: 'image', closeOnContentClick: true, image: { verticalFit: true } }); } /** * Отправление событий в Яндекс и гугл аналитику * * @param {string} category - категория цели * @param {string} action - действие */ SVK.sendAnalyticsEvent = function(category, action) { try { ga('send', 'event', category, action); yaCounter30663002.reachGoal(category); } catch (e) { } } })();