Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
submodule
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
web_component
submodule
Commits
40dbd9f1
Commit
40dbd9f1
authored
Dec 09, 2020
by
zhangwenshuai
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改拖拽排序
parent
23dac15b
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
77 additions
and
51 deletions
+77
-51
DragSorted.tsx
components/apolloTable/component/DragSorted.tsx
+77
-51
No files found.
components/apolloTable/component/DragSorted.tsx
View file @
40dbd9f1
...
@@ -20,8 +20,14 @@ const DragSorted = (props: any) => {
...
@@ -20,8 +20,14 @@ const DragSorted = (props: any) => {
if
(
!
canSorted
||
position
===
'left'
||
position
===
'right'
)
{
if
(
!
canSorted
||
position
===
'left'
||
position
===
'right'
)
{
return
<
div
className=
{
s
.
sortedWrap
}
>
{
props
.
children
}
</
div
>;
return
<
div
className=
{
s
.
sortedWrap
}
>
{
props
.
children
}
</
div
>;
}
}
// 长按计时器
// 按下鼠标
const
timer
:
any
=
useRef
(
null
);
const
pressed
:
any
=
useRef
(
false
);
// copyDiv显示
const
copyDivShow
:
any
=
useRef
(
false
);
// 拖动列
const
dragCol
:
any
=
useRef
();
// 放置列
const
dropCol
:
any
=
useRef
();
// 表格滚动计时器
// 表格滚动计时器
const
timerInterval
:
any
=
useRef
(
null
);
const
timerInterval
:
any
=
useRef
(
null
);
// 表格
// 表格
...
@@ -37,6 +43,15 @@ const DragSorted = (props: any) => {
...
@@ -37,6 +43,15 @@ const DragSorted = (props: any) => {
const
rightFixedHandleWrap
:
any
=
document
.
querySelector
(
'#rightFixedHandleWrap'
);
const
rightFixedHandleWrap
:
any
=
document
.
querySelector
(
'#rightFixedHandleWrap'
);
// 监听鼠标移动
// 监听鼠标移动
const
onMouseMove
=
useCallback
((
e
)
=>
{
const
onMouseMove
=
useCallback
((
e
)
=>
{
if
(
!
pressed
.
current
)
{
// 移除全局事件
document
.
body
.
removeEventListener
(
'mousemove'
,
onMouseMove
,
false
);
document
.
body
.
removeEventListener
(
'mouseup'
,
onMouseUp
,
false
);
return
;
}
if
(
!
copyDivShow
.
current
)
{
initCopyDiv
(
e
);
}
const
tableRect
=
container
.
getBoundingClientRect
();
const
tableRect
=
container
.
getBoundingClientRect
();
const
detaX
=
columnCopyDiv
.
getAttribute
(
'data-deta-x'
);
const
detaX
=
columnCopyDiv
.
getAttribute
(
'data-deta-x'
);
// 所有列
// 所有列
...
@@ -70,8 +85,10 @@ const DragSorted = (props: any) => {
...
@@ -70,8 +85,10 @@ const DragSorted = (props: any) => {
// 收集投放目标的信息
// 收集投放目标的信息
const
dropColumn
=
dom
.
getAttribute
(
'data-column-name'
)
||
''
;
const
dropColumn
=
dom
.
getAttribute
(
'data-column-name'
)
||
''
;
const
dropColumnOrder
=
dom
.
getAttribute
(
'data-column-order'
)
||
''
;
const
dropColumnOrder
=
dom
.
getAttribute
(
'data-column-order'
)
||
''
;
divider
.
setAttribute
(
'data-drop-column'
,
dropColumn
);
dropCol
.
current
=
{
divider
.
setAttribute
(
'data-drop-order'
,
dropColumnOrder
);
columnName
:
dropColumn
,
orderNo
:
dropColumnOrder
,
};
}
}
});
});
...
@@ -114,26 +131,13 @@ const DragSorted = (props: any) => {
...
@@ -114,26 +131,13 @@ const DragSorted = (props: any) => {
},
[]);
},
[]);
// 监听鼠标抬起
// 监听鼠标抬起
const
onMouseUp
=
useCallback
(()
=>
{
const
onMouseUp
=
useCallback
(()
=>
{
// 清空计时器
if
(
timer
.
current
)
{
clearTimeout
(
timer
.
current
);
timer
.
current
=
null
;
}
if
(
timerInterval
.
current
)
{
clearInterval
(
timerInterval
.
current
);
timerInterval
.
current
=
null
;
}
// 移除全局事件
document
.
body
.
removeEventListener
(
'mousemove'
,
onMouseMove
,
false
);
document
.
body
.
removeEventListener
(
'mouseup'
,
onMouseUp
,
false
);
// 停止拖动时隐藏影子div
columnCopyDiv
.
style
.
display
=
'none'
;
dividerWrap
.
style
.
display
=
'none'
;
// 获取分割线上挂载的拖动列和投放列信息
// 获取分割线上挂载的拖动列和投放列信息
const
dragColumn
=
divider
.
getAttribute
(
'data-drag-column'
);
const
dragColumn
=
dragCol
.
current
&&
dragCol
.
current
.
columnName
;
const
dragColumnOrder
=
divider
.
getAttribute
(
'data-drag-order'
);
const
dragColumnOrder
=
dragCol
.
current
&&
dragCol
.
current
.
orderNo
;
const
dropColumn
=
divider
.
getAttribute
(
'data-drop-column'
);
const
dropColumn
=
dropCol
.
current
&&
dropCol
.
current
.
columnName
;
const
dropColumnOrder
=
divider
.
getAttribute
(
'data-drop-order'
);
const
dropColumnOrder
=
dropCol
.
current
&&
dropCol
.
current
.
orderNo
;
// 清理操作
clean
();
// 没有列信息
// 没有列信息
if
(
!
dragColumn
||
!
dropColumn
)
{
if
(
!
dragColumn
||
!
dropColumn
)
{
return
;
return
;
...
@@ -215,40 +219,62 @@ const DragSorted = (props: any) => {
...
@@ -215,40 +219,62 @@ const DragSorted = (props: any) => {
if
(
e
.
button
!==
0
)
{
if
(
e
.
button
!==
0
)
{
return
;
return
;
}
}
// 鼠标按下标记
pressed
.
current
=
true
;
// 记录拖动列
dragCol
.
current
=
{
columnName
,
orderNo
,
};
// 全局添加监听鼠标移动和松开事件
document
.
body
.
addEventListener
(
'mousemove'
,
onMouseMove
,
false
);
document
.
body
.
addEventListener
(
'mouseup'
,
onMouseUp
,
false
);
},
[
onMouseMove
,
onMouseUp
],
);
// 初始化影子div位置
const
initCopyDiv
=
useCallback
(
(
e
)
=>
{
// 表格初始位置x点
// 表格初始位置x点
const
originLeft
=
container
.
getBoundingClientRect
().
x
||
0
;
const
originLeft
=
container
.
getBoundingClientRect
().
x
||
0
;
// 拖动列矩形
// 拖动列矩形
const
targetRect
=
e
.
currentTarge
t
.
getBoundingClientRect
();
const
targetRect
=
e
.
target
.
offsetParen
t
.
getBoundingClientRect
();
const
curX
=
e
.
clientX
;
const
curX
=
e
.
clientX
;
// 500ms长按事件,表示想要拖拽
// 影子div显示
timer
.
current
=
setTimeout
(()
=>
{
columnCopyDiv
.
style
.
display
=
'block'
;
// 影子div显示
// 影子div初始x位置=拖动列x点-表格x点
columnCopyDiv
.
style
.
display
=
'block'
;
columnCopyDiv
.
style
.
left
=
`
${
targetRect
.
x
-
originLeft
}
px`
;
// 影子div初始x位置=拖动列x点-表格x点
// 影子div宽度=拖动列宽度
columnCopyDiv
.
style
.
left
=
`
${
targetRect
.
x
-
originLeft
}
px`
;
columnCopyDiv
.
style
.
width
=
`
${
targetRect
.
width
}
px`
;
// 影子div宽度=拖动列宽度
columnCopyDiv
.
innerText
=
columnChsName
;
columnCopyDiv
.
style
.
width
=
`
${
targetRect
.
width
}
px`
;
// 鼠标x点与拖动列x点之间的距离(记录下来方便后续使用)
columnCopyDiv
.
innerText
=
columnChsName
;
const
detaX
=
curX
-
targetRect
.
x
;
// 鼠标x点与拖动列x点之间的距离(记录下来方便后续使用)
columnCopyDiv
.
setAttribute
(
'data-deta-x'
,
String
(
detaX
));
const
detaX
=
curX
-
targetRect
.
x
;
// 分割线初始位置为当前列
columnCopyDiv
.
setAttribute
(
'data-deta-x'
,
String
(
detaX
));
divider
.
style
.
left
=
`
${
targetRect
.
x
-
originLeft
}
px`
;
// 分割线初始位置为当前列
dividerWrap
.
style
.
display
=
'block'
;
divider
.
style
.
left
=
`
${
targetRect
.
x
-
originLeft
}
px`
;
copyDivShow
.
current
=
true
;
dividerWrap
.
style
.
display
=
'block'
;
// 给分割线设置拖动列信息,移除投放列信息
divider
.
setAttribute
(
'data-drag-column'
,
columnName
);
divider
.
setAttribute
(
'data-drag-order'
,
orderNo
);
divider
.
removeAttribute
(
'data-drop-column'
);
divider
.
removeAttribute
(
'data-drop-order'
);
// 全局添加监听鼠标移动和松开事件
document
.
body
.
addEventListener
(
'mousemove'
,
onMouseMove
,
false
);
document
.
body
.
addEventListener
(
'mouseup'
,
onMouseUp
,
false
);
},
500
);
// 阻止默认行为
e
.
preventDefault
();
},
},
[
columnName
,
orderNo
,
onMouseMove
,
onMouseUp
],
[
columnName
,
orderNo
],
);
);
const
clean
=
useCallback
(()
=>
{
// 鼠标松开
pressed
.
current
=
false
;
// 清空计时器
if
(
timerInterval
.
current
)
{
clearInterval
(
timerInterval
.
current
);
timerInterval
.
current
=
null
;
}
// 移除全局事件
document
.
body
.
removeEventListener
(
'mousemove'
,
onMouseMove
,
false
);
document
.
body
.
removeEventListener
(
'mouseup'
,
onMouseUp
,
false
);
// 停止拖动时隐藏影子div
columnCopyDiv
.
style
.
display
=
'none'
;
dividerWrap
.
style
.
display
=
'none'
;
copyDivShow
.
current
=
false
;
dragCol
.
current
=
null
;
dropCol
.
current
=
null
;
},
[
onMouseMove
,
onMouseUp
]);
return
(
return
(
<
div
<
div
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment