react实现拖拽排序(菜单+视频+图片等)

DOM结构部分
{/* 拖动菜单部分 */}
              <div className="configLeft" id="setSubMenu">
                    <div className="topMenuSection" ref={this.sortableSubMenu}>
                        {
                            menuList.length > 0 && menuList.map((item, i) =>
                                <Tooltip title="拖动菜单进行排序" key={i}>
                                    <div className={classNames(item.selectedStyle, "menuItem")} onClick={this.changeTab.bind(this, item)} key={i}>
                                        <span className="menuName">{item.name}</span>
                                    </div>
                                </Tooltip>

                            )
                        }
{/*添加菜单操作 */}
                        <div className="addAction" onClick={this.addMenu} style={hide}>
                            <Icon type="plus" />
                        </div>
                    </div>
          </div>
js部分
先npm i sortablejs     我的版本:"sortablejs": "^1.7.0",
import Sortable from 'sortablejs';
1.state中定义的数据
this.state = {
    menu: {
                activeIndex: '0',
                menu: [
                    {
                        id: 'menu0',
                        name: '菜单名称',
                        layout: 'double',
                        sub: {
                            activeIndex: '0',
                            menu: []
                        }
                    }
                ]
           }
}
    /**********排序子菜单************/
    sortableSubMenu = (componentBackingInstance) => {
        // check if backing instance not null
        if (componentBackingInstance) {
            let options = {
                draggable: ".menuItem", // Specifies which items inside the element should be sortable
                group: "shared",
                onEnd: (evt) => {
                  //拖动之后 触发的回调函数
                    let menuObj = this.state.menu;
                    let menuArr = menuObj.menu; //主菜单数组
                    // Array.splice(指定修改的开始位置,要移除的个数,要添加进数组的元素)----语法
                    //先把拖拽元素的位置删除 再新的位置添加进旧的元素
                    const oldEl = menuArr.splice(evt.oldIndex, 1);
                    menuArr.splice(evt.newIndex, 0, oldEl[0]);
                    //新的
                    menuObj.menu = [];//多此一举  是为了防止数据顺序发生错乱
                    this.setState({
                        menu: menuObj
                    }, () => {
                        menuObj.menu = menuArr;
                        this.setState({
                            menu: menuObj
                        }, () => {
                          //保存拖拽之后的列表  也可以不写  看业务需求
                            this.dragSortMenu(menuArr)

                        })
                    })
                }
            }
            Sortable.create(componentBackingInstance, options);
        }
    }
//保存拖拽之后的列表
    dragSortMenu(menuArr) {
        //调用保存列表的接口
    }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值