JQuery kullanarak sayfayı bir çapa yukarı veya aşağı kaydırmak nasıl?


176

Yukarı veya aşağı yerel bir bağlantı için bir bağlantıyı tıklattığınızda slayt efekti eklemek için bir yol arıyorum.

Böyle bir bağlantınız olduğu bir şey istiyorum:

<a href="#nameofdivetc">link text, img etc.</a>

belki bir sınıf eklendiğinde, bu bağlantının kayan bir bağlantı olmasını istediğinizi biliyorsunuz:

<a href="#nameofdivetc" class="sliding-link">link text, img etc.</a>

Ardından bu bağlantı tıklanırsa, sayfa istenen yere yukarı veya aşağı kayar (div, başlık, sayfanın üstü vb. Olabilir).


Bu daha önce vardı:

    $(document).ready(function(){
    $(".scroll").click(function(event){
        //prevent the default action for the click event
        event.preventDefault();

        //get the full url - like mysitecom/index.htm#home
        var full_url = this.href;

        //split the url by # and get the anchor target name - home in mysitecom/index.htm#home
        var parts = full_url.split("#");
        var trgt = parts[1];

        //get the top offset of the target anchor
        var target_offset = $("#"+trgt).offset();
        var target_top = target_offset.top;

        //goto that anchor by setting the body scroll top to anchor top
        $('html, body').animate({scrollTop:target_top}, 1500, 'easeInSine');
    });
});

Yanıtlar:


427

Açıklama

Bunu jQuery.offset()ve tuşlarını kullanarak yapabilirsiniz jQuery.animate().

JsFiddle Gösterisini kontrol edin .

Örneklem

function scrollToAnchor(aid){
    var aTag = $("a[name='"+ aid +"']");
    $('html,body').animate({scrollTop: aTag.offset().top},'slow');
}

scrollToAnchor('id3');

Daha fazla bilgi


52
Bu ayrıca sayfadaki tüm dahili bağlantı bağlantıları ile çalışmak için genel yapılabilir:$("a[href^=#]").click(function(e) { e.preventDefault(); var dest = $(this).attr('href'); console.log(dest); $('html,body').animate({ scrollTop: $(dest).offset().top }, 'slow'); });
bardo

@bardo, nasıl uygulanmalı? Dkmaack'in çözümünü sizinkiyle değiştirdim, ancak kayma orada değil (çapanın kendisi işlevseldir). Neyi kaçırıyorum?
jakub

1
@bardo history.pushState(null, null, dest);, varsayılan konum
karmaşasını

7
FYI, @ bardo'nun çözümüne ek olarak, en son jQuery'yi böyle kullanırken, $ ("a [href ^ = \\ #]") stackoverflow.com/questions/7717527/…
jaegs

1
Hem html hem de bedeni canlandırmanın amacı nedir? Ne yaptığımızı bilmediğimiz ve sadece hepsini yaptığımız bir duruma benziyor. Bu birden fazla skor başlatabilir mi?
18'de ygoe

30

Href özelliğinizin aynı adda (her zamanki gibi) etiket kimliğine sahip bir div öğesine bağlandığını varsayarsak, bu kodu kullanabilirsiniz:

HTML

<a href="#goto" class="sliding-link">Link to div</a>

<div id="goto">I'm the div</div>

JAVASCRIPT - (Jquery)

$(".sliding-link").click(function(e) {
    e.preventDefault();
    var aid = $(this).attr("href");
    $('html,body').animate({scrollTop: $(aid).offset().top},'slow');
});

1
Tam kontrol sağlayan çok basit ama güçlü bir çözüm. Bu cevabın daha fazla oy alması gerektiğini düşünüyorum.
cronfy

Anlaşıldı, bu en iyi çözüm ve bana çok yardımcı oldu
muhtemelen

Çalışır, ancak kullanım amacını yener name. Kullandığınızda <a name="something"></a>, dışarıdan da başvurabilirsiniz, ancak çözümünüz bunu sağlamaz.
Ramtin

8

Bu hayatımı çok kolaylaştırdı. Temel olarak elementlerinizin kimlik etiketini koyarsınız ve kodunu çok fazla kod kullanmadan kaydırırsınız

http://balupton.github.io/jquery-scrollto/

Javascript'te

$('#scrollto1').ScrollTo();

HTML'nizde

<div id="scroollto1">

İşte ben sayfanın aşağısındayım


7
function scroll_to_anchor(anchor_id){
    var tag = $("#"+anchor_id+"");
    $('html,body').animate({scrollTop: tag.offset().top},'slow');
}

3
Gerçek soru, + "" ikinci satırda herhangi bir şey yapıyor mu?
Rob

