Исчезающая шапка при прокрутке страницы
Привет всем.
Столкнулся с проблемкой, нужна помощь знающих людей. Хочу реализовать плавноисчезающую шапку по мере прокрутки страницы (примерно как в приложении Google Play для андройда), но нагуглить такой скрипт не удается. Сам я в скриптинге не силен. Пожалуйста помогите решить эту задачу. У нас есть шапка div с привязанным к ней классом - "name", нужно сделать так, что бы по мере прокрутки страницы данный блок менял свою opacity ближе к нулю (аналогично по мере возвращения страницы к верху opacity меняется ближе к 1). Хотелось бы что бы данный скрипт работал в мобильных браузерах так же хорошо как и в компьютерных. Хороший пример подобной шапочки есть тут: https://sevenmilesmoscow.wordpress.com/ заранее спасибо всем кто поможет:thanks: |
(function() {
var elem = document.querySelector('.name'),
body = document.body,
html = document.documentElement;
window.addEventListener('scroll', function() {
var scrollHeight = (html.scrollHeight || body.scrollHeight) - this.innerHeight,
scrollTop = html.scrollTop || body.scrollTop || 0;
elem.style.opacity = 1 - 1 / scrollHeight * scrollTop;
});
})();
|
Цитата:
Может я что то не правильно делаю. Сайт в системе uCoz |
Видимо да.
Вот, для примера: http://jsfiddle.net/jmLaepso/ Скорей всего Вы не туда скрипт ставите, ставьте перед закрывающимся тэгом body, или оберните в onload/DOMContentLoaded. |
Цитата:
Я его и перед концом body вставлял и в head тоже. Что значит обернуть в onload/DOMContentLoaded ??? |
Цитата:
window.addEventListener('DOMContentLoaded', function() {
var elem = document.querySelector('.name'),
body = document.body,
html = document.documentElement;
this.addEventListener('scroll', function() {
var scrollHeight = (html.scrollHeight || body.scrollHeight) - this.innerHeight,
scrollTop = html.scrollTop || body.scrollTop || 0;
elem.style.opacity = 1 - 1 / scrollHeight * scrollTop;
});
});
|
Неее. Сейчас проверил:
Снес все со своей страницы и поставил скрипт заного... Работает. Посмотрел хтмл и походу понял: У меня скролл осуществляется не в <body> а в другом <div> Т.Е. Боди неподвижна, а скроллится в Див с классом "content" по этому и не реагирует. Как то можно дописать скрипт и указать что бы он скролл брал с определенного ДИВа? |
window.addEventListener('DOMContentLoaded', function() {
var elem = document.querySelector('.name'),
content = document.querySelector('.content');
this.addEventListener('scroll', function() {
elem.style.opacity = 1 - 1 / (content.scrollHeight - content.clientHeight) * content.scrollTop;
});
});
|
Один черт не срабатывает.
Почему такое может быть? |
russia091, извиняюсь, это я немного напутал.
window.addEventListener('DOMContentLoaded', function() {
var elem = document.querySelector('.name'),
content = document.querySelector('.content');
content.addEventListener('scroll', function() {
elem.style.opacity = 1 - 1 / (this.scrollHeight - this.clientHeight) * this.scrollTop;
});
});
|
:D Блин, а я уже сайт переделал.
Ладно, тогда такую проблемку вижу: Шапка зафиксирована, но меняет прозрачность, и при этом она ни куда не девается, то есть в сквоь нее ссылки же не нажать? Как можно решить? Предлагаю вариант такой: Если opacity = 0, то z-index = 0 :write: пропиши пожалуйста :thanks: |
window.addEventListener('DOMContentLoaded', function() {
var elem = document.querySelector('.name'),
content = document.querySelector('.content'),
isVisible = true;
content.addEventListener('scroll', function() {
var value = 1 - 1 / (this.scrollHeight - this.clientHeight) * this.scrollTop;
elem.style.opacity = value;
if(isVisible != !!value) {
elem.style.display = isVisible ? 'none' : '';
isVisible = !isVisible;
}
});
});
|
(function() {
var elem = document.querySelector('.opacTop'),
body = document.body,
html = document.documentElement;
isVisible = true;
window.addEventListener('scroll', function() {
var scrollHeight = (html.scrollHeight || body.scrollHeight) - this.innerHeight,
scrollTop = html.scrollTop || body.scrollTop || 0;
elem.style.opacity = 1 - 7 / scrollHeight * scrollTop;
elem.style.opacity = value;
if(isVisible != !!value) {
elem.style.display = isVisible ? 'none' : '';
isVisible = !isVisible;
}
});
})();
Я верно прописал? Потому что не срабатывает. |
russia091, так Вам прокрутка блока или всей страницы нужна?
Если прокрутка блока, то выше рабочий вариант. А если страницы, то:
window.addEventListener('DOMContentLoaded', function() {
var elem = document.querySelector('.opacTop'),
body = document.body,
html = document.documentElement;
isVisible = true;
window.addEventListener('scroll', function() {
var scrollHeight = (html.scrollHeight || body.scrollHeight) - this.innerHeight,
scrollTop = html.scrollTop || body.scrollTop || 0,
value = 1 - 1 / scrollHeight * scrollTop;
elem.style.opacity = value;
if(isVisible != !!value) {
elem.style.display = isVisible ? 'none' : '';
isVisible = !isVisible;
}
});
});
|
А нет, взял второй вариант кода (под страницу который), к сожалению он не видит сылки под шапкой, когда шапка исчезла:-?
|
|
Хм странно у меня этот же скрипт стоит, а все равно ссылки не нажимаются.
У меня кстати еще пара вопросов: - Я заметил, что чем длиннее страница, тем медленнее исчезает шапочка. То есть за основу он берет длину всей страницы, а возможно взять за основу определенное расстояние скажем в пикселях, что бы шапка всегда исчезала одинаково? - В конце концов, чем обязан тебе за помощь? :thanks: Я не особо богат, но и не нищий)) |
window.addEventListener('DOMContentLoaded', function() {
var elem = document.querySelector('.opacTop'),
body = document.body,
html = document.documentElement;
isVisible = true;
window.addEventListener('scroll', function() {
var maxHeight = 200, //Вот оно
scrollHeight = (html.scrollHeight || body.scrollHeight) - this.innerHeight,
scrollTop = html.scrollTop || body.scrollTop || 0,
value = 1 - 1 / Math.min(scrollHeight, maxHeight) * scrollTop;
elem.style.opacity = value;
if(isVisible != !!value) {
elem.style.display = isVisible ? 'none' : '';
isVisible = !isVisible;
}
});
});
Цитата:
|
Посмотри:
Я увидел почему ссылки не нажимаются. Сначала глянул твой пример через Ctrl+Shift+i и заметил, что у тебя opacity снижается до 0, после чего добавляется стиль dysplay: none. Потом посмотрел тоже самое на своем сайте и вот что увидел: ![]() opacity уходит в минус, при том чем ниже, тем больше минус. А раз нет нуля, то и display:none не появляется :D . Почему так происходит интересно? |
russia091, ссылку на сайт можно?
|
Пожалуйста:
http://start-in-game.ru/ Когда Opacity = 0 , то dysplay:none появляется. Но уменьшение opacity не имеет тормозов. |
window.addEventListener('DOMContentLoaded', function() {
var elem = document.querySelector('.opacTop'),
body = document.body,
html = document.documentElement;
isVisible = true,
maxHeight = 200;
window.addEventListener('scroll', function() {
var scrollHeight = (html.scrollHeight || body.scrollHeight) - this.innerHeight,
scrollTop = html.scrollTop || body.scrollTop || 0,
value = 1 - 1 / Math.min(scrollHeight, maxHeight) * Math.min(scrollTop, maxHeight);
elem.style.opacity = value;
if(isVisible != !!value) {
elem.style.display = isVisible ? 'none' : '';
isVisible = !isVisible;
}
});
});
Вот так точно работать будет. :) |
Ruslan_xDD,
мысли вслух: расчитывать что value будет 1 или 0 опасная практика... |
Отлично, все работает:victory: Я тебя поздравляю, ты первый кто написал такой скрипт для html сайтов. В гугле до этого я такого не находил.
IE тоже кстати читает этот скрипт. Спасибо тебе :yes: |
рони, тут всё чётко просчитано. :) Другим значение, по сути, не может быть.
|
| Часовой пояс GMT +3, время: 21:47. |