jQuery UI sortable()实现拖动排序

jQuery UI sortable()实现拖动排序

sortable()

  • <!DOCTYPE html>
    <html>
        <head>
            <title>jQuery UI sortable()实现拖动排序</title>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <script src="http://tool.phpddt.com/resources/js/jquery-1.7.2.min.js"></script>
            <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
        </head>
        <body>
           <script>
            $(function() {
              $( ".sortable" ).sortable({
              cursor: "move",
              items :"li",                        //只是li可以拖动
              opacity: 0.6,                       //拖动时,透明度为0.6
              revert: true,                       //释放时,增加动画
              update : function(event, ui){       //更新排序之后
                  alert($(this).sortable("toArray"));
              }
             });
           });
          </script>
          <ul class="sortable">
            <li class="ui-state-default"  id="1">第1项</li>
            <li class="ui-state-default"  id="2" >第2项</li>
            <li class="ui-state-default"  id="3">第3项</li>
          </ul>
        </body>
    </html>
     
    jQuery UI sortable参数:
    
  • 参数默认值作用
    axisfalse如果有设置,则元素仅能横向或纵向拖动。可选值:’x’, ‘y’
    cancelinput,textarea, button,select,option阻止排序动作在匹配的元素上发生
    connectWithfalse允许sortable对象连接另一个sortable对象,可将item元素拖拽到另一个中.(类型:Selector)
    containmentfalse约束排序动作只能在一个指定的范围内发生。可选值:DOM对象, ‘parent’, ‘document’, ‘window’, 或jQuery对象
    cursorauto定义在开始排序动作时,鼠标的样式。 如 cursor: “move”
    cursorAtfalse当开始移动时,元素的偏移的位置(最多两个方向)。可选值:{ top, left, right, bottom }。 如 cursorAt: {left:5,bottom:5}
    delay0以毫秒为单位,设置延迟多久才激活排序动作。此参数可防止误点击。 如 delay: 500
    distance1决定至少要在元素上面拖动多少像素后,才正式触发排序动作。 如 distance: 30
    dropOnEmptyfalse是否允許拖拽到一個空的sortable对象中。
    gridfalse每次移动都按一个格子大小移动,数组值:[x,y] 如 grid: [50, 20]
    handlefalse限制排序的动作只能在item元素中的某种元素 如 handle: ‘h2′
    helperoriginal设置是否在拖拽元素时,显示一个辅助的元素。可选值:‘original’, ‘clone’。 如 helper: ‘clone’
    items“> *” (第一级子元素)指定在排序对象中,哪些元素是可以进行拖拽排序的。 如 items: “> li”
    opacityfalse辅助元素(helper)显示的透明度 如 opacity: 0.6
    placeholderfalse设置当排序动作发生时,空白占位符的CSS样式 如 placeholder: ‘css-class-name’ (指定一个css的class)
    revertfalse如果设置成true,则被拖拽的元素在返回新位置时,会有一个动画效果
    scrollfalse如果设置成true,则元素被拖动到页面边缘时,会自动滚动。
    scrollSensitivity20设置当元素移动至边缘多少像素时,便开始滚动页面
    scrollSpeed20设置页面滚动的速度
    toleranceintersect设置当拖动元素越过其它元素多少时便对元素进行重新排序。可选值:’intersect’, ‘pointer’ intersect:至少重叠50% pointer:鼠标指针重叠元素
    zIndex1000设置在排序动作发生时,元素的z-index值

jQuery UI sortable事件:

  • start
  • 当排序动作开始时触发此事件。
  • 定义:$(‘.selector’).sortable({ start: function(event, ui) { … } });
  • 绑定:$(‘.selector’).bind(‘sortstart’, function(event, ui) { … });
  • sort
  • 当元素发生排序时触发此事件。
  • 定义:$(‘.selector’).sortable({ sort: function(event, ui) { … } });
  • 绑定:$(‘.selector’).bind(‘sort’, function(event, ui) { … });
  • change
  • 当元素发生排序且坐标已发生改变时触发此事件。
  • 定义:$(‘.selector’).sortable({ change: function(event, ui) { … } });
  • 绑定:$(‘.selector’).bind(‘sortchange’, function(event, ui) { … });
  • beforeStop
  • 当排序动作结束之前触发此事件。此时占位符元素和辅助元素仍有效。
  • 定义:$(‘.selector’).sortable({ beforeStop: function(event, ui) { … } });
  • 绑定:$(‘.selector’).bind(‘sortbeforeStop’, function(event, ui) { … });
  • stop
  • 当排序动作结束时触发此事件。
  • 定义:$(‘.selector’).sortable({ stop: function(event, ui) { … } });
  • 绑定:$(‘.selector’).bind(‘sortstop’, function(event, ui) { … });
  • update
  • 当排序动作结束时且元素坐标已经发生改变时触发此事件。
  • 定义:$(‘.selector’).sortable({ update: function(event, ui) { … } });
  • 绑定:$(‘.selector’).bind(‘sortupdate’, function(event, ui) { … });
  • receive
  • 当一个已连接的sortable对象接收到另一个sortable对象的元素后触发此事件。
  • 定义:$(‘.selector’).sortable({ receive: function(event, ui) { … } });
  • 绑定:$(‘.selector’).bind(‘sortreceive’, function(event, ui) { … });
  • over
  • 当一个元素拖拽移入另一个sortable对象后触发此事件。
  • 定义:$(‘.selector’).sortable({ over: function(event, ui) { … } });
  • 绑定:$(‘.selector’).bind(‘sortover’, function(event, ui) { … });
  • out
  • 当一个元素拖拽移出sortable对象移出并进入另一个sortable对象后触发此事件。
  • 定义:$(‘.selector’).sortable({ out: function(event, ui) { … } });
  • 绑定:$(‘.selector’).bind(‘sortout’, function(event, ui) { … });
  • activate
  • 当一个有使用连接的sortable对象开始排序动作时,所有允许的sortable触发此事件。
  • 定义:$(‘.selector’).sortable({ activate: function(event, ui) { … } });
  • 绑定:$(‘.selector’).bind(‘sortactivate’, function(event, ui) { … });
  • deactivate
  • 当一个有使用连接的sortable对象结束排序动作时,所有允许的sortable触发此事件。
  • 定义:$(‘.selector’).sortable({ deactivate: function(event, ui) { … } });
  • 绑定:$(‘.selector’).bind(‘sortdeactivate’, function(event, ui) { … });