@Rob javascript yüzden kullanarak, dize interpolasyon yok +gibi birleştirir onları dizeleri ile veya vars: "#some_anchor". Gerçekten, ikinci akraba anchor_id + ""gerek yok diye düşünüyorum.
onebree

Teşekkürler @onebree Merak ettiğim ikinci concat oldu :)
Rob

5

Ayrıca, hedefin bir dolguya sahip olduğunu ve positionbunun yerine kullanacağını da düşünmelisiniz offset. Ayrıca, hedefin üst üste gelmesini istemediğiniz potansiyel bir gezinme çubuğunu da hesaba katabilirsiniz.

const $navbar = $('.navbar');

$('a[href^="#"]').on('click', function(e) {
    e.preventDefault();

    const scrollTop =
        $($(this).attr('href')).position().top -
        $navbar.outerHeight();

    $('html, body').animate({ scrollTop });
})

IMHO en iyi çözümdür çünkü sabit navbarlar için css'de ek sınıflara ve can sıkıcı dolgu matematiğine ihtiyaç duymaz
KSPR

Ancak bu, url'deki bağlantı etiketini yeniden yazmaz. history.pushState({}, "", this.href);URL'yi güncel tutmak için ekleyin
KSPR

3

Tüm gömülü bağlantı bağlantılarını hemen atlama yerine kaydırmak için jQuery ile yaklaşımım

Santi Nunez'in cevabına gerçekten benziyor ama daha güvenilir .

Destek

  • Çok çerçeveli ortam.
  • Sayfa yüklemeyi bitirmeden önce.
<a href="#myid">Go to</a>
<div id="myid"></div>
// Slow scroll with anchors
(function($){
    $(document).on('click', 'a[href^=#]', function(e){
        e.preventDefault();
        var id = $(this).attr('href');
        $('html,body').animate({scrollTop: $(id).offset().top}, 500);
    });
})(jQuery);


1

Sayfanın tamamını değil, bazı iç içe geçmiş içerikleri canlandırıyorsanız, offsetTop ve scrollTop değerlerini eklemek isteyebilirsiniz .

Örneğin :

var itemTop= $('.letter[name="'+id+'"]').offset().top;
var offsetTop = $someWrapper.offset().top;
var scrollTop = $someWrapper.scrollTop();
var y = scrollTop + letterTop - offsetTop

this.manage_list_wrap.animate({
  scrollTop: y
}, 1000);

0

SS Yavaş Kaydırma

Bu çözüm, bağlantı etiketleri gerektirmez, ancak elbette menü düğmesini (örneğin, rastgele özellik, 'ss') html'nizdeki hedef öğe kimliğiyle eşleştirmeniz gerekir.

ss="about" seni götürüyor id="about"

$('.menu-item').click(function() {
	var keyword = $(this).attr('ss');
	var scrollTo = $('#' + keyword);
	$('html, body').animate({
		scrollTop: scrollTo.offset().top
	}, 'slow');
});
.menu-wrapper {
  display: flex;
  margin-bottom: 500px;
}
.menu-item {
  display: flex;
  justify-content: center;
  flex: 1;
  font-size: 20px;
  line-height: 30px;
  color: hsla(0, 0%, 80%, 1);
  background-color: hsla(0, 0%, 20%, 1);
  cursor: pointer;
}
.menu-item:hover {
  background-color: hsla(0, 40%, 40%, 1);
}

