Gulir halus ke id id jQuery

248

Saya sudah mencoba untuk mendapatkan scroll ke kode div jquery agar berfungsi dengan benar. Berdasarkan pertanyaan stack overflow saya mencoba yang berikut ini

DEMO http://jsfiddle.net/kevinPHPkevin/8tLdq/

$('#myButton').click(function() {
   $.scrollTo($('#myDiv'), 1000);
});

Tapi itu tidak berhasil. Itu hanya terkunci ke div. Saya juga mencoba

$('#myButton').click(function(event) {
     event.preventDefault();
   $.scrollTo($('#myDiv'), 1000);
});

Tanpa kemajuan.

StevenPHP
sumber
1
Sudahkah Anda melihat ini? stackoverflow.com/questions/3432656/…
The Vanilla Thrilla
@TheVanillaThrilla yang saya lakukan tetapi tampaknya terlalu membengkak untuk penggunaan tautan tunggal
StevenPHP
1
@StevenPHP, saya telah mengganti kode JavaScript dalam contoh Anda sesuai dengan jawaban saya stackoverflow.com/a/26129950/947687 . Dan itu berfungsi jsfiddle.net/8tLdq/643 .
dizel3d
OP sudah tua tetapi saya akan membagikan pos ini untuk orang lain yang datang dari SE. Berikut adalah artikel yang berbagi fungsi sederhana memecahkan masalah: smartik.ws/2015/01/...
Andrew Surdu

Jawaban:

667

Anda perlu menghidupkannya html, body

DEMO http://jsfiddle.net/kevinPHPkevin/8tLdq/1/

$("#button").click(function() {
    $('html, body').animate({
        scrollTop: $("#myDiv").offset().top
    }, 2000);
});
Kevin Lynch
sumber
9
@ektor Saya punya satu masalah, setelah diklik saya harus bertarung dengan jquery untuk menggulir ke atas, ada solusi?
YesItsMe
@yesitsme ... naik atau turun dalam kasus saya
Gray Spectrum
@GraySpectrum, hanya setelah mengklik, terdengar seperti ada penundaan.
YesItsMe
1
Saya memiliki pertanyaan yang sama, bagaimana jika saya memiliki beberapa tombol yang perlu digulir ke lokasi yang berbeda, mencoba memodifikasi kode ini tetapi tidak berfungsi. Bisakah Anda memberikan contoh lain?
Dreadlord
Menemukan beberapa "perbaikan" untuk itu. Pengguliran elemen yang tepat sekarang telah diperbaiki, tetapi tetap saja naik dan turun dengan mengklik pada target "gulir-ke" yang sama: var target = $(this).data("target"); $(".basics-content").animate({scrollTop: $(target).offset().top}, 1000); });Penjelasan: .basics-contentadalah bagian dalam modal yang sebenarnya ingin saya gulir, dengan targetsaya memberikan nomor id dari elemen ...
Roland
111

Jika Anda ingin mengganti navigasi href-id standar pada halaman tanpa mengubah markup HTML untuk pengguliran yang lancar , gunakan ini ( contoh ):

// handle links with @href started with '#' only
$(document).on('click', 'a[href^="#"]', function(e) {
    // target element id
    var id = $(this).attr('href');

    // target element
    var $id = $(id);
    if ($id.length === 0) {
        return;
    }

    // prevent standard hash navigation (avoid blinking in IE)
    e.preventDefault();

    // top position relative to the document
    var pos = $id.offset().top;

    // animated top scrolling
    $('body, html').animate({scrollTop: pos});
});
dizel3d
sumber
3
Ini bekerja dengan baik, mungkin saya sarankan tweak yang sangat kecil var pos = $(id).offset().top;bisavar pos = $id.offset().top;
Davey
Sangat bagus. Jika Anda hanya ingin ini terjadi pada tautan tertentu (misalkan Anda memiliki beberapa untuk menampilkan atau menyembunyikan informasi), tambahkan saja nama kelas ke sana dan tempelkan nama kelas Anda (katakanlah scroller) di akhir deklarasi pertandingan (mis. [Href ^ = "#"]. scroller).
Prajurit
Bagaimana Anda melakukannya tanpa jQuery?
Vadorequest
21

di sini adalah 2 sen saya:

Javascript:

$('.scroll').click(function() {
    $('body').animate({
        scrollTop: eval($('#' + $(this).attr('target')).offset().top - 70)
    }, 1000);
});

Html:

<a class="scroll" target="contact">Contact</a>

dan targetnya:

<h2 id="contact">Contact</h2>
Alexandre Mélard
sumber
Ini hanya berfungsi jika Anda tidak mendeklarasikan doctype.
David Martins
6
Untuk apa digunakan di evalsini?
Pelihat
Saya pikir itu diperlukan $('html, body').animateuntuk Gulir
Irshad Khan
6

Inilah yang saya gunakan:

<!-- jquery smooth scroll to id's -->   
<script>
$(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
        }, 500);
        return false;
      }
    }
  });
});
</script>

Keindahan dari yang satu ini adalah Anda dapat menggunakan jumlah hash-link dan id yang sesuai tanpa harus mengeksekusi skrip baru untuk masing-masing.

Jika Anda menggunakan WordPress, masukkan kode ke footer.phpfile tema Anda tepat sebelum tag penutup </body>.

Jika Anda tidak memiliki akses ke file tema, Anda dapat menyematkan kode tepat di dalam editor posting / halaman (Anda harus mengedit posting dalam mode Teks) atau pada widget Teks yang akan memuat pada semua halaman.

Jika Anda menggunakan CMS lain atau hanya HTML, Anda dapat memasukkan kode di bagian yang dimuat di semua halaman tepat sebelum tag penutup tubuh </body>.

