Index: src/wp-admin/js/common.js
===================================================================
--- src/wp-admin/js/common.js	(revision 30838)
+++ src/wp-admin/js/common.js	(working copy)
@@ -193,8 +193,11 @@
 		lastScrollPosition = 0,
 		pinnedMenuTop = false,
 		pinnedMenuBottom = false,
+		isScrolling = false,
+		scrollTimer,
 		menuTop = 0,
 		height = {
+			document: $document.height(),
 			window: $window.height(),
 			wpwrap: $wpwrap.height(),
 			adminbar: $adminbar.height(),
@@ -554,6 +557,10 @@
 		}
 
 		if ( height.menu + height.adminbar > height.window ) {
+			if ( windowPos < 1 || windowPos + height.window > height.document - 1 ) {
+				return;
+			}
+
 			if ( windowPos > lastScrollPosition ) {
 				// Scrolling down
 				if ( pinnedMenuTop ) {
@@ -626,6 +633,16 @@
 		lastScrollPosition = windowPos;
 	}
 
+	function resetHeights() {
+		height = {
+			document: $document.height(),
+			window: $window.height(),
+			wpwrap: $wpwrap.height(),
+			adminbar: $adminbar.height(),
+			menu: $adminMenuWrap.height()
+		};
+	}
+
 	function unpinMenu() {
 		if ( isIOS ) {
 			return;
@@ -640,6 +657,8 @@
 	}
 
 	function setPinMenu() {
+		resetHeights();
+
 		if ( $adminmenu.data('wp-responsive') ) {
 			$body.removeClass( 'sticky-menu' );
 			unpinMenu();
@@ -652,8 +671,24 @@
 		}
 	}
 
+	function scrollStart() {
+		if ( isScrolling ) {
+			window.clearTimeout( scrollTimer );
+
+			scrollTimer = window.setTimeout( function() {
+				isScrolling = false;
+			}, 200 );
+		} else {
+			isScrolling = true;
+			$document.triggerHandler( 'wp-scroll-start' );
+		}
+	}
+
 	if ( ! isIOS ) {
-		$window.on( 'scroll.pin-menu', pinMenu );
+		$window.on( 'scroll.pin-menu', function() {
+			scrollStart();
+			pinMenu();
+		});
 	}
 
 	window.wpResponsive = {
@@ -792,17 +827,7 @@
 	window.wpResponsive.init();
 	setPinMenu();
 
-	$document.on( 'wp-window-resized.pin-menu postboxes-columnchange.pin-menu postbox-toggled.pin-menu', function() {
-		height.wpwrap = $wpwrap.height();
-		height.window = $window.height();
-		height.adminbar = $adminbar.height();
-		setPinMenu();
-	}).on( 'wp-collapse-menu.pin-menu', function() {
-		height.wpwrap = $wpwrap.height();
-		height.menu = $adminMenuWrap.height();
-		setPinMenu();
-	});
-
+	$document.on( 'wp-window-resized.pin-menu postboxes-columnchange.pin-menu postbox-toggled.pin-menu wp-collapse-menu.pin-menu wp-scroll-start.pin-menu', setPinMenu );
 });
 
 // Fire a custom jQuery event at the end of window resize
