js 利用jquery.gridly.js实现拖拽并且排序

Posted 多多明明

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 利用jquery.gridly.js实现拖拽并且排序相关的知识,希望对你有一定的参考价值。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src=\'javascripts/jquery.js\' type=\'text/javascript\'></script>
    <script src=\'javascripts/jquery.gridly.js\' type=\'text/javascript\'></script>
</head>
<style type="text/css">
  #gridly
  {
    position: relative;
    width: 300px;
  }
  #gridly div{
    background: red;
    width: 60px;
    height: 60px;
  }
</style>
<body>
    <div id="gridly">
      <div user_id="1">1</div>
      <div user_id="2">2</div>
      <div user_id="3">3</div>
      <div user_id="4">4</div>
      <div user_id="5">5</div>
      <div user_id="6">6</div>
      <div user_id="7">7</div>
      <div user_id="8">8</div>
      <div user_id="9">9</div>
      <div user_id="10">10</div>
    </div>

    <script>
        //拖拽组件设置
        var gridly_set = {
        //reordering拖拽前回调函数,reordered拖拽后回调函数
        callbacks:{ reordering: reordering , reordered: reordered },
        //间距
        gutter:60,
        //显示列数
        columns:6
        };

        //加载拖拽组件
        $(\'#gridly\').gridly(gridly_set);

        //拖拽前回调
        function reordering(){
        console.log(\'reordering\');
        }

        //拖拽后回调
        function reordered(){
        console.log(\'reordered\');
        //隔100ms 防止在拖拽放下那一瞬间 返回的left top不准确
        setTimeout(get_user_id_data,100);
        }

        //获取user_ids 并排序 且 ajax提交 
        function get_user_id_data(){
        var dom = $(\'#gridly div\');
        var tmp = {};
        // 列数的权重 必须保证此数字大于每行的最大宽度 
        // 其实可以用columns*(gutter+base_width) 来计算 但鉴于columns不经常变 没必要这样写
        var col_base_num = 10000;
        dom.each(function(){
          var self = $(this);
          var left_num = self.css(\'left\').replace(/px/,\'\');
          var top_num = self.css(\'top\').replace(/px/,\'\'); 
          //加1 保证top大于0
          var top_tmp = parseInt(top_num) + 1;
          //权重 = left + (top+1)*col_base_num
          var weight = parseInt(left_num) + (top_tmp*col_base_num);
          var user_id = self.attr(\'user_id\');
          tmp[weight] = user_id;
        });

        //利用对象本身对key的排序功能 实现排序
        var i;
        var arr = [];
        for(i in tmp){
          var r = tmp[i];
          arr.push(r);
        }

        //排序后的数组
        console.log(arr);
        }
    </script>
</body>
</html>

 

jquery 以及 jquery.gridly.js 放至相对目录

 

效果:

 

以上是关于js 利用jquery.gridly.js实现拖拽并且排序的主要内容,如果未能解决你的问题,请参考以下文章

JS利用 Sea.js 实现模块化:拖拽缩放及范围限制

利用插件(jQuery-ui.js)实现表格行的拖拽排序

帆软怎么实现报表的排序,隐藏,拖拽

原生js实现拖拽效果

angular-dragon-drop.js 双向数据绑定拖拽的功能

element-ui 实现表格拖拽