Jika Anda membutuhkan detail lebih lanjut tentang ini, lihat posting cepat saya di sini: jQuery smooth scroll to id

Semoga itu bisa membantu, dan beri tahu saya jika Anda memiliki pertanyaan tentangnya.

Bibiano Wenceslao
sumber
Mencintai betapa sederhananya dan vanila ini, sempurna.
DoPeT
5

satu contoh lagi:

Tautan HTML:

<a href="#featured" class="scrollTo">Learn More</a>

JS:

  $(".scrollTo").on('click', function(e) {
     e.preventDefault();
     var target = $(this).attr('href');
     $('html, body').animate({
       scrollTop: ($(target).offset().top)
     }, 2000);
  });

Jangkar HTML:

  <div id="featured">My content here</div>
Eugen
sumber
3

Anda yakin sedang memuat file Plugin jQuery scrollTo?

Anda mungkin mendapatkan objek: metode tidak ditemukan kesalahan "scrollTo" di konsol.

metode scrollTO bukan metode jquery asli. untuk menggunakannya Anda harus memasukkan file jquery scroll To plugin.

ref: http://flesler.blogspot.in/2009/05/jqueryscrollto-142-released.html http://flesler.blogspot.in/2007/10/jqueryscrollto.html

soln: tambahkan ini di bagian kepala.

<script src="\\path\to\the\jquery.scrollTo.js file"></script>
MortalViews
sumber
Ini seharusnya jawaban yang diterima. Kode dalam pertanyaan sudah benar, dan berfungsi dengan baik. Sepertinya plugin scrollTo tidak / tidak berfungsi. . . Dia tidak bertanya tentang berbagai cara untuk melakukan hal serupa.
Chris Kavanagh
3

Skrip ini merupakan penyempurnaan skrip dari Vector. Saya telah membuat sedikit perubahan untuk itu. Jadi skrip ini berfungsi untuk setiap tautan dengan gulir halaman kelas di dalamnya.

Pada awalnya tanpa pelonggaran:

$("a.page-scroll").click(function() {
    var targetDiv = $(this).attr('href');
    $('html, body').animate({
        scrollTop: $(targetDiv).offset().top
    }, 1000);
});

Untuk memudahkan Anda, Anda perlu Jquery UI:

<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>

Tambahkan ini ke skrip:

'easeOutExpo'

Terakhir

$("a.page-scroll").click(function() {
    var targetDiv = $(this).attr('href');
    $('html, body').animate({
        scrollTop: $(targetDiv).offset().top
    }, 1000, 'easeOutExpo');
});

Semua kenikmatan yang dapat Anda temukan di sini: Cheat Sheet .

Ramon Weijenbarg
sumber
3

Kode ini akan berguna untuk semua tautan internal di web

    $("[href^='#']").click(function() {
        id=$(this).attr("href")
        $('html, body').animate({
            scrollTop: $(id).offset().top
        }, 2000);
    });
iDanielBH
sumber
1

Anda dapat melakukannya dengan menggunakan kode jQuery sederhana berikut.

Tutorial, Demo, dan kode Sumber dapat ditemukan dari sini - Gulir halus ke div menggunakan jQuery

JavaScript:

$(function() {
    $('a[href*=#]:not([href=#])').click(function() {
        var target = $(this.hash);
        target = target.length ? target : $('[name=' + this.hash.substr(1) +']');
        if (target.length) {
            $('html,body').animate({
              scrollTop: target.offset().top
            }, 1000);
            return false;
        }
    });
});

HTML:

<a href="#section1">Go Section 1</a>
<div id="section1">
    <!-- Content goes here -->
</div>
JoyGuru
sumber
1

Di sini saya mencoba ini, itu sangat bagus untuk saya.

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

    $('html, body').animate({
        scrollTop: $($(this).attr('href')).offset().top
    }, 500, 'linear');
});

HTML:

 <a href="#fast-food" class="active" data-toggle="tab" >FAST FOOD</a>

<div id="fast-food">
<p> Scroll Here... </p>
  </div>
waqas noor
sumber
Apa perbedaan jawaban Anda?
yunandtidus
1

Ini dapat dilakukan dalam JS sederhana:

document
    .getElementById("range-calculator")
    .scrollIntoView({ behavior: "smooth" });

Dukungan browser adalah masalah kecil, tetapi browser modern mendukungnya .

Nitin Jadhav
sumber
0

Ini berhasil bagi saya.

<div id="demo">
        <h2>Demo</h2>
</div>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<script>
    $(document).ready(function () {
        // Handler for .ready() called.
        $('html, body').animate({
            scrollTop: $('#demo').offset().top
        }, 'slow');
    });
</script>

Terima kasih.

Y. Joy Ch. Singha
sumber
0

Berikut adalah solusi saya untuk memuluskan scroll ke div / anchor menggunakan jQuery jika Anda memiliki header yang tetap sehingga tidak menggulir di bawahnya. Juga berfungsi jika Anda menautkannya dari halaman lain.

Cukup ganti ".site-header" ke div yang berisi tajuk Anda.

$(function() {

$('a[href*="#"]:not([href="#"])').click(function() {
var headerheight = $(".site-header").outerHeight();
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 - headerheight)
    }, 1000);
    return false;
  }
}
});

//Executed on page load with URL containing an anchor tag.
if($(location.href.split("#")[1])) {
var headerheight = $(".site-header").outerHeight();
  var target = $('#'+location.href.split("#")[1]);
  if (target.length) {
    $('html,body').animate({
      scrollTop: target.offset().top - headerheight
    }, 1);
    return false;
  }
}
});
Mario
sumber