pc 实现拖拽 功能

安装组件
npm i react-sortable-hoc
npm i array-move
引用
import {SortableContainer, SortableElement} from 'react-sortable-hoc'
import {arrayMoveImmutable} from 'array-move'
const Steps2: React.FC<IStepBoxProps> = ({changeCurrent}) => {
  const [form] = Form.useForm()
  const [list, setList] = useState<any[]>([
    { check: false, name: '姓名', disabled: true, value: '阿斯顿', key: 'user_name'},
    { check: false, name: '手机号', value: '13263879827', key: 'id_type'},
    { check: false, name: '身份证', value: '410221199210122139', key: 'id_card'}
  ])
  const [listC, setListC] = useState<any[]>()
  const SortableItem:any = SortableElement((item:any) => {
    return (
      <div className='check-list' style={{background: '#FFFFFF', display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '8px 10px', marginTop: '10px'}}>
        <Checkbox disabled={item.item.disabled} className='check-left' value={item.item.key}>{item.item.name}</Checkbox>
        <div className='check-right' style={{width: '16px', height: '16px', display: 'flex', alignItems: 'center'}}>
          <img style={{width: '100%', height: '100%'}} src={move} alt='' />
        </div>
      </div>

    )
  }

  )
  const SortableList:any = SortableContainer((items:any) => {
    return (
      <Form
        layout='vertical'
        form={form}
      >
        <Form.Item name='checkbox'>
          <Checkbox.Group style={{width: '100%'}} onChange={onFinish}>
            {items.items.map((item:any, index:number) => (
              <SortableItem key={index} index={index} item={item} />
            ))}
          </Checkbox.Group>
        </Form.Item>

      </Form>
    )
  })
  const onFinish = (values:any) => {
    const listC:any = []
    for (const item of list) {
      for (const item2 of values) {
        if (item.key === item2) {
          listC.push(item)
        }
      }
    }
    setListC(listC)
  }
  const onSortEnd = (e:any) => {
    const list2 = arrayMoveImmutable(list, e.oldIndex, e.newIndex)
    setList(list2)
  }
  return (
    <div className='Steps2'>
      <div className='body-steps'>
       	<SortableList items={list} onSortEnd={onSortEnd} />
      </div>    
    </div>

  )
}

export default Steps2
实现同时兼容 PC 和移动的元素拖拽功能,可以使用 HTML5 新增的 drag 事件和 touch 事件。 首先,需要将元素设置为可拖拽,可以使用 draggable 属性。例如: ```html <div draggable="true">可拖拽的元素</div> ``` 然后,需要监听元素的 dragstart、drag、dragend 事件或 touchstart、touchmove、touchend 事件来实现拖拽效果。 在 PC ,可以使用 drag 事件来实现拖拽效果,例如: ```javascript var dragElement = document.getElementById('drag-element'); dragElement.addEventListener('dragstart', function(event) { // 拖拽开始时,保存拖拽元素的 ID event.dataTransfer.setData('text/plain', event.target.id); }); document.body.addEventListener('dragover', function(event) { // 阻止默认拖拽行为 event.preventDefault(); }); document.body.addEventListener('drop', function(event) { // 阻止默认拖拽行为 event.preventDefault(); // 获取拖拽元素的 ID var id = event.dataTransfer.getData('text/plain'); var dragElement = document.getElementById(id); // 将拖拽元素添加到放置区域 event.target.appendChild(dragElement); }); ``` 在移动,可以使用 touch 事件来实现拖拽效果,例如: ```javascript var dragElement = document.getElementById('drag-element'); var startX, startY; dragElement.addEventListener('touchstart', function(event) { startX = event.touches[0].clientX; startY = event.touches[0].clientY; }); dragElement.addEventListener('touchmove', function(event) { var offsetX = event.touches[0].clientX - startX; var offsetY = event.touches[0].clientY - startY; // 移动元素 this.style.transform = 'translate(' + offsetX + 'px, ' + offsetY + 'px)'; }); dragElement.addEventListener('touchend', function(event) { // 拖拽结束时,清除 transform 样式 this.style.transform = ''; }); ``` 需要注意的是,移动的 touch 事件可能会和浏览器默认行为冲突,需要使用 preventDefault() 方法来阻止默认行为。另外,由于移动的屏幕尺寸多样化,需要根据具体情况来调整拖拽的逻辑和样式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值