import React, { useState, useRef } from 'react';
import '../index.less';
interface IProps {}
const Index: React.FC<IProps> = () => {
const guideList = useRef<any>();
const sourceNode = useRef<any>();
const outerDragStart = (e: any) => {
setTimeout(() => {
e.target.classList.add('moving');
}, 0);
sourceNode.current = e.target;
e.dataTransfer.effectAllowed = 'move';
};
const outerDragEnter = (e: any) => {
e.preventDefault();
if (e.target === guideList.current || e.target === sourceNode.current) {
return;
}
const children = Array.from(guideList.current.children);
const sourceIndex = children.indexOf(sourceNode.current);
const targetIndex = children.indexOf(e.target);
if (sourceIndex < targetIndex) {
guideList.current.insertBefore(sourceNode.current, e.target.nextElementSibling);
}
if (sourceIndex > targetIndex && targetIndex >= 0) {
guideList.current.insertBefore(sourceNode.current, e.target);
}
};
const outerDragEnd = (e: any) => {
e.target.classList.remove('moving');
};
const outerDragOver = (e: any) => {
e.preventDefault();
};
return (
<div
className='list'
onDragStart={outerDragStart}
onDragEnd={outerDragEnd}
onDragEnter={outerDragEnter}
onDragOver={outerDragOver}
ref={guideList}
>
<div draggable className='listItem'>
<span>111111</span>
<span>呜呜呜呜</span>
</div>
<div draggable className='listItem'>
<span>222222</span>
<span>呜呜呜呜</span>
</div>
<div draggable className='listItem'>
<span>333333</span>
<span>呜呜呜呜</span>
</div>
<div draggable className='listItem'>
<span>444444</span>
<span>呜呜呜呜</span>
</div>
<div draggable className='listItem'>
<span>555555</span>
<span>呜呜呜呜</span>
</div>
</div>
);
};
export default Index;
js原生拖拽
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...