Jquery kullanarak sayfadaki belirli bir konuma nasıl gidebilirim?


133

JQuery kullanarak sayfada belirli bir konuma gitmek mümkün müdür?

Kaydırmak istediğim konum şunlara sahip olmak zorunda mı?

<a name="#123">here</a>

Veya belirli bir DOM kimliğine taşınabilir mi?


3
sadece küçük bir not: XHTML 1.1
Katı'nda

ilginç soru, kaydırmak için sayfa koordinatlarını kullanamıyor musunuz? Bence yapabilmeliyiz.
Omar Abid

[Burada] [1] [1] adresinde ihtiyacınıza benzer bir çözüm buldum: stackoverflow.com/questions/3432656/…
user1493023

@mrblah sorununuz çözüldü mü?
Meghdad Hadidi

Yanıtlar:


242

jQuery Scroll Eklentisi

Bu jquery ile etiketlenmiş bir soru olduğu için, bu kitaplığın sorunsuz kaydırma için çok güzel bir eklenti olduğunu söylemeliyim, burada bulabilirsiniz: http://plugins.jquery.com/scrollTo/

Dokümantasyondan Alıntılar:

$('div.pane').scrollTo(...);//all divs w/class pane

veya

$.scrollTo(...);//the plugin will take care of this

Kaydırma için özel jQuery işlevi

özel kaydırma jquery işlevinizi tanımlayarak çok hafif bir yaklaşım kullanabilirsiniz

$.fn.scrollView = function () {
    return this.each(function () {
        $('html, body').animate({
            scrollTop: $(this).offset().top
        }, 1000);
    });
}

ve şu şekilde kullanın:

$('#your-div').scrollView();

Bir sayfanın koordinatlarına gidin

Animasyon htmlve bodybirlikte elemanları scrollTopveya scrollLeftnitelikleri

$('html, body').animate({
    scrollTop: 0,
    scrollLeft: 300
}, 1000);

Düz javascript

ile kaydırma window.scroll

window.scroll(horizontalOffset, verticalOffset);

sadece özetlemek gerekirse, ID ile öğeye atlamak için window.location.hash kullanın

window.location.hash = '#your-page-element';

Doğrudan HTML'de (erişilebilirlik geliştirmeleri)

<a href="#your-page-element">Jump to ID</a>

<div id="your-page-element">
    will jump here
</div>

Teşekkürler @ Juraj Blahunka, ama bunu herhangi bir eklenti olmadan yapıyorum
Meghdad Hadidi

Bağlantı beni ScrollTo'ya götürmüyor . Lütfen günceller misiniz?
Barna Tekse

Cevap bu olmalı!
neelmeg

128

Evet, düz JavaScript'te bile oldukça kolaydır. Bir öğeye bir kimlik verirsiniz ve ardından bunu bir "yer imi" olarak kullanabilirsiniz:

<div id="here">here</div>

Bir kullanıcı bir bağlantıyı tıkladığında oraya kaymasını istiyorsanız, denenmiş ve onaylanmış yöntemi kullanabilirsiniz:

<a href="#here">scroll to over there</a>

Programlı olarak yapmak için şunu kullanın: scrollIntoView()

document.getElementById("here").scrollIntoView()

@nickf Bu henüz her yerde desteklenmemektedir. caniuse.com/#search=scrollIntoView
Aditya Singh

Bu i def desteklenir ( developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView ). Caniuse'u düzgün okumadığını sanıyorsun. Ancak canlandırılmayacaktır. Aksine, her zaman harika olmayan oldukça ani bir sıçrama.
Perry

53

Herhangi bir eklenti kullanmanıza gerek yoktur, bunu şu şekilde yapabilirsiniz:

var divPosition = $('#divId').offset();

daha sonra belgeyi belirli DOM'a kaydırmak için bunu kullanın:

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

3
+1 Bu muhtemelen en iyi cevaptır. Fazla kod yok ve eklenti gerektirmiyor.
Tricky12

1
Pencere yeniden boyutlandırıldığında ofseti yeniden hesaplamanız gerekebileceğini unutmayın.
Bart Burg

2
@BartBurg iyi bir nokta - ya da sadece .animatearama gerçekleşmeden hemen önce yeniden hesaplayın
mikermcneil

5
Basit cevabı seviyorum. İnsanlar neden işleri bu kadar karmaşık hale getirmek zorunda? Başka bir eklenti istemiyorum.
sterfry68

1
Gerçekten de en iyi cevap.
Robert Ross

21

İşte saf bir javascript sürümü:

location.hash = '#123';

Otomatik olarak kayacaktır. "#" Ön ekini eklemeyi unutmayın.


1
Adlandırılmış çapanın ilkel yolunu kullanarak, karma içeren URL'niz olabilir. Örneğin, mywebsite.com/page-about/#123 Yer imi, karma + kaydırma görüntüleme davranışını da içerir.
okw

1
Biraz açıklayabilirseniz harika olur
JGallardo


5
<div id="idVal">
    <!--div content goes here-->
</div>
...
<script type="text/javascript">
     $(document).ready(function(){
         var divLoc = $('#idVal').offset();
         $('html, body').animate({scrollTop: divLoc.top}, "slow");
     });
</script>

Bu örnek, belirli bir div kimliğini, yani bu durumda 'idVal'i bulmayı gösterir. Ajax aracılığıyla bu sayfada açılacak olan sonraki bölümleriniz / tablolarınız varsa, benzersiz div'ler atayabilir ve her div içeriği için belirli bir konuma kaydırmak için komut dosyasını çağırabilirsiniz.

Umarım bu yararlı olur.


4
<script type="text/javascript">
    $(document).ready(function(){
        $(".scroll-element").click(function(){
            $('html,body').animate({
                scrollTop: $('.our_companies').offset().top
            }, 1000);

            return false;
        });
    })
</script>


Kodunuza bazı yorumlar eklerseniz harika olur. Soruyu soranın sorusunu çözmesine nasıl yardımcı olur?
Artemix

1

Bunu dene

<div id="divRegister"></div>

$(document).ready(function() {
location.hash = "divRegister";
});

0

İşte @ juraj-blahunka'nın hafif yaklaşımının bir çeşidi . Bu işlev, kabın belge olduğunu varsaymaz ve yalnızca öğe görünüm dışındaysa kaydırır. Gereksiz sekmeyi önlemek için animasyon kuyruğu da devre dışı bırakılır.

$.fn.scrollToView = function () {
    return $.each(this, function () {
        if ($(this).position().top < 0 ||
            $(this).position().top + $(this).height() > $(this).parent().height()) {
            $(this).parent().animate({
                scrollTop: $(this).parent().scrollTop() + $(this).position().top
            }, {
                duration: 300,
                queue: false
            });
        }
    });
};

Geri dönme sorununu yaşadım, ancak yönteminiz işe yaramıyor
Anon

0

Jquery.easing.min.js'yi kullanma, Sabit IE konsolu Hataları ile

Html

<a class="page-scroll" href="#features">Features</a>
<section id="features" class="features-section">Features Section</section>


        <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
        <script src="js/jquery.js"></script>
        <!-- Include all compiled plugins (below), or include individual files as needed -->
        <script src="js/bootstrap.min.js"></script>

        <!-- Scrolling Nav JavaScript -->
        <script src="js/jquery.easing.min.js"></script>

jQuery

//jQuery to collapse the navbar on scroll, you can use this code with in external file with name scrolling-nav.js
        $(window).scroll(function () {
            if ($(".navbar").offset().top > 50) {
                $(".navbar-fixed-top").addClass("top-nav-collapse");
            } else {
                $(".navbar-fixed-top").removeClass("top-nav-collapse");
            }
        });
        //jQuery for page scrolling feature - requires jQuery Easing plugin
        $(function () {
            $('a.page-scroll').bind('click', function (event) {
                var anchor = $(this);
                if ($(anchor).length > 0) {
                    var href = $(anchor).attr('href');
                    if ($(href.substring(href.indexOf('#'))).length > 0) {
                        $('html, body').stop().animate({
                            scrollTop: $(href.substring(href.indexOf('#'))).offset().top
                        }, 1500, 'easeInOutExpo');
                    }
                    else {
                        window.location = href;
                    }
                }
                event.preventDefault();
            });
        });

Bu, böylesine basit bir görev için çok fazla koddur. location.hash = 'idOfElement';yeterli olmalı
Kolob Kanyonu

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.