- Wydzielenie synchronizacji przewijania do pluginu jQuery: jquery.autoscroll.js.
[redakcja.git] / project / static / js / jquery.autoscroll.js
diff --git a/project/static/js/jquery.autoscroll.js b/project/static/js/jquery.autoscroll.js
new file mode 100644 (file)
index 0000000..c342bdf
--- /dev/null
@@ -0,0 +1,31 @@
+(function($) {
+    $.fn.autoscroll = function(synchronizeWith, options) {
+        var self = $(this);
+        var selfContainer = self.parent();
+        var synchronizeWith = $(synchronizeWith);
+        var synchronizeWithContainer = synchronizeWith.parent();
+        var eventContainer = synchronizeWithContainer;
+
+        // Hack for iframes
+        if (self.is('iframe')) {
+            selfContainer = $('body', $('iframe').contents());
+            self = selfContainer;
+        }
+        
+        if (synchronizeWith.is('iframe')) {
+            eventContainer = synchronizeWith.contents();
+            synchronizeWithContainer = $('body', eventContainer);
+            synchronizeWith = synchronizeWithContainer;
+        }
+
+        synchronizeWithContainer.data('autoscroll.lastCheckedScrollTop', synchronizeWithContainer.scrollTop());
+        
+        eventContainer.scroll(function() {
+            var distanceScrolled = synchronizeWithContainer.scrollTop() - synchronizeWithContainer.data('autoscroll:lastCheckedScrollTop');
+            var percentScrolled = distanceScrolled / synchronizeWith.height();
+            selfContainer.scrollTop(selfContainer.scrollTop() + percentScrolled * self.height());
+            synchronizeWithContainer.data('autoscroll:lastCheckedScrollTop', synchronizeWithContainer.scrollTop());
+        });
+    };
+})(jQuery);
+