App.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import React from 'react'
  2. import './style.css'
  3. export default class Drager extends React.Component {
  4. constructor(...props) {
  5. super(...props)
  6. this.move = this.move.bind(this)
  7. this.ondragend = this.ondragend.bind(this)
  8. }
  9. move(some) {
  10. let { elX, elY } = this.state
  11. // let fatherLeft = some.target.offsetParent.offsetLeft
  12. // let fatherRight = some.target.offsetParent.offsetLeft + some.target.offsetParent.clientWidth
  13. // let fatherTop = some.target.offsetParent.offsetTop
  14. // let fatherBot = some.target.offsetParent.offsetTop + some.target.offsetParent.clientHeight
  15. let thisLeft = this.state.x
  16. let deltaX = some.clientX - this.state.originX + elX
  17. let deltaY = some.clientY - this.state.originY + elY
  18. deltaX = Math.max(deltaX, 0)
  19. this.setState({
  20. x: deltaX,
  21. y: deltaY
  22. })
  23. }
  24. ondrag(some) {
  25. document.addEventListener('mousemove', this.move)
  26. document.addEventListener('mouseup', this.ondragend)
  27. this.setState({
  28. originX: some.clientX,
  29. originY: some.clientY,
  30. elX: this.state.x,
  31. elY: this.state.y
  32. })
  33. }
  34. ondragend(some) {
  35. console.log('脱离了')
  36. document.removeEventListener('mousemove', this.move)
  37. document.removeEventListener('mouseup', this.ondragend)
  38. }
  39. state = {
  40. x: 20,
  41. y: 20,
  42. isDrag: false,
  43. originX: 0,
  44. elX: 0,
  45. originY: 0,
  46. elY: 0
  47. }
  48. render() {
  49. const { x, y } = this.state
  50. return (
  51. <div className='shitWrap' style={{ left: 100, height: 300, width: 300, border: '1px solid black', position: 'absolute' }}>
  52. <div className='shit'
  53. style={{ userSelect: 'none', touchAction: 'none', border: '2px solid black', padding: 10, transform: `translate(${x}px,${y}px)` }}
  54. onMouseDown={this.ondrag.bind(this)}
  55. onMouseUp={this.ondragend.bind(this)}
  56. >
  57. asdasdasd
  58. </div>
  59. </div>
  60. )
  61. }
  62. }