Procházet zdrojové kódy

Don't scroll the screen more than the scrollbar would scroll

Martin Filser před 3 roky
rodič
revize
3c7ca87625
1 změnil soubory, kde provedl 16 přidání a 2 odebrání
  1. 16 2
      client/components/lists/list.js

+ 16 - 2
client/components/lists/list.js

@@ -125,11 +125,17 @@ BlazeComponent.extendComponent({
           boardCanvas.scrollLeft -= 15;
           ui.helper[0].offsetLeft -= 15;
         }
-        if (event.pageX > boardCanvas.offsetWidth - 10)
+        if (
+          event.pageX > boardCanvas.offsetWidth - 10 &&
+          boardCanvas.scrollLeft < $boardCanvas.data('scrollLeftMax') // don't scroll more than possible
+        )
         { // scroll to the right
           boardCanvas.scrollLeft += 15;
         }
-        if (event.pageY > boardCanvas.offsetHeight - 10)
+        if (
+          event.pageY > boardCanvas.offsetHeight - 10 &&
+          boardCanvas.scrollTop < $boardCanvas.data('scrollTopMax') // don't scroll more than possible
+        )
         { // scroll to the bottom
           boardCanvas.scrollTop += 15;
         }
@@ -138,6 +144,14 @@ BlazeComponent.extendComponent({
           boardCanvas.scrollTop -= 15;
         }
       },
+      activate(event, ui) {
+        const $boardCanvas = $('.board-canvas');
+        const  boardCanvas = $boardCanvas[0];
+        // scrollTopMax and scrollLeftMax only available at Firefox (https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollTopMax)
+        // https://stackoverflow.com/questions/12965296/how-to-get-maximum-document-scrolltop-value/12965383#12965383
+        $boardCanvas.data('scrollTopMax', $(document).height() - $(window).height());
+        // https://stackoverflow.com/questions/5138373/how-do-i-get-the-max-value-of-scrollleft/5704386#5704386
+        $boardCanvas.data('scrollLeftMax', boardCanvas.scrollWidth - boardCanvas.clientWidth);
       },
     });