2016-10-31 83 views
7

Küçük bir Vue webapp oluşturuyorum, bunun için bir bağlantı etiketi oluşturmak istiyorum.Vue Router ile bağlantı etiketleri oluşturma

<div id="for-home"> 
    .... 
</div> 

Ve işte benim yönlendirici yapılandırması:

export default new Router({ 
    abstract: true, 
    mode: 'history', 
    scrollBehavior:() => ({ y: 0 }), 
    routes: [ 
    { path: '/', component: abcView} 
    ] 
}) 

Ama bu çapa etiketleri ile

ben böyle çapa etiketleri olmasını istedik div birine bir id verdik Bazen çalışıyor ve bazen çalışmıyor, Bu konuda bir şey mi özledim?

cevap

17

Ben Sayfa içinde #section-3 gibi bir bağlantı etiketi giderek, sayfanın belirli bir bölgeye doğrudan atlama hakkında soru soruyor inanıyoruz. Bu işlemin gerçekleşmesi için

, aşağıda anlatıldığı şekilde scrollBehavior işlevini değiştirmek gerekir:

new VueRouter({ 
    mode: 'history', 
    scrollBehavior: function(to, from, savedPosition) { 
     if (to.hash) { 
      return {selector: to.hash} 
     } else { 
      return { x: 0, y: 0 } 
     } 
    }, 
    routes: [ 
     {path: '/', component: abcView}, 
     // your routes 
    ] 
}); 

Ref: http://router.vuejs.org/en/advanced/scroll-behavior.html

Bir jsFiddle örneğini oluşturarak teşebbüs ama bunun nedeni mode:'history' ait çalışmıyor. Eğer kodu kopyalayıp ve yerel olarak çalıştırırsanız, nasıl çalıştığını göreceksiniz: https://jsfiddle.net/mani04/gucLhzaL/ scrollBehavior içinde {selector: to.hash} geri göndererek

, sen id kullanılarak işaretlenmiş ilgili bölümde (nereye taşınacak sonraki rota, hiç bağlantı etiketi karma geçecek) bu rotada.

+0

Bu, yalnızca geçmiş modunda çalışır mı? Çalışmaya başlayamıyorum ama tarih modunda değilim – retrograde

+0

Evet, [scroll-behavior] (https://router.vuejs.org/en/advanced/scroll-behavior.html) sayfası açıkça belirtiyor bu. Bunun nedeni, zaten yönlendirici durumuna bağlı karma tanımlayıcınız olmasıdır. Sayfa konumunu tanımlamak için ikinci bir karmaşaya sahip olmak (bağlantıya kaydırmak) mümkün değildir. Diğer bir seçenek ise rotada '' sorgu' parametresini geçmek ve ardından hedef sayfadaki doğru yere ilerlemek için düz eski javascript kullanmaktır. Göstereceğim çalışan bir örneğim yok, ama biraz zaman harcayabileceğimize inanıyorum. – Mani

+1

Oh, açıkça belirtiyor. Yemin ederim, cesur notalar için kör bir noktam var. Teşekkürler – retrograde

2

Bu soruna daha yeni geldim ve sayfa takasını optimize etmek için az yer olduğunu düşündüm. Benim durumumda "atlama çevresi" yerine yumuşak bir geçiş yapmak istiyorum. JQuery'de $ için takma ad istedim.

Pürüzsüz animasyon için Yönlendirici Kurulumu İşte, ihtiyaçlarınıza göre hatları değiştirmek için çekinmeyin. Bu kod daha temiz hale getirilmiş olabilir, ancak size çalışma fikrini gösterecek kadar iyi olmalıdır.

// Register Router and Paths 
const router = new VueRouter({ 
    mode: 'history', 
    routes : [ 
     { path: '/aboutme/', component: index, name:'me.index'}, 
     { path: '/aboutme/cv', component: cv, name:'me.cv' } 
    ], 

    // Build smooth transition logic with $ 
    scrollBehavior (to, from, savedPosition) { 
     if (to.hash) { 
      return $('html,body').stop().animate({scrollTop: $(to.hash).offset().top }, 1000); 
     } else { 
      return $('html,body').stop().animate({scrollTop: 0 }, 500); 
     } 
    } 
}) 

Tarafımın Yan Soruları: Bir şeyleri geri vermek zorunda mıyız? JQuery Animation sayfa kaydırma işlemini sürdürdüğünden dolayı herhangi bir sorunum yok ya da dönmeden.

saygıları Gkiokan

İlgili konular