Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.11.2016, 13:06
Интересующийся
Отправить личное сообщение для vittoS Посмотреть профиль Найти все сообщения от vittoS
 
Регистрация: 05.11.2016
Сообщений: 10

Упростить скрипт на JQuery
Всем привет!
В JS совсем юн, а использовать надо. Изучаю потихоньку его, но пишу свои простые скрипты пока на JQuery. Поэтому, не судите строго студента. У меня вопрос к более опытным и знающим. Работаю над сайтом.Задача стоит чтобы при скроллинге header изменял высоту и размер логотипа. Написал код:
//    header scroll
    $(window).scroll(function() {
        if ($(this).scrollTop() > 1) { 
            $('.navigation').hide(),
            $('.header').addClass('header_sticky'),
            $('.header__logo').addClass('header__logo_sticky'),
            $('.header__switch').show('drop', { direction: 'right' });
        } else {
            $('.navigation').show(),
            $('.header').removeClass('header_sticky'),
            $('.header__logo').removeClass('header__logo_sticky'),
            $('.header__switch').hide('drop', { direction: 'right' });
        }
    }); // end header scroll


Вопрос такой,
во-первых: правильно ли (синтаксически) перечислять команды через запятую (Изначально через ";" было. Но я так сделал потому что ошибку искать начал. Ошибка:header дергался, небольшой зазор в 1px сверху начал появляться-исчезать. Начал отлаживать, мучался, дошёл до инструкции if else попробовал через запятую прописать. И вроде дергаться перестал)

и во-вторых: Как можно этот код упростить? мне кажется он слишком громоздкий и не совсем верный хоть и рабочий.

Был бы признателен за помощь)
P.s: ну и в идеале (извините за наглость, конешно) было бы интересно на ванильном JS этот код посмотреть
Ответить с цитированием
  #2 (permalink)  
Старый 07.11.2016, 10:52
Аватар для Black_Star
Профессор
Отправить личное сообщение для Black_Star Посмотреть профиль Найти все сообщения от Black_Star
 
Регистрация: 11.07.2016
Сообщений: 300

Я тут как минимум вижу, что всё можно было сделать через taggle() и taggleClass(), и сократить в половину
Ответить с цитированием
  #3 (permalink)  
Старый 07.11.2016, 13:59
Аватар для Coriolan161
Профессор
Отправить личное сообщение для Coriolan161 Посмотреть профиль Найти все сообщения от Coriolan161
 
Регистрация: 21.11.2015
Сообщений: 440

vittoS,
Цитата:
правильно ли (синтаксически) перечислять команды через запятую
Это можно, потому что ты последовательно вызываешь здесь методы и оператор запятая могет с этим работать.
Но так не принято)
Ответить с цитированием
  #4 (permalink)  
Старый 07.11.2016, 14:03
Аватар для Coriolan161
Профессор
Отправить личное сообщение для Coriolan161 Посмотреть профиль Найти все сообщения от Coriolan161
 
Регистрация: 21.11.2015
Сообщений: 440

vittoS,
Непонятно зачем при таком скроллТопе делать стики-хедер. Почему сразу не сделать его fixed? И при скролле вешать/убирать классы на логотип и сам хедер
Ответить с цитированием
  #5 (permalink)  
Старый 07.11.2016, 19:14
Интересующийся
Отправить личное сообщение для vittoS Посмотреть профиль Найти все сообщения от vittoS
 
Регистрация: 05.11.2016
Сообщений: 10

А через toggle как? Не понимаю немного...можно пример?
Ответить с цитированием
  #6 (permalink)  
Старый 07.11.2016, 19:18
Интересующийся
Отправить личное сообщение для vittoS Посмотреть профиль Найти все сообщения от vittoS
 
Регистрация: 05.11.2016
Сообщений: 10

Сообщение от Coriolan161 Посмотреть сообщение
vittoS,
Непонятно зачем при таком скроллТопе делать стики-хедер. Почему сразу не сделать его fixed? И при скролле вешать/убирать классы на логотип и сам хедер
А он и есть "position:fixed" в css. Задача стояла такая - нужно было чтобы
header и логотип меняли размер на меньший и цвет, а меню навигации плавно исчезало при скроллинге.

Примерчик бы...
Ответить с цитированием
  #7 (permalink)  
Старый 11.11.2016, 11:25
Интересующийся
Отправить личное сообщение для vittoS Посмотреть профиль Найти все сообщения от vittoS
 
Регистрация: 05.11.2016
Сообщений: 10

Добрые люди намекнули как на JS эти инструкции можно записать.
Вот. переписал почти на чистом.
//    header scroll
    $(window).scroll(function() {
        if ($(this).scrollTop() > 1) { 
            document.getElementsByClassName('navigation')[0].style.display = "none";   
            document.getElementsByClassName('header')[0].classList.add('header_sticky');
            document.getElementsByClassName('logo')[0].classList.add('logo_sticky'); 
            document.getElementsByClassName('header__switch')[0].style.display = "block";
        } else {
            document.getElementsByClassName('navigation')[0].style.display = "block";
            document.getElementsByClassName('header')[0].classList.remove('header_sticky'); 
            document.getElementsByClassName('logo')[0].classList.remove('logo_sticky'); 
            document.getElementsByClassName('header__switch')[0].style.display = "none";
        }
    }); // end header scroll


Пока что грубоватая модель но хотя бы видно куда двигаться
А как добавить плавности исчезновению? И что значит нулевой индекс массива ([0]) после объявления селектора класса в инструкции?
Ответить с цитированием
  #8 (permalink)  
Старый 11.11.2016, 13:06
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

vittoS,
document.getElementsByClassName возвращает коллекцию всех элементов с указанным классом
https://developer.mozilla.org/ru/doc...ntsByClassName
[0] - первый элемент из найденных

Насчет плавности - например, возвращаясь к jQuery - fadeOut, fadeIn

http://jquery.page2page.ru/index.php...81%D1%82%D0%B8

Последний раз редактировалось Dilettante_Pro, 11.11.2016 в 13:11.
Ответить с цитированием
  #9 (permalink)  
Старый 19.11.2016, 15:19
Интересующийся
Отправить личное сообщение для vittoS Посмотреть профиль Найти все сообщения от vittoS
 
Регистрация: 05.11.2016
Сообщений: 10

Сообщение от Dilettante_Pro Посмотреть сообщение
vittoS,
document.getElementsByClassName возвращает коллекцию всех элементов с указанным классом
https://developer.mozilla.org/ru/doc...ntsByClassName
[0] - первый элемент из найденных

Насчет плавности - например, возвращаясь к jQuery - fadeOut, fadeIn

http://jquery.page2page.ru/index.php...81%D1%82%D0%B8
Благодарю
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не срабатывает скрипт jQuery Heidel jQuery 2 22.09.2012 18:05
[Работа] Два модальных окна на JQuery VictorM Работа 3 14.08.2012 23:09
Не работает скрипт JQuery в IE7 only_dimon Internet Explorer 5 11.08.2012 00:29
Скрипт на jQuery NeoMurderer jQuery 7 09.03.2011 18:16
Помогите упростить скрипт. operatorr Ваши сайты и скрипты 6 05.01.2010 12:57