Мне интересно, можно ли использовать атрибут rel в качестве привязки. Например, html будет читать следующее:
<a href="http://www.example.com/portfolio" rel="#portfolio">Portfolio</a>
<div id="portfolio">Content goes here></div>
Когда нажимается ссылка, вместо того, чтобы вводить пользователя на страницу, текущая страница будет прокручиваться до содержимого.
Идея состоит в том, чтобы на домашней странице располагался весь контент или весь контент сайта, а для навигации по контенту, приведенному ниже, можно использовать навигацию вверху. Однако, если javascript не включен, пользователь будет отправлен на соответствующую страницу.
Кроме того, я использую код в этой скрипке (http://jsfiddle.net/5z3NH/1/), чтобы активировать плавную прокрутку. Я бы хотел адаптировать его в соответствии с ситуацией, описанной выше.
Заранее спасибо!
[Редактировать]
Я обновил свой скрипт, чтобы попробовать метод, который предложил Юкка, то есть извлечение пути из URL-адреса href и прокрутка до соответствующего div вниз по странице. Он пока не работает, потому что я заканчиваю ссылку на URL-адрес, но, возможно, я могу получить еще несколько указателей.
Вы можете попробовать это.
JS включен
<nav class="script">
<ul>
<li><a href="#" data-rel="s1">Link 1</a>
</li><li><a href="#" data-rel="s2">Link 2</a>
</li><li><a href="#" data-rel="s3">Link 3</a>
</li><li><a href="#" data-rel="s4">Link 4</a>
</li><li><a href="#" data-rel="s5">Link 5</a>
</li>
</ul>
</nav>
<section id="s1">
</section>
<section id="s2">
</section>
...
$(function () {
$('nav li a').click(function(e) {
e.preventDefault();
$('html, body').stop().animate({ scrollTop: $('#'+ $(this).data('rel')).offset().top + 'px' }, 1000, 'easeOutSine');
});
});
JS отключен
<noscript>
<style>.script { display: none; }</style>
<nav class="noscript">
<ul>
<li><a href="#home">Link 1</a>
</li><li><a href="#sevices">Link 2</a>
</li><li><a href="#portfolio">Link 3</a>
</li><li><a href="#about">Link 4</a>
</li><li><a href="#contact">Link 5</a>
</li>
</ul>
</nav>
</noscript>
Или универсальное решение, как вы пытались в своей скрипке
<nav>
<ul>
<li><a href="http://www.example.com/#home">Link 1</a>
</li><li><a href="http://www.example.com/#sevices">Link 2</a>
</li><li><a href="http://www.example.com/#portfolio">Link 3</a>
</li><li><a href="http://www.example.com/#about">Link 4</a>
</li><li><a href="http://www.example.com/#contact">Link 5</a>
</li>
</ul>
</nav>
$(function () {
$('a').click(function(e) {
e.preventDefault();
var target = $($(this).attr('href').replace('http://www.example.com/', ''));
$('html, body').animate({scrollTop: target.offset().top + 'px' }, 1000);
});
});
Ваш FIDDLE обновлен.
Нет, это не имело бы смысла и не сработало бы. Атрибут rel
имеет определенное значение, хотя браузер в значительной степени игнорируется. Он не предназначен для изменения и не влияет на адрес получателя ссылки.
Если вы просто хотите перейти к элементу внутри страницы, вы можете просто использовать <a href="http://www.example.com/portfolio#portfolio">Portfolio</a>
. Нет необходимости в JavaScript.
Если вы хотите скрыть другой контент и показать только одну часть страницы, в режиме "одностраничное приложение", вам (на практике) необходим JavaScript в существенном ключе. Чтобы страница работала без JavaScript (возможно, особенно с учетом поисковых систем), вы можете сделать так, как в своем вопросе, но с другим атрибутом, несущим информацию, например
<a href="http://www.example.com/portfolio" data-part="portfolio">Portfolio</a>
с обработчиком событий onclick
установленным для использования атрибута data-part
подходящим способом и для прерывания нормальной обработки ссылок.
Фактически, вы, вероятно, могли бы отказаться от такого дополнительного атрибута с подходящей схемой именования. Если значения атрибута id
совпадают с последней частью URL-адреса, как в примере, ваш скрипт может просто прочитать часть пути атрибута href
- вы это значение как таковое, если вы используете обычные относительные URL-адреса, как в href=portfolio
,
data-rel
используйтеdata-rel
вместоdata-rel
во-rel
вы должны запретить поведение привязки по умолчанию, чтобы иметь возможность оставаться на той же странице, чтобы ваш атрибутhref
бесполезен в этом сценарии. Я работаю на Fiddle с плавной прокруткой, взгляните на Fiddle и если у вас есть какие-либо вопросы по этому поводу, не стесняйтесь задавать здесь в комментариях;)