.content-block-header {
  display: flex;
  justify-content: center;
  font-size: 20px;
  line-height: 30px;
  color: hsla(0, 0%, 90%, 1);
  background-color: hsla(0, 50%, 50%, 1);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="menu-wrapper">
  <div class="menu-item" ss="about">About Us</div>
  <div class="menu-item" ss="services">Services</div>
  <div class="menu-item" ss="contact">Contact</div>
</div>

<div class="content-block-header" id="about">About Us</div>
<div class="content-block">
  Lorem ipsum dolor sit we gonna chung, crazy adipiscing phat. Nullizzle sapizzle velizzle, shut the shizzle up volutpizzle, suscipizzle quizzle, away vizzle, arcu. Pellentesque my shizz sure. Sed erizzle. I'm in the shizzle izzle funky fresh dapibus turpis tempus shizzlin dizzle. Maurizzle my shizz nibh izzle turpizzle. Gangsta izzle fo shizzle mah nizzle fo rizzle, mah home g-dizzle. I'm in the shizzle eleifend rhoncizzle fo shizzle my nizzle. In rizzle habitasse crazy dictumst. Yo dapibus. Curabitizzle tellizzle urna, pretizzle break it down, mattis izzle, eleifend rizzle, nunc. My shizz suscipit. Integer check it out funky fresh sizzle pizzle.

That's the shizzle et dizzle quis nisi sheezy mollis. Suspendisse bizzle. Morbi odio. Vivamizzle boofron. Crizzle orci. Cras mauris its fo rizzle, interdizzle a, we gonna chung amizzle, break it down izzle, pizzle. Pellentesque rizzle. Vestibulum its fo rizzle mi, volutpat uhuh ... yih!, ass funky fresh, adipiscing semper, fo shizzle. Crizzle izzle ipsum. We gonna chung mammasay mammasa mamma oo sa stuff brizzle yo. Cras ass justo nizzle purizzle sodales break it down. Check it out venenatizzle justo yo shut the shizzle up. Nunc crackalackin. Suspendisse bow wow wow placerizzle sure. Fizzle eu ante. Nunc that's the shizzle, leo eu gangster hendrerizzle, gangsta felis elementum pizzle, sizzle aliquizzle crunk bizzle luctus pede. Nam a nisl. Fo shizzle da bomb taciti gangster stuff i'm in the shizzle i'm in the shizzle per conubia you son of a bizzle, per inceptos its fo rizzle. Check it out break it down, neque izzle cool nonummy, tellivizzle orci viverra leo, bizzle semper risizzle arcu fo shizzle mah nizzle.
</div>
<div class="content-block-header" id="services">Services</div>
<div class="content-block">
Lorem ipsum dolor sit we gonna chung, crazy adipiscing phat. Nullizzle sapizzle velizzle, shut the shizzle up volutpizzle, suscipizzle quizzle, away vizzle, arcu. Pellentesque my shizz sure. Sed erizzle. I'm in the shizzle izzle funky fresh dapibus turpis tempus shizzlin dizzle. Maurizzle my shizz nibh izzle turpizzle. Gangsta izzle fo shizzle mah nizzle fo rizzle, mah home g-dizzle. I'm in the shizzle eleifend rhoncizzle fo shizzle my nizzle. In rizzle habitasse crazy dictumst. Yo dapibus. Curabitizzle tellizzle urna, pretizzle break it down, mattis izzle, eleifend rizzle, nunc. My shizz suscipit. Integer check it out funky fresh sizzle pizzle.

That's the shizzle et dizzle quis nisi sheezy mollis. Suspendisse bizzle. Morbi odio. Vivamizzle boofron. Crizzle orci. Cras mauris its fo rizzle, interdizzle a, we gonna chung amizzle, break it down izzle, pizzle. Pellentesque rizzle. Vestibulum its fo rizzle mi, volutpat uhuh ... yih!, ass funky fresh, adipiscing semper, fo shizzle. Crizzle izzle ipsum. We gonna chung mammasay mammasa mamma oo sa stuff brizzle yo. Cras ass justo nizzle purizzle sodales break it down. Check it out venenatizzle justo yo shut the shizzle up. Nunc crackalackin. Suspendisse bow wow wow placerizzle sure. Fizzle eu ante. Nunc that's the shizzle, leo eu gangster hendrerizzle, gangsta felis elementum pizzle, sizzle aliquizzle crunk bizzle luctus pede. Nam a nisl. Fo shizzle da bomb taciti gangster stuff i'm in the shizzle i'm in the shizzle per conubia you son of a bizzle, per inceptos its fo rizzle. Check it out break it down, neque izzle cool nonummy, tellivizzle orci viverra leo, bizzle semper risizzle arcu fo shizzle mah nizzle.
</div>
<div class="content-block-header" id="contact">Contact</div>
<div class="content-block">
  Lorem ipsum dolor sit we gonna chung, crazy adipiscing phat. Nullizzle sapizzle velizzle, shut the shizzle up volutpizzle, suscipizzle quizzle, away vizzle, arcu. Pellentesque my shizz sure. Sed erizzle. I'm in the shizzle izzle funky fresh dapibus turpis tempus shizzlin dizzle. Maurizzle my shizz nibh izzle turpizzle. Gangsta izzle fo shizzle mah nizzle fo rizzle, mah home g-dizzle. I'm in the shizzle eleifend rhoncizzle fo shizzle my nizzle. In rizzle habitasse crazy dictumst. Yo dapibus. Curabitizzle tellizzle urna, pretizzle break it down, mattis izzle, eleifend rizzle, nunc. My shizz suscipit. Integer check it out funky fresh sizzle pizzle.

That's the shizzle et dizzle quis nisi sheezy mollis. Suspendisse bizzle. Morbi odio. Vivamizzle boofron. Crizzle orci. Cras mauris its fo rizzle, interdizzle a, we gonna chung amizzle, break it down izzle, pizzle. Pellentesque rizzle. Vestibulum its fo rizzle mi, volutpat uhuh ... yih!, ass funky fresh, adipiscing semper, fo shizzle. Crizzle izzle ipsum. We gonna chung mammasay mammasa mamma oo sa stuff brizzle yo. Cras ass justo nizzle purizzle sodales break it down. Check it out venenatizzle justo yo shut the shizzle up. Nunc crackalackin. Suspendisse bow wow wow placerizzle sure. Fizzle eu ante. Nunc that's the shizzle, leo eu gangster hendrerizzle, gangsta felis elementum pizzle, sizzle aliquizzle crunk bizzle luctus pede. Nam a nisl. Fo shizzle da bomb taciti gangster stuff i'm in the shizzle i'm in the shizzle per conubia you son of a bizzle, per inceptos its fo rizzle. Check it out break it down, neque izzle cool nonummy, tellivizzle orci viverra leo, bizzle semper risizzle arcu fo shizzle mah nizzle.
</div>

Vaktini boşa harcamak

https://jsfiddle.net/Hastig/stcstmph/4/


0

İşte benim için işe yarayan çözüm. Bu, aadlandırılmış bir etikete gönderme yapan tüm etiketler için çalışan genel bir işlevdira

$("a[href^=#]").on('click', function(event) { 
    event.preventDefault(); 
    var name = $(this).attr('href'); 
    var target = $('a[name="' + name.substring(1) + '"]'); 
    $('html,body').animate({ scrollTop: $(target).offset().top }, 'slow'); 
});

Not 1: HTML'nizde çift tırnak kullandığınızdan emin olun ". Tek tırnak işareti kullanıyorsanız, kodun yukarıdaki kısmını şu şekilde değiştirin:var target = $("a[name='" + name.substring(1) + "']");

Not 2: Bazı durumlarda, özellikle önyükleme çubuğundan yapışkan çubuğu kullandığınızda, adlandırılanlar agezinme çubuğunun altında gizlenir. Bu gibi durumlarda (veya benzer bir durumda), en uygun konumu elde etmek için kaydırmanızdaki piksel sayısını azaltabilirsiniz. Örneğin: $('html,body').animate({ scrollTop: $(target).offset().top - 15 }, 'slow');sizi target, üstünde 15 piksel bırakarak götürecektir .


0

Her kod satırını açıklayan https://css-tricks.com/snippets/jquery/smooth-scrolling/ adresindeki bu örneğe rastladım . Bunu en iyi seçenek olarak buldum.

https://css-tricks.com/snippets/jquery/smooth-scrolling/

Yerel olarak gidebilirsiniz:

window.scroll({
  top: 2500, 
  left: 0, 
  behavior: 'smooth' 
});

window.scrollBy({ 
  top: 100, // could be negative value
  left: 0, 
  behavior: 'smooth' 
});

document.querySelector('.hello').scrollIntoView({ 
  behavior: 'smooth' 
});

veya jquery ile:

$('a[href*="#"]').not('[href="#"]').not('[href="#0"]').click(function(event) {

    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) {
        event.preventDefault();
        $('html, body').animate({
          scrollTop: target.offset().top
        }, 1000);
      }
    }
  });

