React-dnd: λ“œλž˜κ·Έ μ‹œ μžλ™ 슀크둀 μ—†μŒ

에 λ§Œλ“  2016λ…„ 10μ›” 11일  Β·  19μ½”λ©˜νŠΈ  Β·  좜처: react-dnd/react-dnd

μž¬ν˜„ν•˜λ €λ©΄:
μ‚¬νŒŒλ¦¬ λ˜λŠ” νŒŒμ΄μ–΄ν­μŠ€(IE일 μˆ˜λ„ 있음)μ—μ„œ 예제 νŽ˜μ΄μ§€λ₯Ό μ—¬μ‹­μ‹œμ˜€: https://gaearon.github.io/react-dnd/examples-sortable-simple.html
그리고 크기 μ‘°μ • λΈŒλΌμš°μ €λŠ” λͺ©λ‘μ˜ 일뢀 μš”μ†Œλ₯Ό ν™”λ©΄ 외뢀에 μœ μ§€ν•œ λ‹€μŒ λ“œλž˜κ·Έλ₯Ό μ‹œλ„ν•©λ‹ˆλ‹€. λ“œλž˜κ·Έν•˜λŠ” λ™μ•ˆ νŽ˜μ΄μ§€κ°€ μŠ€ν¬λ‘€λ˜μ–΄μ•Ό ν•˜μ§€λ§Œ κ·Έλ ‡μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. (ν¬λ‘¬μ—μ„œλŠ” μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ν•©λ‹ˆλ‹€)
이 λ¬Έμ œλŠ” Firefoxμ—μ„œ μ—΄λ € μžˆμŠ΅λ‹ˆλ‹€.
κ΄€λ ¨ μŠ€νƒ μ˜€λ²„ν”Œλ‘œ μ§ˆλ¬Έμ„ ν™•μΈν•˜κ³  싢을 수 μžˆμŠ΅λ‹ˆλ‹€.
http://stackoverflow.com/questions/16822920/scroll-while-using-html5-drag-and-drop

μ†”λ£¨μ…˜:
https://github.com/martindrapeau/jQueryDndPageScroll/blob/master/jquery.dnd_page_scroll.jsλ₯Ό 확인

λ˜ν•œ μž‘μ—… 예
https://jsfiddle.net/0vv7fs63/2/

jquery ν”ŒλŸ¬κ·ΈμΈ μ‚¬μš©μ„ μ œμ•ˆν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ†ŒμŠ€ μ½”λ“œλ₯Ό ν™•μΈν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
두 개의 div( νŽ˜μ΄μ§€ 상단 및 ν•˜λ‹¨)λ₯Ό μΆ”κ°€ν•˜κ³  λ“œλž˜κ·Έ μ˜€λ²„/μ—”ν„° 이벀트λ₯Ό μˆ˜μ‹ ν•˜κ³  그에 따라 μŠ€ν¬λ‘€ν•˜λŠ” 것이 μ†”λ£¨μ…˜μž…λ‹ˆλ‹€.

wontfix

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

react-dnd-scrollzone이 더 이상 μ΅œμ‹  react-dndμ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. IMO λ“œλž˜κ·Έ μŠ€ν¬λ‘€μ€ react-dnd μ½”μ–΄μ˜ 일뢀여야 ν•©λ‹ˆλ‹€.

λͺ¨λ“  19 λŒ“κΈ€

react-dnd에 λŒ€ν•œ 이 μ†”λ£¨μ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€: https://github.com/azuqua/react-dnd-scrollzone
이 λ¬Έμ œλŠ” μ§€κΈˆ @darthtrevinoμ—μ„œ μ’…λ£Œλ  수 μžˆμŠ΅λ‹ˆλ‹€.

Sortable κ°œλ°œμžμ—κ²Œ 이에 λŒ€ν•œ μ†”λ£¨μ…˜μ„ μ œκ³΅ν•˜μ‹­μ‹œμ˜€.

그것을 μ‚¬μš©ν•˜λŠ” 방법 당신은 λ‚˜λ₯Ό 찾을 수 μžˆμŠ΅λ‹ˆκΉŒ? @nossila

@AsceticBoy λ‚˜λŠ” README보닀 더 λ‚˜μ€ μž‘μ—…μ„ ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 거기에 λ§Žμ€ μ˜ˆκ°€ μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 이것을 직접 κ΅¬ν˜„ν–ˆλ‹€. 기본적으둜 λͺ©λ‘ μ»¨ν…Œμ΄λ„ˆλ₯Ό λ“œλ‘­ λŒ€μƒμœΌλ‘œ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

쀑고: findDOMNode(component).getBoundingClientRect()
λ‚΄κ°€ μ–Έμ œ listcontainer의 μ–‘μͺ½μ— μžˆμ—ˆλŠ”μ§€ μ•ŒκΈ° μœ„ν•΄

