zoukankan      html  css  js  c++  java
  • php接口实现拖拽排序功能

    列表拖拽排序是一个很常见的功能,但是后端接口如何处理却是一个令人纠结的问题
    如何实现才能达到效率最高呢

    先分析一个场景,假如有一个页面有十条数据,所谓的拖拽就是在这十条数据来来回回的拖,但是每次拖动都会影响到其他数据
    例如把最后一条拖到最前面,那么后面九条就自动往后移,反之也是,嗯~~~

    先想象一下,排序号是固定的,就好像有十把椅子,每个椅子都是固定在那里的,移动的是上面的人,这样就不会影响到其他页面的数据了
    而且每个人换的也是之前其他人的桌椅号码,这样也不用去想到底要加多少才能排在哪里。

    接口设计:

    //$ids 这十条数据的id集合,逗号隔开的字符串
    //$oldIndex 原始位置,从0开始算
    //$newIndex 要拖动的位置
    function dragSort($ids,$oldIndex,$newIndex)
    {
        //保证查找出来的数据跟前台提交的顺序一致,这里要order by field
        //id 主键 sort 排序值
        $sql =  "select id,sort from 表名字 where id in ($ids) order by field(id, " . $ids . ") ";
        $list =  "这里省略,就是去数据库找嘛";
        //id集合
        $idArr   = [];
        //排序集合
        $sortArr = [];
        foreach ($list as $item) {
            $idArr[]   = $item['id'];
            $sortArr[] = $item['sort'];
        }
        //记录要拖动的id
        $oldValue = $idArr[$oldIndex];
        //删除这个要拖动的id
        unset($idArr[$oldIndex]);
        //插入新的位置,并自动移位
        array_splice($idArr, $newIndex, 0, $oldValue);
        //重新设置排序
        $set = [];
        for ($i = 0; $i < count($idArr); $i++) {
             $set[$i]['id']   = $idArr[$i];
             $set[$i]['sort'] = $sortArr[$i];
         }
        //保存到数据库省略
    }
    
  • 相关阅读:
    resin网站出错!
    Java的编译与执行
    对SDK、JDK、JRE和JVM的理解总结
    第一个JDBC实例 操作MYSQL数据库
    三种定义JavaScript函数方法以及使用匿名函数打造自己的类库
    JavaScript 闭包原理和闭包实现
    学习Java运算符时的取余(%)和自加减(++、)的小结
    chmod 命令用法
    Eclipse快捷键大全
    ||运算符在JavaScript的另类用法
  • 原文地址:https://www.cnblogs.com/chriiess/p/8917371.html
Copyright © 2011-2022 走看看