0

Tamam en basit yöntem: -

Tıklama işlevi (Jquery) içinde: -

$('html,body').animate({scrollTop: $("#resultsdiv").offset().top},'slow');

HTML

<div id="resultsdiv">Where I want to scroll to</div>

-1
$(function() {
    $('a#top').click(function() {
        $('html,body').animate({'scrollTop' : 0},1000);
    });
});

Burada test edin:

http://jsbin.com/ucati4


3
Lütfen imzaları, özellikle bağlantıları olanları ... ve özellikle ilgisiz bağlantıları içermeyin . Bu tür şeyleri profilinize koyabilirsiniz.
Andrew Barber

Sorulan soru, sayfanın üst kısmına nasıl kaydırılacağı değil, kimliğine sahip bir çapaya nasıl kaydırılacağıydı
user1380540

Siteme ekliyorum ama gerçekten işe yaramıyor. İşte bağlantı: scentology.burnnotice.co.za
kullanıcı ajanı

-1

Aşağıdaki çözüm benim için çalıştı:

$("a[href^=#]").click(function(e)
        {
            e.preventDefault();
            var aid = $(this).attr('href');
            console.log(aid);
            aid = aid.replace("#", "");
            var aTag = $("a[name='"+ aid +"']");
            if(aTag == null || aTag.offset() == null)
                aTag = $("a[id='"+ aid +"']");

            $('html,body').animate({scrollTop: aTag.offset().top}, 1000);
        }
    );
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.