λ‹€μŒ: listContainerDOMNode.scrollLeft += someValue
λͺ©λ‘μ„ μŠ€ν¬λ‘€ν•˜λ €λ©΄ λͺ©λ‘ μ»¨ν…Œμ΄λ„ˆλ₯Ό μŠ€ν¬λ‘€ν•©λ‹ˆλ‹€.

쒋은 μ‹œμž‘μ΄μ§€λ§Œ λ¬Έμ œλŠ” μ‚¬μš©μžκ°€ 포인터λ₯Ό 계속 작고 있으면 ν˜Έλ²„ μ΄λ²€νŠΈκ°€ νŠΈλ¦¬κ±°λ˜μ§€ μ•Šμ•„ 슀크둀이 μ€‘μ§€λœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

포인터가 μ—¬μ „νžˆμžˆμ„ λ•Œ listcontainerλ₯Ό μŠ€ν¬λ‘€ν•˜μ—¬μ΄ 문제λ₯Ό ν•΄κ²° ν•œ μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ?

@노싀라 타이! react-dnd-scrollzone은 맀λ ₯으둜 μž‘λ™ν•©λ‹ˆλ‹€ :)

λ‚˜λŠ” 이것이 였래된 μŠ€λ ˆλ“œλΌλŠ” 것을 μ•Œκ³  μžˆμ§€λ§Œ μ—¬μ „νžˆ μ—΄λ € μžˆμŠ΅λ‹ˆλ‹€ ...

react-virtualized μ—μ„œ WindowScroller 와 ν•¨κ»˜ react-dnd-scrollzone 을 μ„±κ³΅μ μœΌλ‘œ μ„€μ •ν•œ μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆλ‹€. κ·Έλ ‡λ‹€λ©΄ κ΅¬ν˜„μ„ κ³΅μœ ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

WindowScroller , AutoSizer 및 List . scrollzone μ œλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

λ‚΄ λ¬Έμ œλŠ” WindowScroller μ‚¬μš©μž μ •μ˜ scrollElement λ₯Ό μ‚¬μš©ν•˜κ³  μžˆλ‹€λŠ” 것을 κΉ¨λ‹¬μ•˜μŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ„œ react-dnd-scrollzone λŠ” μ»¨ν…Œμ΄λ„ˆλ₯Ό λž˜ν•‘ν•˜λŠ” μš”μ†Œλ‘œ μ„€μ •ν•©λ‹ˆλ‹€. μ‚¬μš©μž μ •μ˜ 슀크둀 μš”μ†Œ μ†Œν’ˆμ„ μΆ”κ°€ν•˜κΈ° μœ„ν•΄ ν¬ν¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

react-dnd-scrollzone이 더 이상 μ΅œμ‹  react-dndμ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. IMO λ“œλž˜κ·Έ μŠ€ν¬λ‘€μ€ react-dnd μ½”μ–΄μ˜ 일뢀여야 ν•©λ‹ˆλ‹€.

μ•„λž˜λŠ” λ‚΄ μ†”λ£¨μ…˜μž…λ‹ˆλ‹€.

const autoScrollInSafari = (step = 4) => (fn) => {
  const inSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);

  if (inSafari) {
    return function (p, m, c) {
      const scrollDOM = document.querySelector('.your-scroll-dom-class');
      if (scrollDOM) {
        const cursor = m.getClientOffset();
        const rect = scrollDOM.getBoundingClientRect();
        if (cursor.y - rect.top < 50) scrollDOM.scrollTop -= step;
        if (rect.bottom - cursor.y < 50) scrollDOM.scrollTop += step;
        if (cursor.x - rect.left < 50) scrollDOM.scrollLeft -= step;
        if (rect.right - cursor.x < 50) scrollDOM.scrollLeft += step;
      }
      fn.apply(this, [p, m, c]);
    };
  }

  return fn;
};

const myDropSpec = {
  drop() {
    // your drop callback
  },
  hover: autoScrollInSafari((props, monitor, component) => {
    // your hover callback
  }),
}

도움이 되기λ₯Ό λ°”λžλ‹ˆλ‹€. :웃닀:

