2016-03-18 28 views
0

Açılış başlığı ve ardından onu takip eden 10 soru içeren bir sınav web ap. Açılışın div'u ve her bir soruya ait div tüm kardeşler, bu yüzden kullandığım tüm fonksiyonlara current.nextSibling ve current.previousSibling'i geçerek sayfayı geçiyorum.jQuery scrollTop sorunları

Şu anda 'animate' ve 'scrollTop' yöntemleri ile jQuery ile düzgün bir kaydırma oluşturmaya çalışıyorum, ancak çalışmıyor. Bunun hakkında herhangi bir fikri var mı? Burada ekli Kod, bağlantı burada keman: Sen normal bir HTML DOM öğesindeki jQuery .offset() kullanmaya çalışıyorum https://jsfiddle.net/fjydnc9m/1/

var main = function() { 
    var root = $('html, body'); 
    var current = document.getElementById("opening"); 


    $('.upButton').click(function() { 
     $('html, body').animate({ scrollTop:$(current.previousSibling).offset().top}, 2000); 
     current = current.previousSibling; 
    }); 


    $('.downButton').click(function() { 
     $('html, body').animate({ scrollTop: $(current.nextSibling).offset().top}, 2000); 
     current = current.nextSibling; 
    }); 



} 

$(document).ready(main); 
+0

Çalışmıyor dediğimde, ".downButton" sınıfıyla aşağı düğmem tıklandığında ve ".upButton" olarak sınıflandırılan diğer düğmeyle aynı olan hiçbir şey olmuyor demektir. –

+2

Lütfen gerçek kodu koyun ve resmi değil . Bu herkes için daha iyi okunabilirlik sağlayacaktır. –

+0

veya daha da iyisi, lütfen bir jsfiddle verin! – Connum

cevap

1

. keman bu güncellenmiş sürümünü bakınız: Yaptıklarımı https://jsfiddle.net/fjydnc9m/12/

jQuery ile prev ve sonraki kardeş almak ve bu konuda .offset() kullanmaktır.

Ayrıca, current'un ilk veya son sarıcı olduğu durumları da hesaba katacağınızı veya bazı tuhaf kaydırma işlemlerinin gerçekleşeceğini unutmayın. Kaydırma işleminden önce prevSibling veya nextSibling uzunluğunun> 0 olup olmadığını kontrol ederek bunu yapabilirsiniz.

+0

Oh Bir çekicilik gibi. Bu yüzden, yanlış yaptığım şeyi yanlış anlatabilir misin/kavramsal olarak burada doğru bir şekilde yaptın? daha spesifik olarak, jQuery'yi kullanabileceğim kısıtlamalar nelerdir? Görebildiğim kadarıyla bir jQuery selektörü kullandık, bir değişkene atadı ve jQuery işlevlerinde bu değişkeni kullandı. JQuery'yi normal DOM öğelerinde kullanmanın standart yolu bu mu? –

+0

jQuery işlevlerini normal DOM öğelerinde kullanamazsınız, bunları önce "$ (element)" ile sarmanız gerekir. Bir değişkene kaydetme ve yeniden kullanma, yalnızca performansı iyileştirmenin bir yoludur. JQuery ile yaptığınız her şey biraz ek yük getiriyor - temel işlemler için milisaniyeler konuşuyoruz, ancak ekliyor. Yani, ihtiyacınız olan her şeyi bir değişkene bir kereden fazla kaydetmek her zaman iyi bir fikirdir. – Connum

+0

mükemmel, bilmek harika. Yardımın için teşekkürler dostum –

0

current değişkenini günlüğe kaydederseniz, current değişkenine atanan bir #text kardeş olduğunu öğrenirsiniz. Bu keman

atın:

https://jsfiddle.net/fjydnc9m/13/

Sen scrollTop işlevinde bunu kullanmaya current değişken iki kez ÖNCE atanan görebilirsiniz

: Ben

var main = function() { 
var root = $('html, body'); 
var current = document.getElementById("opening"); 


$('.upButton').click(function() { 
    current = current.previousSibling; 
    current = current.previousSibling; 
    $('html, body').animate({ 
    scrollTop: $(current).offset().top 
    }, 2000); 
    console.log(current); 
}); 


$('.downButton').click(function() { 
    current = current.nextSibling; 
    current = current.nextSibling; 
    $('html, body').animate({ 
    scrollTop: $(current).offset().top 
    }, 2000); 
    console.log(current); 
    }); 
} 

$(document).ready(main); 

Not Geçerli değişkeni kaydetme. current atamalarından birini kaldırın ve günlüğün ne yaptığını görün (neler olup bittiğini göreceksiniz).