Ответы пользователя по тегу JavaScript
  • Нужно сделать свою кнопку play у тега video?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    По сути все просто. Нужно только обратиться к API html5 video, и можно творить все что угодно.
    Ответ написан
    1 комментарий
  • Как переписать скрипт, чтобы он работал в обоих случаях?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    Особо не вдавался, но почему бы просто не дать нужным элементам один класс, после чего обращаться ко всему классу, а не отдельно по айди? Типа того:

    function addOnWheel(cases, handler) {
    	if (cases.addEventListener) {
    		if ('onwheel' in document) {
    			cases.addEventListener('wheel', handler);
    		} else if ('onmousewheel' in document) {
    			cases.addEventListener('mousewheel', handler);
    		} else {
    			cases.addEventListener('MozMousePixelScroll', handler);
    		}
    	} else {
    		cases.attachEvent('onmousewheel', handler);
    	}
    }
    
    if ($(window).width() > 1000 && document.querySelectorAll('.all-cases')) {
    	var translateY = 1;
    
    	$(window).keydown(function (e) {
    		var casesPageStylizationTransform = cases.style.transform;
    		if (e.keyCode == 32 || e.keyCode == 40) {
    			if (casesPageStylizationTransform != ('translateY(-87.5%)')) translateY -= 1.5;
    			cases.style.transform = cases.style.WebkitTransform = cases.style.MsTransform = 'translateY(' + translateY + '%)';
    		}
    		if (e.keyCode == 38) {
    			if (cases.style.transform = ('translateY(' > 0 + '%)')) {
    				if (casesPageStylizationTransform <= ('translateY(0%)')) translateY += 1.5;
    				cases.style.transform = cases.style.WebkitTransform = cases.style.MsTransform = 'translateY(' + translateY + '%)';
    			}
    		}
    	});
    
    	addOnWheel(cases, function (e) {
    		var delta = e.deltaY || e.detail || e.wheelDelta;
    		var casesPageStylizationTransform = cases.style.transform;
    		if (cases.style.transform = ('translateY(' != -87.5 + '%)')) {
    			if (delta > 0 && casesPageStylizationTransform != ('translateY(-87.5%)')) translateY -= 1.5;
    			cases.style.transform = cases.style.WebkitTransform = cases.style.MsTransform = 'translateY(' + translateY + '%)';
    		}
    		if (cases.style.transform = ('translateY(' > 0 + '%)')) {
    			if (delta < 0 && casesPageStylizationTransform <= ('translateY(0%)')) translateY += 1.5;
    		}
    		e.preventDefault();
    	});
    }
    Ответ написан
    Комментировать
  • Isotope - при перезагрузке страницы стали картинки слепаються?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    У меня вообще все слиплось.))
    Не нашел, как вы стартуете плагин, но есть 3 решения, которые я знаю:
    1 (может помочь). Стартовать скрипт в $(window).on('load')
    2 (костыль). Давать таймаут на старт скрипта 200—500 ms.
    3 (нативный). У того же парня есть классный плагин imagesloaded. Качаем, ставим...
    $('все_дочерние_блоки_в_isotope img').imagesLoaded(function () {
        стартуем isotope
    });
    Ответ написан
    Комментировать
  • Как добавить события к слайдам плагина Slick slider?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    $(_слайдер_)
    	.slick({
    		_настройки_
    
    	})
    	.on('beforeChange', function (event, slick, currentSlide, nextSlide) {
    		// Допустим, сейчас KFC и у него уже есть класс active при инициализации. Он идет первым с индексом 0.
    		// У логотипов класс 'logo'.
    		// Вторым идет МакДак с индесом 1.
    		// currentSlide при инициализации (если не указано другого = 0).
    	
    		$(.logo).eq(nextSlide).addClass('active').siblings().removeClass('active');
    		
    	})
    	.on('afterChange', function (event, slick, currentSlide) {
    		// если то же самое нужно не до смены слайда, а после... но тут нет параметра nextSlide, здесь мы видим только текущий слайд currentSlide
    	});
    Ответ написан
    Комментировать
  • Как реализовать последовательную загрузку форм?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    Немного расширю ответ Василий своим опытом. (Считаю, что ответ на вопрос присуждается ему).
    UX это иллюзия, которую мы предоставляем юзерам для взаимодействия с интерфейсом. Поэтому все так.
    Для того, чтобы не потерять данные я обычно создаю <input type="hidden" value="">, и в его value вписываю все данные с удобными разделителями (чтоб потом парсить удобно было), а отправляю по финальному submit.
    Если разбираетесь, посмотрите сурсы вот этого проекта.
    Ответ написан
    Комментировать
  • Плавный скролл к нужному блоку на другой странице?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    Я делал так.
    Создавал ссылку с нужным параметром. Например <a href="index.php?page=approach&anc=1">Ссылка</a>, тут сделал &.
    Когда целевая страница загружается, парсим адрес window.location.href.split('&')[1] и анимируем страницу до блока, соответствующего якорю anc=1, на этот же триггер можно повесить то, какая вкладка будет открыта.
    Ссылки без php можно обработать схожим образом.

    Дополню:

    <a href="моя_другая_страница.html#якорь">Link</a>
    		
    <!-- на другой странице -->
    		
    <div id="якорь"></div>


    var hash = window.location.hash;
    if (hash == '' || $(hash).length == 0) return true;
    
    setTimeout(function() {
    	$('html, body').animate({
    		scrollTop: $(hash).offset().top
    	}, 900, function () {
    		window.location.hash = hash;
    	});		
    }, 100);
    Ответ написан
    1 комментарий
  • Паралакс привязанный к мышке. Картинка движется даже при выходе за блок?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    Можно привязаться с границам блока, а не page. Например, через clientX и getBoundingClientRect.
    Ответ написан
    Комментировать
  • Как удалить все выделенные checkbox?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    Интересная смесь нативного js и jquery.
    $('#del').click(function () {
        $('label.active').remove();
    });
    Ответ написан
    Комментировать
  • Не работает корректно JS?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    Думаю, не стоит втыкать $(function)() для каждой функции. Все можно писать в ней.
    А ошибки идут по простой причине: на странице нет либо слайдера, либо карт, и скрипт останавливает выполнение.
    Решение. Инициировать карты или слайдер только при наличии соответствующих блоков на странице:

    if ($('.map-one').length) {
    	ymaps.ready(init);
    }
    
    if ($('.recall__slider').length) {
    	$('.recall__slider').slick({
    		dots: true,
    		nextArrow: '<button type="button" class="slick-next"><i class="fa fa-angle-right"></i></button>',
    		prevArrow: '<button type="button" class="slick-prev"><i class="fa fa-angle-left"></i></button>'
    	});
    }
    Ответ написан
  • Почему не на другие формы не проходит валидация?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    Ну скрипт написан для проверки sale-form-1, а вторая форма уже sale-form-2. Может, просто класс формам дать и прописать эти классы в скрипт, раз уж они одинаковые по структуре?
    Ответ написан
  • Как правильно пробегаться по дочерним элементам?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    $('.parent').find('.child');
    Ответ написан
  • JavaScript. Как сделать что бы скрипт работал при определенном стиле css?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    if($(window).width() <= 768) {
    	// скрипт тут
    }
    Ответ написан
    Комментировать
  • Как с textarea передать текст в span?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    С textarea передается в span по событиям keyup change.
    Span задано white-space: nowrap и бьется через <br/>, что логично.
    Ну и скрипт смотрит: если ширина span вылезает за ширину содержащего его div, уменьшает font-size.
    Ответ написан
  • Зафиксировать блок внутри кастомного скролла?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    Я реализовывал подобное.
    Нужно привязываться к событиям кастомного скролла и высчитывать:
    1. высоту плашки
    2. высоту всего контента минус паддинг высоты плашки
    3. сколько отскроллилось
    4. вычитать высоту плашки от параметров выше
    5. давать плашке абсолютную позицию с учетом параметров выше

    Обычно кастомные скроллы дают API для высчитывания этого так или иначе, главное – понять к чему привязать расчеты.

    Я делал на slimscroll и customScrollbar.

    На нативном скролле это вообще просто: position: sticky.
    Ответ написан
  • JQ изменение содержимого блока?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    function setNewBlockContent(source, target) {
    	target.html(source.html());
    }
    //	дайте всем блокам один класс для простоты выборки, например
    $('.myBlock').on('mouseover', function() {
    	setNewBlockContent($(this), $('#text'));
    });


    Ну или .text(), если нужно.
    Ответ написан
    7 комментариев
  • Как сделать анимацию дробных и целых чисел?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    Как я понял, нет задачи написать скрипт с нуля. Поэтому рекомендую рассмотреть этот плагинчик. Просто применяйте его для разных блоков с разными условиями. Если будет условие с плавающей точкой, то будет дробное, нет – он сам округлит.
    Ответ написан
    Комментировать
  • Как вызывать модальное окно для нескольких кнопок?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    Да.
    Например, сделать окно общего стиля, а внутрь напихать блоков с disaplay: none.
    На div-trigger вешать атрибут типа data-pop="pop-01", "pop-02" и т.д., и давать блокам класс pop-01, pop-02...
    Соответственно в скрипте писать примерно так:

    $('[data-pop]').click(function() {
    	var popName = $(this).attr('data-pop'); // или $(this).data('pop')
    
    	$('.pop-' + popName).addClass('active') // что подразумевает в цсс-файле .data-pop.active {display: block}
    });


    Остальным блокам убирать класс active.
    Это один из подходов. Может, вы прям из базы тягяете контент или аяксом, тогда все еще проще: подтягиваем контент и показываем поп-ап.
    Ответ написан
    Комментировать
  • Как обратиться в элементу jquery?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    $('.block1 .block2')...

    Но лучше дать единый класс для всех элементов, к которым идет обращение, если предполагается делать с ними одно и то же действие.
    Ответ написан
    Комментировать
  • Mouseenter и mouseleave как реализовать?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    Слишком много ненужного кода. Особенно, когда можно обойтись парой строчек цсс:
    .main-color:hover .item img {
    	transition: opacity .3s ease;
    }
    
    .main-color:hover .item img.item__img-color {
    	opacity: 0;
    }
    
    /* item, который должен оставаться цветным получает класс active */
    .main-color:hover .item img.item__img-color:hover,
    .main-color:hover .item.active img.item__img-color {
    	opacity: 1;
    }
    Ответ написан
  • Как задать условия что если курсор НЕ находится в 2-ух указанных секциях - выполнялось условия?

    rockfeeler
    @rockfeeler
    Фронтендер, дизайнер, верстальщик-перфекционист
    Дадим, например, этим областям класс target-area и применим такой скрит:
    $(document).on('mouseover mousemove', function (e) {
      if ($(e.target).hasClass('target-area')) {
        //	делаем что-то, если курсор в заданной области
      } else {
        //	делаем что-то, если курсор вне заданной области		
      }
    });


    Если в блоках есть контент, сошлемся на предков:

    $(document).on('mouseover mousemove', function (e) {
      if ($(e.target).hasClass('target-area') || $(e.target).parents('.target-area').length) {
        //	делаем что-то, если курсор в заданной области
      } else {
        //	делаем что-то, если курсор вне заданной области	
      }
    });
    Ответ написан
    Комментировать