jQuery UI sortable方法:

  • destory
  • 从元素中移除拖拽功能。
  • 用法:.sortable( ‘destroy’ )
  • disable
  • 禁用元素的拖拽功能。
  • 用法:.sortable( ‘disable’ )
  • enable
  • 启用元素的拖拽功能。
  • 用法:.sortable( ‘enable’ )
  • option
  • 获取或设置元素的参数。
  • 用法:.sortable( ‘option’ , optionName , [value] )
  • serialize
  • 获取或设置序列化后的每个item元素的id属性。
  • 用法:.sortable( ‘serialize’ , [options] )
  • toArray
  • 获取序列化后的每个item元素的id属性的数组。
  • 用法:.sortable( ‘toArray’ )
  • refresh
  • 手动重新刷新当前sortable对象的item元素的排序。
  • 用法:.sortable( ‘refresh’ )
  • refreshPositions
  • 手动重新刷新当前sortable对象的item元素的坐标,此方法可能会降低性能。
  • 用法:.sortable( ‘refreshPositions’ )
  • cancel
  • 取消当前sortable对象中item元素的排序改变。
  • 用法:.sortable( ‘cancel’ )
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个基于jQuery UI Sortable的表格拖拽表头整列都会改变的完整代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>jQuery UI Sortable</title> <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> <style> table { border-collapse: collapse; width: 100%; } th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } th { background-color: #f2f2f2; cursor: pointer; } .ui-state-highlight { height: 1.5em; line-height: 1.2em; border: 1px dashed red; } </style> </head> <body> <table id="sortable"> <thead> <tr> <th data-col="0">Name</th> <th data-col="1">Age</th> <th data-col="2">Country</th> <th data-col="3">Job</th> </tr> </thead> <tbody> <tr> <td>John</td> <td>28</td> <td>USA</td> <td>Developer</td> </tr> <tr> <td>Jane</td> <td>32</td> <td>Canada</td> <td>Designer</td> </tr> <tr> <td>James</td> <td>25</td> <td>UK</td> <td>Manager</td> </tr> </tbody> </table> <script src="//code.jquery.com/jquery-3.6.0.min.js"></script> <script src="//code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script> <script> $(function() { $("#sortable thead th").click(function() { var colIndex = $(this).index(); var sortOrder = $(this).hasClass("asc") ? "desc" : "asc"; $(this).closest("table").find("tbody tr").each(function() { var $cell = $(this).find("td").eq(colIndex); var value = $cell.text(); $cell.data("value", value); }); $(this).closest("table").find("tbody tr").sort(function(a, b) { var aVal = $(a).find("td").eq(colIndex).data("value"); var bVal = $(b).find("td").eq(colIndex).data("value"); if (sortOrder === "asc") { return aVal.localeCompare(bVal); } else { return bVal.localeCompare(aVal); } }).appendTo($(this).closest("table").find("tbody")); $(this).closest("table").find("thead th").removeClass("asc desc"); $(this).addClass(sortOrder); }).disableSelection(); $("#sortable").sortable({ axis: "x", handle: "th", placeholder: "ui-state-highlight", start: function(e, ui) { ui.placeholder.width(ui.helper.outerWidth()); }, update: function(e, ui) { var $table = ui.item.closest("table"); var thIndex = ui.item.index(); $table.find("tr").each(function() { $(this).find("td, th").eq(thIndex).detach().appendTo($(this)); }); } }).disableSelection(); }); </script> </body> </html> ``` 上述代码中,我们首先创建了一个表格,其中thead中的每个th元素都有一个data-col属性,用于指示该列的索引(从0开始)。 然后,我们使用jQuery UI Sortable使表头可拖拽排序,并在update事件中实现了拖拽整列的功能。具体来说,我们使用了axis、handle、placeholder、start和update参数来实现这个功能。 最后,我们使用了click事件来实现排序的功能。具体来说,我们为每个th元素添加了click事件,用于更新tbody中的行的顺序。我们还使用了localeCompare函数来比较字符串的值,并使用addClass和removeClass函数来切换排序方向。 需要注意的是,为了防止拖拽时选择文本,我们使用了disableSelection函数来禁用了文本选择功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT枫斗者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值