2016-03-18 10 views
0

私は、見出しをつけてクイズのWeb apを書いています。各質問のdivとdivはすべて兄弟ですから、私が使用している関数にcurrent.nextSiblingとcurrent.previousSiblingを渡してページをたどります。jQuery scrollTop problems

今、私は 'animate'と 'scrollTop'メソッドを使ってjQueryで滑らかなスクロールを作成しようとしていますが、動作しません。誰にもこれに関する考えはありますか?ここで添付のコード、ここでいじるするためのリンク: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

私はそれが動作しないと言います私は私のダウンボタン、クラス "ダウンボタン"をクリックして、他のボタンと同じ ".upButton"と同じものは何も起こらないことを意味 –

+2

実際のコードではなく、 。これにより、誰にとっても読みやすくなります。 –

+0

またはそれ以上に、jsfiddleを提供してください! – Connum

答えて

1

あなたは、通常のHTML DOM要素にjQueryの.offset()を使用しようとしてきました。 フィドルのこの更新されたバージョンを参照してください:私は何 https://jsfiddle.net/fjydnc9m/12/

はjQueryを介して、前と次の兄弟を取得し、その上.offset()を使用することです。

currentが最初または最後のラッパーであるか、または奇妙なスクロールが行われるケースについても考慮する必要があります。これを行うには、スクロールする前にprevSiblingまたはnextSiblingの長さが> 0であるかどうかをチェックします。

+0

魔法のように。だからあなたは本当に素早くそれが私が間違っていたことを説明することができますか、あなたはここで正しく概念的にしましたか?具体的には、jQueryを使用する上での制限は何ですか?私は、jQueryセレクタを使って変数に代入し、その変数をjQuery関数で使用していることがわかりました。これは、通常のDOM要素でjQueryを使用する標準的な方法ですか? –

+0

通常のDOM要素でjQuery関数を使用することはできません。最初に '$(element) 'でそれらをラップする必要があります。 これを変数に保存して再利用することは、パフォーマンスを向上させるための単なる方法です。 jQueryを使って行うすべての作業は、わずかなオーバーヘッドを追加します。基本的な操作ではミリ秒単位で話していますが、追加しています。ですから、変数に何度も必要なものを変数に保存することは、常に良い考えです。 – Connum

+0

完璧で、知っておいてよかったです。ヘルプマンのおかげで –

0

current変数を記録すると、current変数に割り当てられた#text兄弟があることがわかります。このフィドル

チェックアウト:

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

あなたは、私が scrollTop機能でそれを使用して current変数 二回先行が割り当てられていることがわかります

:私は「

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); 

注意m現在の変数を記録します。 current割り当ての1つを削除して、ログが何を表示しているのかを確認します(何が起こっているかがわかります)。