2011-12-16 4 views
1

私が設計した簡単なチャットインターフェイスのスクロールバーにjScrollPaneを使用します。ここで問題となるのは、jScrollPaneが自動的に下にスクロールしないということです。 jScrollPaneには、trueに設定した便利なオプション 'stickToBottom'があり、コンテンツが特定のdivに動的に追加されるため、 'autoReinitalise'をtrueに設定しました。チャットボックスがいっぱいになり、スクロールバーが追加されるとすぐに、jScrollPaneが自動的に下にスクロールしてそこにスクロールすることを期待しました。しかし、そうではありません。私はまず最初に手を下にスクロールしなければならず、それがそこにくっつくでしょう。だから私は最初のスクロールバーが表示されるように、それは親(それはスクロールバーを持つ)よりも高さ1ピクセル以上のinnerdivを作成しようとしました。 APIを介して、スクロールハンドルが完全に下がるようにY軸上を100%スクロールします。しかし、この場合でもチャットボックスがいっぱいになり、コンテンツが利用可能なスペースを超えてスクロールバーがボトムに張り付いていない場合でも、スクロールバーはほぼ一番上にスクロールします。私はこの問題を持っている非常に単純なtestpage設定したjScrollPaneが下に座っていません

http://www.webtrail.nl/jscrollpane-example

は、誰かがここで私を助けることができます願っています。ありがとう!それでもmaintainPosition機能が動作するようにしたいので、

+1

を、あなたのHTML + CSS +を貼り付けることができますjsをjsfiddleに入れますか? – alessioalex

+0

私は例のページへのリンクで自分の投稿を更新しました。 – Guido

+0

maintainPositionオプションを試しましたか? – shennyL

答えて

1

(あなたはmaintainPositionstickToBottomがデフォルトで有効になっているはずですが、内容は完全にスクロールのdivの高さを占有する時期トリッキーな部分は、一度だけscrollToBottom()を呼び出して、あなたがやるべきことユーザがトップにスクロールすると、新しいコンテンツが到着してもそこにとどまる)。

scrollToBottom()を複数回呼び出すと、毎回下にスクロールします(したがって、maintainPosition機能は削除されます)。

最初のコンテンツがページの高さよりも大きい場合は、ページロード時にscrollToBottomを呼び出すことができますが、そうでない場合は、コンテンツサイズ=スクロールdivの高さを計算する必要はありません。

私は(私はdiv要素は、私はその後、scrollToBottomを呼び出すので、スクロール必要24件のdiv追加するとき)、これを例示するためのアプローチをした:

var counter = 1; 
function addDummyContentToChatBox(api) { 
    $("<div>This is some dummy content.</div>").appendTo("#chatbox_inner"); 
    if (counter == 24) { 
     api.scrollToBottom(false); 
    } 
    api.reinitialise(); 
    counter++; 
} 

$(function() { 

    var api = $('#chatbox').jScrollPane({ 
     stickToBottom: true, 
     maintainPosition: true 
    }).data('jsp'); 

    setInterval(function() { 
     addDummyContentToChatBox(api); 
    }, 233); 
}); 

完全なソース:http://jsfiddle.net/STHgr/37/

+0

コメントありがとうございます!私はこれが本当の解決策だとは思わない。なぜchatareaが実際にいっぱいになったときに、24回後にscrollToBottomを呼び出し、21回後には呼び出しませんでしたか? jsfiddleを編集して21に設定しようとしましたが、正しく動作しません。また、jScrollPaneを作成した直後に、私の例でScrollToBottomを1回だけ呼び出しました。これは、内部コンテンツがチャットボックスよりも1px高額なので動作します。しかし、それは動作しませんでした。しかし、内部コンテントをチャットボックスよりも50%高額にした後、それはうまくいった!だから、jScrollPaneプラグインの誤算のように思えます。 – Guido

+0

私が言ったように、数字は変わるかもしれませんが、完璧な解決策ではないかもしれませんが、アイデアは重要です(!)。チャットボックスの高さがdivの高さよりも高い場合は、scrollToBottomを呼び出す必要があります(以前はそうではありません)。そしてあなたはそれをただ一度呼び出すべきです。それは私のために働いた。 – alessioalex

+0

私は理解しています。しかし、私の主張は、chatboxがdivよりも重いときはscrollToBottomを呼び出すだけではなく、明らかにdivよりも裕福な人でなければならないということです。そしてこれは間違っています。 jsfiddleに投稿した例では、チャットボックスに20行あります。したがって、scrollToBottomを呼び出すと、21回目の反復でそのトリックが実行されます。しかし、それはうまくいきません。scrollToBottomを一度だけ呼び出すと、私は同意します。しかし、それは適切な瞬間に呼び出されたときにはうまく動作しません。 – Guido

関連する問題