μ—…λ°μ΄νŠΈλœ scrollzone 포크(https://github.com/frontend-collective/frontend-collective-react-dnd-scrollzone)λŠ” 7.0.2κΉŒμ§€μ˜ μ΅œμ‹  λ²„μ „μ˜ react-dndμ—μ„œ μž‘λ™ν•©λ‹ˆλ‹€. ν•΄λ‹Ή 버전을 λ„˜μ–΄μ„œλŠ” react-dndκ°€ 이 였λ₯˜λ₯Ό μƒμ„±ν•˜λŠ” DragDropContextλ₯Ό μ΄λ™ν–ˆμŠ΅λ‹ˆλ‹€.

./node_modules/frontend-collective-react-dnd-scrollzone/lib/index.js
Module not found: Can't resolve 'react-dnd/lib/DragDropContext' in 'X:\WSProjects\sonnys-queue\node_modules\frontend-collective-react-dnd-scrollzone\lib'

@Soundvessel 그것은 CommonJS/ESModule κΈ°λŠ₯ λ•Œλ¬Έμ΄μ—ˆμŠ΅λ‹ˆλ‹€. μ•„λ§ˆλ„ 메이저 버전 μ»·μ΄μ—ˆμ„ κ²ƒμž…λ‹ˆλ‹€. react-dnd/lib/cjs/DragDropContext μ°Ύκ±°λ‚˜ react-dnd 의 μ΅œμƒμœ„ μˆ˜μ€€μ—μ„œ κ°€μ Έμ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

이 λ¬Έμ œλŠ” 졜근 ν™œλ™μ΄ μ—†μ—ˆκΈ° λ•Œλ¬Έμ— μžλ™μœΌλ‘œ 였래된 κ²ƒμœΌλ‘œ ν‘œμ‹œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 더 이상 ν™œλ™μ΄ μ—†μœΌλ©΄ νμ‡„λ©λ‹ˆλ‹€. κ·€ν•˜μ˜ 기여에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

μ΅œμ‹  λ²„μ „μ˜ react-dndλ₯Ό μ‚¬μš©ν•  수 μžˆλŠ” μ†”λ£¨μ…˜μ„ 찾은 μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ?

μ—…λ°μ΄νŠΈλœ scrollzone 포크(https://github.com/frontend-collective/frontend-collective-react-dnd-scrollzone)λŠ” 7.0.2κΉŒμ§€μ˜ μ΅œμ‹  λ²„μ „μ˜ react-dndμ—μ„œ μž‘λ™ν•©λ‹ˆλ‹€. ν•΄λ‹Ή 버전을 λ„˜μ–΄μ„œλŠ” react-dndκ°€ 이 였λ₯˜λ₯Ό μƒμ„±ν•˜λŠ” DragDropContextλ₯Ό μ΄λ™ν–ˆμŠ΅λ‹ˆλ‹€.

./node_modules/frontend-collective-react-dnd-scrollzone/lib/index.js
Module not found: Can't resolve 'react-dnd/lib/DragDropContext' in 'X:\WSProjects\sonnys-queue\node_modules\frontend-collective-react-dnd-scrollzone\lib'

@Soundvessel @darthtrevinoκ°€ μ œμ•ˆν•œ μˆ˜μ • 사항을 μ μš©ν–ˆμŠ΅λ‹ˆκΉŒ?

μ¦‰μ‹œ μ†”λ£¨μ…˜μ„ 찾을 수 μ—†κ³  일뢀 μ†”λ£¨μ…˜μ€ μ΅œμ‹  react-dnd λ²„μ „μ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 직접 μ†”λ£¨μ…˜μ„ 생각해 λƒˆμŠ΅λ‹ˆλ‹€. https://gist.github.com/orlandovallejos/ed9c79dd67e96c25cfcc8f1008df9489

λ‚˜λŠ” 그것이 λ‹€λ₯Έ μ‚¬λžŒμ„ 돕기λ₯Ό λ°”λžλ‹ˆλ‹€.

@orlandovallejos
μ•ˆλ…•ν•˜μ„Έμš”, 이 Sort 슀트레슀 ν…ŒμŠ€νŠΈ μ˜ˆμ œμ—μ„œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? https://react-dnd.github.io/react-dnd/examples/sortable/stress-test

λ‚˜λŠ” 쑰금 μ‹œλ„ν–ˆμ§€λ§Œ μ„±κ³΅ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.

@MartinN3 μ—¬κΈ° λ‚΄ μΉœκ΅¬κ°€ μžˆμŠ΅λ‹ˆλ‹€: https://codesandbox.io/s/react-dnd-example-12-s3nnf

https://imgur.com/a/heuPO48

μš”κ΅¬ 사항, μ˜€ν”„μ…‹, div μ»¨ν…Œμ΄λ„ˆ(1개 이상), 슀크둀 속도(PX_DIFF λ³€μˆ˜ μ‚¬μš©) 등에 맞게 μ—…λ°μ΄νŠΈν•΄μ•Ό ν•©λ‹ˆλ‹€.

슀크둀 κΈ°λŠ₯은 Chromeμ—μ„œ 기본적으둜 μž‘λ™ν•©λ‹ˆλ‹€.

μ¦‰μ‹œ μ†”λ£¨μ…˜μ„ 찾을 수 μ—†κ³  일뢀 μ†”λ£¨μ…˜μ€ μ΅œμ‹  react-dnd λ²„μ „μ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 직접 μ†”λ£¨μ…˜μ„ 생각해 λƒˆμŠ΅λ‹ˆλ‹€. https://gist.github.com/orlandovallejos/ed9c79dd67e96c25cfcc8f1008df9489

λ‚˜λŠ” 그것이 λ‹€λ₯Έ μ‚¬λžŒμ„ 돕기λ₯Ό λ°”λžλ‹ˆλ‹€.

이것이 졜고의 μ†”λ£¨μ…˜μž…λ‹ˆλ‹€. ν•΄κ²°ν•΄μ£Όμ…”μ„œ 정말 κ°μ‚¬ν•©λ‹ˆλ‹€ :)

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