Есть ли способ прокрутить вниз ссылку привязки с помощью jQuery?
Вроде:
$(document).ready(function(){
$("#gotomyanchor").click(function(){
$.scrollSmoothTo($("#myanchor"));
});
});
?
Есть ли способ прокрутить вниз ссылку привязки с помощью jQuery?
Вроде:
$(document).ready(function(){
$("#gotomyanchor").click(function(){
$.scrollSmoothTo($("#myanchor"));
});
});
?
Вот как я это делаю:
var hashTagActive = "";
$(".scroll").on("click touchstart" , function (event) {
if(hashTagActive != this.hash) { //this will prevent if the user click several times the same link to freeze the scroll.
event.preventDefault();
//calculate destination place
var dest = 0;
if ($(this.hash).offset().top > $(document).height() - $(window).height()) {
dest = $(document).height() - $(window).height();
} else {
dest = $(this.hash).offset().top;
}
//go to destination
$('html,body').animate({
scrollTop: dest
}, 2000, 'swing');
hashTagActive = this.hash;
}
});
Тогда вам просто нужно создать свой якорь следующим образом:
<a class="scroll" href="#destination1">Destination 1</a>
Вы можете увидеть это на моем веб-сайте.
Демо также доступно здесь: http://jsfiddle.net/YtJcL/
Я бы использовал простой фрагмент кода из CSS-Tricks.com:
$(function() {
$('a[href*=#]:not([href=#])').click(function() {
if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
if (target.length) {
$('html,body').animate({
scrollTop: target.offset().top
}, 1000);
return false;
}
}
});
});
Источник: http://css-tricks.com/snippets/jquery/smooth-scrolling/
Лучшее решение, которое я видел до сих пор: jQuery: плавные прокрутки внутренних якорных ссылок
HTML:
<a href="#comments" class="scroll">Scroll to comments</a>
Script:
jQuery(document).ready(function($) {
$(".scroll").click(function(event){
event.preventDefault();
$('html,body').animate({scrollTop:$(this.hash).offset().top}, 500);
});
});
jQuery.scrollTo будет делать все, что вам нужно, и многое другое!
Вы можете передавать всевозможные вещи:
Вот код, который я использовал для быстрого привязки прокрутки jQuery ко всем привязным ссылкам:
// Smooth scroll
$('a[href*=#]').click(function () {
var hash = $(this).attr('href');
hash = hash.slice(hash.indexOf('#') + 1);
$.scrollTo(hash == 'top' ? 0 : 'a[name='+hash+']', 500);
window.location.hash = '#' + hash;
return false;
});
Мне нужна версия, которая работала для <a href="#my-id">
и <a href="/page#my-id">
<script>
$('a[href*=#]:not([href=#])').on('click', function (event) {
event.preventDefault();
var element = $(this.hash);
$('html,body').animate({ scrollTop: element.offset().top },'normal', 'swing');
});
</script>
Попробуйте это. Это код из трюков CSS, который я модифицировал, он довольно прямолинейный и выполняет горизонтальную и вертикальную прокрутку. Требуется JQuery. Вот демон
$(function() {
$('a[href*=#]:not([href=#])').click(function() {
if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
if (target.length) {
$('html,body').animate({
scrollTop: target.offset().top-10, scrollLeft:target.offset().left-10
}, 1000);
return false;
}
}
});
});
Использование hanoo script Я создал функцию jQuery:
$.fn.scrollIntoView = function(duration, easing) {
var dest = 0;
if (this.offset().top > $(document).height() - $(window).height()) {
dest = $(document).height() - $(window).height();
} else {
dest = this.offset().top;
}
$('html,body').animate({
scrollTop: dest
}, duration, easing);
return this;
};
использование:
$('#myelement').scrollIntoView();
Значение по умолчанию для продолжительности и ослабления составляет 400 мс и "качание".
Я использовал на своем сайте следующее:
$(document).ready(function(){
$('a[href^="#"]').on('click',function (e) {
e.preventDefault();
var target = this.hash,
$target = $(target);
$('html, body').stop().animate({
'scrollTop': $target.offset().top
}, 1200, 'swing', function () {
window.location.hash = target;
});
});
});
Вы можете изменить скорость прокрутки, изменив используемую по умолчанию "1200", она работает достаточно хорошо на большинстве браузеров.
после помещения кода между тегом <head> </head>
вашей страницы, вам нужно будет создать внутреннюю ссылку в теге <body>
:
<a href="#home">Go to Home</a>
Надеюсь, что это поможет!
Ps: Не забудьте позвонить:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
Я использовал плагин Smooth Scroll, http://plugins.jquery.com/smooth-scroll/. С этим плагином все, что вам нужно включить, это ссылка на jQuery и на код плагина:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript" src="javascript/smoothscroll.js"></script>
(ссылки должны иметь класс smoothScroll
для работы).
Еще одна особенность Smooth Scroll заключается в том, что имя ancor не отображается в URL-адресе!
работы
$('a[href*=#]').each(function () {
$(this).attr('href', $(this).attr('href').replace('#', '#_'));
$(this).on( "click", function() {
var hashname = $(this).attr('href').replace('#_', '');
if($(this).attr('href') == "#_") {
$('html, body').animate({ scrollTop: 0 }, 300);
}
else {
var target = $('a[name="' + hashname + '"], #' + hashname),
targetOffset = target.offset().top;
if(targetOffset >= 1) {
$('html, body').animate({ scrollTop: targetOffset-60 }, 300);
}
}
});
});
Мне не нравится добавлять в свой код классы с функциями именования, поэтому вместо этого я помещаю это вместе. Если бы я прекратил использовать гладкую прокрутку, я бы чувствовал себя хорошо, чтобы пройти через мой код и удалить все элементы class= "scroll". Используя этот метод, я могу прокомментировать 5 строк JS и все обновления сайта.:)
<a href="/about">Smooth</a><!-- will never trigger the function -->
<a href="#contact">Smooth</a><!-- but he will -->
...
...
<div id="contact">...</div>
<script src="jquery.js" type="text/javascript"></script>
<script type="text/javascript">
// Smooth scrolling to element IDs
$('a[href^=#]:not([href=#])').on('click', function () {
var element = $($(this).attr('href'));
$('html,body').animate({ scrollTop: element.offset().top },'normal', 'swing');
return false;
});
</script>
Требования:
1. Элементы <a>
должны иметь атрибут href, начинающийся с #
и больше, чем просто #
2. Элемент на странице с соответствующим атрибутом id
Что он делает:
1. Функция использует значение href для создания объекта anchorID
- В примере это $('#contact')
, /about
начинается с /
2. HTML
и BODY
анимируются на верхнее смещение anchorID
- скорость = 'нормальная' ( "быстрая", "медленная", миллисекунды)
- easing = 'swing' ('linear' и т.д. google easing)
3. return false
- он не позволяет браузеру отображать хэш в URL-адресе
- script работает без него, но это не так гладко.