فهرست منبع

Improvement. Don't lose your place with infinite upscroll.

updates #306
JC Brand 10 سال پیش
والد
کامیت
ec02d34af9
1فایلهای تغییر یافته به همراه16 افزوده شده و 6 حذف شده
  1. 16 6
      converse.js

+ 16 - 6
converse.js

@@ -1396,13 +1396,15 @@
                 // That way we could probably also better show day indicators.
                 // That code should perhaps go into onMessageAdded
                 if (num_messages && msg_time.isBefore(this.model.messages.at(0).get('time'))) {
-                    if (! has_scrollbar || $content.scrollTop() !== 0) {
-                        insertMessage = _.compose(this.scrollDown.bind(this), $content.prepend.bind($content)); 
-                    } else {
-                        insertMessage = $content.prepend.bind($content);
-                    }
+                    insertMessage = _.compose(
+                        this.scrollDownMessageHeight.bind(this),
+                        function ($el) {
+                            $content.prepend($el);
+                            return $el;
+                        }
+                    );
                 } else {
-                    insertMessage = _.compose(this.scrollDown.bind(this), $content.append.bind($content));
+                    insertMessage = _.compose(_.debounce(this.scrollDown.bind(this), 50), $content.append.bind($content));
                 }
                 if ((match) && (match[1] === 'me')) {
                     text = text.replace(/^\/me/, '');
@@ -1969,6 +1971,14 @@
                 return this;
             },
 
+            scrollDownMessageHeight: function ($message) {
+                var $content = this.$('.chat-content');
+                if ($content.is(':visible')) {
+                    $content.scrollTop($content.scrollTop() + $message[0].scrollHeight);
+                }
+                return this;
+            },
+
             scrollDown: function () {
                 var $content = this.$('.chat-content');
                 if ($content.is(':visible')) {