Навигация по одностраничному сайту
Всем добрый вечер)
Попробывал реализовать навигацию по одностраничному сайту, делал все в фф и как следствие там все хорошо. После того как протестировал других браузерах, понял что все не очень хорошо. Где-то не реагирует на нажатие по ссылке, где-то все скочет... Ссылка на страничку - http://boooms.ru/test_js/
var navigation = new Array();
navigation.clientHeight = 0.92 * document.documentElement.clientHeight;
navigation.thisPage = window.location.hash.substring(1);
navigation.tonamePage = false;
navigation.scrollPosition = '0';
function select(id) {
switch(id) {
case 'cover':
navigation.scrollPosition = '0';
navigation.namePage = ''; break;
case 'about':
navigation.scrollPosition = navigation.clientHeight;
navigation.namePage = 'About Us'; break;
case 'freedom':
navigation.scrollPosition = 2 * navigation.clientHeight;
navigation.namePage = 'Freedom for Ideas'; break;
case 'thinking':
navigation.scrollPosition = 3 * navigation.clientHeight;
navigation.namePage = 'Thinking'; break;
case 'projects':
navigation.scrollPosition = 4 * navigation.clientHeight;
navigation.namePage = 'Projects'; break;
default:
navigation.scrollPosition = '0';
navigation.namePage = ''; break;
}
navigation.colorElement = 'rgb(0,0,0)';
}
function set() {
window.location.hash = navigation.thisPage;
document.title = 'o_O // ' + navigation.namePage;
document.getElementById(navigation.tonamePage).style.backgroundColor = 'rgb(255,255,255)';
document.getElementById(navigation.thisPage).style.backgroundColor = navigation.colorElement;
}
function scrollPage() {
if (navigator.appName == "Microsoft Internet Explorer") {
navigation.scrollPosition = document.documentElement.scrollTop;
} else {
navigation.scrollPosition = window.pageYOffset;
}
if (navigation.tonamePage == false) {
if (navigation.thisPage == false) {
navigation.thisPage = 'cover';
}
select(navigation.thisPage);
document.getElementById(navigation.thisPage).style.backgroundColor = navigation.colorElement;
document.documentElement.scrollTop = navigation.scrollPosition;
} else {
/* Определяем текущее положение */
if (navigation.scrollPosition >= 0 && navigation.scrollPosition <= 0.5 * navigation.clientHeight) {
navigation.thisPage = 'cover';
}
if (navigation.scrollPosition > 0.5 * navigation.clientHeight && navigation.scrollPosition <= 1.5 * navigation.clientHeight) {
navigation.thisPage = 'about';
}
if (navigation.scrollPosition > 1.5 * navigation.clientHeight && navigation.scrollPosition <= 2.5 * navigation.clientHeight) {
navigation.thisPage = 'freedom';
}
if (navigation.scrollPosition > 2.5 * navigation.clientHeight && navigation.scrollPosition <= 3.5 * navigation.clientHeight) {
navigation.thisPage = 'thinking';
}
if (navigation.scrollPosition > 3.5 * navigation.clientHeight) {
navigation.thisPage = 'projects';
}
if (navigation.thisPage != navigation.tonamePage) {
select(navigation.thisPage);
set();
}
}
navigation.tonamePage = navigation.thisPage;
}
function clickMenu(element) {
select(element);
if (navigator.appName == "Microsoft Internet Explorer") {
window.pageYOffset = navigation.scrollPosition;
} else {
document.documentElement.scrollTop = navigation.scrollPosition;
}
}
<!doctype html>
<html lang="ru-RU">
<head>
<meta charset="utf-8" />
<title>Test JS</title>
<link rel="stylesheet" href="css/style.css" />
<script src='js/navigation.js'></script>
</head>
<body onload="setInterval('scrollPage();', 100)">
<header>
<nav id="nav">
<a id="cover" onclick="clickMenu(this.id)">1</a>
<a id="about" onclick="clickMenu(this.id)">2</a>
<a id="freedom" onclick="clickMenu(this.id)">3</a>
<a id="thinking" onclick="clickMenu(this.id)">4</a>
<a id="projects" onclick="clickMenu(this.id)">5</a>
</nav><!-- /nav -->
</header>
<article class="cover"></article>
<article class="about"></article>
<article class="thinking"></article>
<article class="freedom"></article>
<article class="projects"></article>
</body>
</html>
Надеюсь поможете доковырять его до более менее работоспособного состояния, у самого знаний не хватат, так как практически с этого примера и начал изучать. Заранее спасибо за помощь. |
Это можно сделать используя лишь HTML+CSS. http://dl.dropbox.com/u/6001712/examples/index.html
|
Да, якоря конечно штука полезная) Но в полном объеме не получиться все реализовать. При нажатии на ссылку, можно сделать ту же реакцию без использования js, за исключением изменения данных в теге title все будет. А вот если делать еще скроллинг то чисто на html+css не получиться. Когда страничка прокручивается до определенного положения, то происходт смена 3-х вещей: title, в адресе меняется префикс и в меню происходит выделение следующего пункта. Magneto, согласен ваш вариант близок, но немного не то.
|
Цитата:
глобальные список страниц для перехода-ничего не мешает указывать там и полный адрес страницы,для тех у кого js не подключен,для поисковиков.. зачем менять якоря для страницы если можно поставить адрес в нормальном виде? Соответственно исходя из этого и архитектура не верная |
На самом деле это делаю небольшой сайт для себя, а не какой то проект с комерческой целью. Поэтому о поисковых системах не думаю вообще, по этой же причине там будет css3, хотя далеко не везде все это будет работать. Тут нет цели хорошей индексации и полной кроссбраузерности.
dmitriymar, без js сейчас практически никто не сидит, а кто не юзает, его проблемы. А вот как поставить адрес в нормальном виде пока недодумал. От '#' было бы неплохо избавиться, но незнаю как..... |
|
спасибо за ссылку, поизучаю.
|
| Часовой пояс GMT +3, время: 21:39. |