ScrollTo fungsi dalam AngularJS
I'm mencoba untuk mendapatkan nav cepat untuk bekerja dengan benar. It's mengambang di samping. Ketika mereka mengklik sebuah link, yang dibutuhkan mereka untuk bahwa ID pada halaman. I'm berikut ini panduan dari Treehouse. Ini adalah apa yang saya miliki untuk scrolling:
$("#quickNav a").click(function(){
var quickNavId = $(this).attr("href");
$("html, body").animate({scrollTop: $(location).offset().top}, "slow");
return false;
});
Awalnya saya ditempatkan sebelum </body>
. Tapi saya tampaknya berjalan dalam kondisi balapan mana yang menembak sebelum quickNav disusun (memiliki ng-menyembunyikan
ditempatkan di atasnya, tidak yakin jika itu's yang menyebabkan hal itu - tetapi dalam DOM).
Jika saya menjalankan blok kode dalam console, kemudian bergulir bekerja seperti yang diharapkan.
Saya pikir itu'a akan lebih efektif untuk pindah ke controller - atau lebih mungkin hanya direktif. Tapi aku'm tidak memiliki keberuntungan untuk mencapai itu. Bagaimana saya bisa mendapatkan ini blok kode untuk bekerja dengan AngularJS?
Berikut ini adalah sederhana direktif yang akan gulir ke elemen di klik:
Demo: http://plnkr.co/edit/yz1EHB8ad3C59N6PzdCD?p=preview
Untuk membantu menciptakan arahan, check out video di http://egghead.io mulai di #10 "pertama direktif".
edit: membuat scroll untuk elemen tertentu yang ditentukan oleh href, hanya memeriksa
attrs.href
.Maka anda bisa gunakan seperti ini:
<div scroll-di-klik></div>
untuk menggulir ke elemen diklik. Atau<a scroll-di-klik href="#elemen-id"></div>
untuk gulir ke elemen dengan id.Ini adalah baik direktif dalam kasus anda ingin menggunakannya:
anda dapat menggulir untuk setiap elemen dalam halaman:
Penggunaan (misalnya klik pada div 'kembali-ke-atas' akan gulir ke id-scroll atas):
It's juga didukung oleh chrome,firefox,safari dan IE penyebab html,elemen body .
Dalam rangka untuk menghidupkan ke elemen tertentu di dalam sebuah gulungan wadah (tetap DIV)
Sudut solusi menggunakan $anchorScroll http://www.benlesh.com/2013/02/angular-js-scrolling-to-element-by-id.html:
Dan di sini adalah memetik: http://plnkr.co/edit/xi2r8wP6ZhQpmJrBj1jM?p=preview
Dan jika anda peduli untuk pure javascript solusi, berikut adalah salah satu:
Memohon runScroll dalam kode anda dengan orang tua container id dan target gulir id:
Referensi: https://stackoverflow.com/questions/8917921/cross-browser-javascript-not-jquery-scroll-to-top-animation
Aku digunakan andrew joslin's jawaban, yang karya-karya besar, tetapi dipicu sudut perubahan rute, yang dibuat gelisah mencari gulir untuk saya. Jika anda ingin menghindari memicu perubahan rute,
Terima kasih Andy misalnya, ini sangat membantu. Akhirnya saya menerapkan strategi yang sedikit berbeda sejak saya mengembangkan sebuah single-scroll halaman dan tidak ingin Sudut untuk menyegarkan ketika menggunakan hashbang URL. Saya juga ingin melestarikan kembali/maju tindakan dari browser.
Alih-alih menggunakan direktif dan hash, saya menggunakan $scope.$menonton di $lokasi.pencarian, dan memperoleh target dari sana. Ini memberikan yang bagus, bersih anchor tag
<a ng-href="#/?gulir=myElement">Saya elemen</a>
Aku dirantai jam kode modul saya deklarasi di app.js seperti:
Peringatan dengan kode di atas adalah bahwa jika anda mengakses dengan URL langsung dari rute yang berbeda, DOM tidak dapat dimuat dalam waktu untuk jQuery's $target.offset() call. Solusinya adalah dengan sarang kode ini hanya $viewContentLoaded watcher. Kode akhir terlihat seperti ini:
Diuji dengan Chrome dan FF
Apa tentang sudut-scroll, it's aktif dipelihara dan tidak ada ketergantungan dengan jQuery..
Saran lain. Salah satu direktif dengan pemilih.
HTML:
Sudut:
Perhatikan juga $anchorScroll
jawaban yang sangat jelas, hanya menggunakan ANGULARJS, tidak ada JQUERY tergantung
dalam html anda di suatu tempat di bawah
<kembali-top>beberapa teks</kembali-top>
dalam html anda di suatu tempat di atas
<div id="atas"></div>
di js: