| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import React from 'react'
- import uiActions from 'actions/ui'
- import uiStores from 'stores/ui'
- import newEventStores from 'stores/newEvent'
- const minWidth = 920 // 最小宽度
- export default class JengaDrag extends React.Component {
- constructor(props) {
- super(props)
- this.onEventChange = this.onEventChange.bind(this)
- this.getMinWidth = this.getMinWidth.bind(this)
- this.resetWidth = this.resetWidth.bind(this)
- this.onDragStart = this.onDragStart.bind(this)
- this.onDragEnd = this.onDragEnd.bind(this)
- this.onDragMove = this.onDragMove.bind(this)
- }
- componentDidMount() {
- this.resetWidth()
- this.unsubscribe = newEventStores.listen(this.onEventChange)
- }
- componentWillUnmount() {
- this.unsubscribe()
- }
- onEventChange(status) {
- if (status && status.types) {
- if (status.types.includes('showMemo')) {
- this.resetWidth()
- }
- }
- }
- getMinWidth() {
- return minWidth + (newEventStores.showMemo ? 150 : 0)
- }
- resetWidth(setViewWidth = true, afterSetWidth) {
- if (setViewWidth) {
- this.viewWidth = this.getMinWidth() + uiStores.jengaViewWidthDelta
- }
- let eventView = document.querySelector('.event-view')
- if (eventView) {
- eventView.style.width = this.viewWidth + 'px'
- afterSetWidth && afterSetWidth()
- }
- }
- onDragStart(e) {
- this.startX = e.pageX
- let curMinWidth = this.getMinWidth()
- this.startWidth =
- this.viewWidth > curMinWidth ? this.viewWidth : curMinWidth
- document.addEventListener('mousemove', this.onDragMove)
- document.addEventListener('mouseup', this.onDragEnd)
- }
- onDragEnd() {
- document.removeEventListener('mousemove', this.onDragMove)
- document.removeEventListener('mouseup', this.onDragEnd)
- }
- onDragMove(e) {
- this.viewWidth = this.startWidth + (e.pageX - this.startX)
- let curMinWidth = this.getMinWidth()
- if (this.viewWidth < curMinWidth) {
- this.viewWidth = curMinWidth
- }
- // 使用style的方式
- this.resetWidth(false, () => {
- // 通知其他相关组件去更新宽度
- uiActions.changeJengaViewWidthDelta({
- delta: this.viewWidth - this.getMinWidth()
- })
- })
- }
- render() {
- return <div className="jenga-drag" onMouseDown={this.onDragStart} />
- }
- }
|