Использовать атрибут rel в качестве ссылки

0

Мне интересно, можно ли использовать атрибут 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-адрес, но, возможно, я могу получить еще несколько указателей.

  • 0
    data-rel используйте data-rel вместо data-rel во- rel вы должны запретить поведение привязки по умолчанию, чтобы иметь возможность оставаться на той же странице, чтобы ваш атрибут href бесполезен в этом сценарии. Я работаю на Fiddle с плавной прокруткой, взгляните на Fiddle и если у вас есть какие-либо вопросы по этому поводу, не стесняйтесь задавать здесь в комментариях;)
Теги:
anchor
rel

2 ответа

2
Лучший ответ

Вы можете попробовать это.

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 обновлен.

  • 1
    я думаю он будет рад твоему ответу: D
  • 0
    Спасибо, но это не входит в суть того, что я пытаюсь сделать. Навигация всегда будет видна. То, что меняется в зависимости от того, включен ли javascript, - это то, куда пользователь попадает: вниз по странице (если javascript включен) или до URL (если не включен).
Показать ещё 4 комментария
2

Нет, это не имело бы смысла и не сработало бы. Атрибут 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,

  • 0
    Понимаю. Спасибо за объяснение. Я полагаю, что лучший вариант для меня - последний, который вы описали, то есть использование части пути для ссылки на страницу и избежание каких-либо дополнительных атрибутов. Теперь, чтобы закодировать это ...
  • 0
    Я обновил свою скрипку, пытаясь извлечь путь к URL-адресу href и использовать его, чтобы найти селектор вниз по странице, но, очевидно, у меня что-то не так, потому что я просто ссылаюсь на URL.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню