useDrag.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. export function useDrag(sliderDom: HTMLElement) {
  2. let startPoint = 0;
  3. let isDown = false;
  4. let premitiveX = 0;
  5. function onMouseDown(e: any) {
  6. isDown = true;
  7. const style = window.getComputedStyle(sliderDom!);
  8. const { transform } = style;
  9. if (transform !== 'none') {
  10. const matrixArr = transform.replace(/[^0-9\-,]/g, '').split(',');
  11. console.log('matrixArr', matrixArr);
  12. premitiveX = parseInt(matrixArr[4]);
  13. } else {
  14. premitiveX = 0;
  15. }
  16. const { clientX } = e;
  17. startPoint = clientX;
  18. }
  19. function onMosueUp(e: any) {
  20. isDown = false;
  21. }
  22. function onMouseMove(e: any) {
  23. if (!isDown) return;
  24. const { clientX } = e;
  25. const moveDistance = clientX - startPoint;
  26. const offset = premitiveX + moveDistance;
  27. console.log('offset', offset);
  28. sliderDom!.style.transform = `translateX(${offset}px)`;
  29. }
  30. sliderDom.addEventListener('mouseDown', onMouseDown);
  31. sliderDom.addEventListener('mouseMove', onMouseMove);
  32. sliderDom.addEventListener('mouseUp', onMosueUp);
  33. return { onMouseDown, onMouseMove, onMosueUp };
  34. }