Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 14.10.2014, 21:25
Интересующийся
Отправить личное сообщение для eucalipt Посмотреть профиль Найти все сообщения от eucalipt
 
Регистрация: 27.08.2014
Сообщений: 19

Я правильно понимаю работу предоставленного скрипта? Поправьте меня в случае чего, пожалуйста.
Описывал в комментариях.

var header = document.getElementById('header'); // Получаем id элемента и записываем его в переменную header
    var scrolled = false; // Как Вы писали, это флаг, он помогает снизить нагрузку на DOM страницы
    window.onscroll = function(e) { // Тут мы определяем, прокручивается ли окно (Альтернатива body onscroll=('..')?) и если
    // прокручивается, то запускаем анонимную функцию с параметром 'e'
        var scrollTop = document.body.scrollTop || document.documentElement.scrollTop; // Переменная получает значение прокрутки
        if (scrollTop > 10) { // Если значение прокрутки больше 10
            if (!scrolled) { // И если страница не прокручивается (?)
                header.className += ' compact'; // То к названию класса элемента с id header прикручиваем compact
                scrolled = true; // Тут непонятно (*)
            }
        } else { // Если мы вернулись в начало страницы
            if (scrolled) { // Если страница прокручивается (почему тут прокручивается, а там не прокручивается?)
                header.className = header.className.replace('compact', ''); // Удаляем compact из названия класса
                scrolled = false; // И тут непонятно (*2)
            }
        }
    }; // И, как я понимаю, все анимация происходит при помощи css?
Ответить с цитированием
  #12 (permalink)  
Старый 14.10.2014, 22:40
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от eucalipt
Альтернатива body onscroll
Честно говоря, не знаю на че правильно вешать - на body или window. В хроме событие всплывает с элемента document.

Сообщение от eucalipt
с параметром 'e'
Ну он нам не понадобился, можно его и не указывать.
Сообщение от eucalipt
И если страница не прокручивается (?)
Наверно неудачное имя флага придумал. Смысл его: "скролл страницы больше 10 пикселей обработан". Или "шапку уже уменьшили".

шапка уменьшена = ложь
..
если (скролл > 10) {
    если (это неправда, что шапка уменьшена) {
      уменьшаем шапку;
      шапка уменьшена = правда
  }
} иначе {
    если (шапка уменьшена) {
        возвращаем шапку;
        шапка уменьшена = ложь
    }
}

Таким образом, мы не пытаемся уменьшить шапку если она уже уменьшена. А в твоем скрипте такой косяк есть.

Сообщение от eucalipt
И, как я понимаю, все анимация происходит при помощи css?
Да. Все современные браузеры, IE10+, аппаратное ускорение в большинстве случаев (правда не в случае height/width, насколько я знаю).
Чтоб увеличить охват старых браузеров, css3 свойства нужно продублировать с вендорными префиксами (-webkit, -moz и тд)
__________________
В личку только с интересными предложениями

Последний раз редактировалось danik.js, 14.10.2014 в 22:43.
Ответить с цитированием
  #13 (permalink)  
Старый 14.10.2014, 22:54
Интересующийся
Отправить личное сообщение для eucalipt Посмотреть профиль Найти все сообщения от eucalipt
 
Регистрация: 27.08.2014
Сообщений: 19

Вот он, вот он профессионал. Объяснил про флаг так четко, что я сам кому хочешь теперь объясню. Если бы можно было апнуть карму 10 раз, апнул бы 11.

Но а если насчет решения, то я их совместил
$(function changeHeader() {
	var header = document.getElementById('header');
	var scrolled = false;
	
	window.onscroll = function(e) {
		
		if ($(document).scrollTop() > 10) {
		
			if (!scrolled) {
			
				$("#header").animate({ // Меняем Header
					lineHeight: "64px",
					backgroundColor: "#ffffff"
				}, {"duration":100, "queue":false});
				
				$("#header section div.logo span").animate({ // Меняем Logo
					color: "#CD0000"
				}, {"duration":100, "queue":false});
				
				$("#header section div.sign").animate({ // Меняем Sign Up и Sign In
					color: "#999999",
					borderColor: "#2787a4"
				}, {"duration":100, "queue":false});
				
				scrolled = true;
				
			}
			
		} else {
			
			if (scrolled) {
			
				$("#header").animate({ // Меняем Header
					lineHeight: "100px",
					backgroundColor: "rgba(255, 255, 255, 0)",
				}, {"duration":100, "queue":false});
				
				$("#header section div.logo span").animate({ // Меняем Logo
					
					color: "#ffffff"
				}, {"duration":100, "queue":false});
				
				$("#header section div.sign").animate({ // Меняем Sign Up и Sign In
					color: "#999999",
					borderColor: "#cccccc"
				}, {"duration":100, "queue":false});
				
				scrolled = false;
				
			}
			
		}
		
	}
});
Ответить с цитированием
  #14 (permalink)  
Старый 14.10.2014, 22:55
Интересующийся
Отправить личное сообщение для eucalipt Посмотреть профиль Найти все сообщения от eucalipt
 
Регистрация: 27.08.2014
Сообщений: 19

Еще раз огромное спасибо! Настоящий профессионал!
Ответить с цитированием
  #15 (permalink)  
Старый 14.10.2014, 23:00
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от eucalipt
я их совместил
Лучше бы не совмещал
window.onscroll - это (обязательно)
document.getElementById('header') - и это (оно у я и не юзается)
вернуть на функции jQuery.

Так а че, не устраивает что в убогом IE8-9 не будет анимации? Уж не знаю что лучше - дерганная тормозная анимация или резкая, но без лагов, смена.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #16 (permalink)  
Старый 14.10.2014, 23:10
Интересующийся
Отправить личное сообщение для eucalipt Посмотреть профиль Найти все сообщения от eucalipt
 
Регистрация: 27.08.2014
Сообщений: 19

Да, строчку с header'ом просто убрать забыл.

Как по мне, так я под осла подстраиваться не собираюсь. Пусть лучше тормоза, поддерживающие то, что уже давно должно быть мертво, переседают на новый софт, чем я буду верстать убожину. Дизайн не должен страдать из за тупого юзверя.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятное поведение - console.log Artyom Общие вопросы Javascript 19 28.11.2013 20:50
Непонятное поведение в Chrome main.c Opera, Safari и др. 3 10.10.2013 18:52
ng-repeat кастомный фильтр для фильтрации обьектов (непонятное поведение) VerDiz Angular.js 10 04.08.2013 15:42
непонятное поведение скрипта bpystep Общие вопросы Javascript 2 02.04.2012 00:48
Помогите понять поведение скрипта demoniqus Общие вопросы Javascript 3 02.03.2012 09:58