Nimbin[12]?Web & Tools / dienstplancreator / js/scroll.js

dienstplancreator git · main

Dienstplan (roster) creator, PHP/JS web app

php javascript roster web · first commit 2023-07-13 · last commit 2023-09-14 (3 years ago) · synced 3 days ago · upstream: github.com/nimbin2/dienstplancreator

JavaScript 50% PHP 40.5% CSS 8.5%
git clone https://git.christianimmanuel.de/web-tools/dienstplancreator.gitwget https://git.christianimmanuel.de/web-tools/dienstplancreator/archive/dienstplancreator.tar.gz
js/scroll.js 1.8 KB · 58 lines raw
addDragToScroll = (slider, day_id) => {
   let isDown = false;
   let startX;
   let startY;
   let scrollLeft;
   let scrollTop;
   let new_scrollLeft 
   let new_scrollTop 
   let check_remove = false
   let block_button 

   if (typeof day_id !== "undefined")  {
      block_button = document.querySelector(`#Table-${day_id}-container .button-edit-table`)
   }
   slider.addEventListener('mousedown', (e) => {
      isDown = true;
      slider.classList.add('active');
      startX = e.pageX - slider.offsetLeft;
      startY = e.pageY - slider.offsetTop;
      scrollLeft = slider.scrollLeft;
      scrollTop = slider.scrollTop;
      slider.style = "cursor: grabbing !important;"
   });
   slider.addEventListener('mouseleave', () => {
      isDown = false;
      slider.classList.remove('active');
   });
   slider.addEventListener('mouseup', () => {
      isDown = false;
      slider.classList.remove('active');
      slider.style = "cursor: auto;"
      window.setTimeout(() => {
         check_remove = false
         if (typeof day_id !== "undefined")  {
            block_button.setAttribute("onClick", `loadEditableDataIntoRosterTable(this, ${day_id})`)
         }
      }, 50)
   });
   slider.addEventListener('mousemove', (e) => {
      if(!isDown) return;

      e.preventDefault();
      const x = e.pageX - slider.offsetLeft;
      const y = e.pageY - slider.offsetTop;
      const walk = (x - startX) * 3; //scroll-fast
      const walk_y = (y - startY) * 3; //scroll-fast
      new_scrollLeft = scrollLeft - walk;
      new_scrollTop = scrollTop - walk_y;
      if (scrollLeft !== new_scrollLeft && !check_remove) {
         check_remove = true;
         if (typeof day_id !== "undefined")  {
            block_button.removeAttribute("onClick")
         }
      }
      slider.scrollLeft = new_scrollLeft
      slider.scrollTop = new_scrollTop
   });
}