jquery ui sortable

本文详细介绍了 jQuery UI Sortable 插件的使用方法,包括参数配置、事件绑定及方法调用等内容。此外还提供了如何利用该插件实现元素拖拽排序,并通过 AJAX 技术实时保存排序结果的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jquery ui sortable

所有的事件回调函数都有两个参数:event和ui,浏览器自有event对象,和经过封装的ui对象
ui.helper - 表示sortable元素的JQuery对象,通常是当前元素的克隆对象
ui.position - 表示相对当前对象,鼠标的坐标值对象{top,left}
ui.offset - 表示相对于当前页面,鼠标的坐标值对象{top,left}
ui.item - 表示当前拖拽的元素
ui.placeholder - 占位符(如果有定义的话)
ui.sender - 当前拖拽元素的所属sortable对象(仅当元素是从另一个sortable对象传递过来时有用)

·参数(参数名 : 参数类型 : 默认值)
appendTo : String : 'parent'
Defines where the helper that moves with the mouse is being appended to during the drag (for example, to resolve overlap/zIndex issues).
初始:$('.selector').sortable({ appendTo: 'body' });
获取:var appendTo = $('.selector').sortable('option', 'appendTo');
设置:$('.selector').sortable('option', 'appendTo', 'body');

axis : String : false
如果有设置,则元素仅能横向或纵向拖动。可选值:'x', 'y'
初始:$('.selector').sortable({ axis: 'x' });
获取:var axis = $('.selector').sortable('option', 'axis');
设置:$('.selector').sortable('option', 'axis', 'x');

cancel : Selector : ':input,button'
阻止排序动作在匹配的元素上发生。
初始:$('.selector').sortable({ cancel: 'button' });
获取:var cancel = $('.selector').sortable('option', 'cancel');
设置:$('.selector').sortable('option', 'cancel', 'button');

connectWith : Selector : false
允许sortable对象连接另一个sortable对象,可将item元素拖拽到另一个中。
初始:$('.selector').sortable({ connectWith: '.otherlist' });
获取:var connectWith = $('.selector').sortable('option', 'connectWith');
设置:$('.selector').sortable('option', 'connectWith', '.otherlist');

containment : Element, String, Selector : false
约束排序动作只能在一个指定的范围内发生。可选值:DOM对象, 'parent', 'document', 'window', 或jQuery对象
初始:$('.selector').sortable({ containment: 'parent' });
获取:var containment = $('.selector').sortable('option', 'containment');
设置:$('.selector').sortable('option', 'containment', 'parent');

cursor : String : 'auto'
定义在开始排序动作时,如果的样式。
初始:$('.selector').sortable({ cursor: 'crosshair' });
获取:var cursor = $('.selector').sortable('option', 'cursor');
设置:$('.selector').sortable('option', 'cursor', 'crosshair');

cursorAt : Object : false
当开始移动时,鼠标定位在的某个位置上(最多两个方向)。可选值:{ top, left, right, bottom }.
初始:$('.selector').sortable({ cursorAt: 'top' });
获取:var cursorAt = $('.selector').sortable('option', 'cursorAt');
设置:$('.selector').sortable('option', 'cursorAt', 'top');

delay : Integer : 0
以毫秒为单位,设置延迟多久才激活排序动作。此参数可防止误点击。
初始:$('.selector').sortable({ delay: 500 });
获取:var delay = $('.selector').sortable('option', 'delay');
设置:$('.selector').sortable('option', 'delay', 500);

distance : Integer : 1
决定至少要在元素上面拖动多少像素后,才正式触发排序动作。
初始:$('.selector').sortable({ distance: 30 });
获取:var distance = $('.selector').sortable('option', 'distance');
设置:$('.selector').sortable('option', 'distance', 30);

dropOnEmpty : Boolean : true
是否允許拖拽到一個空的sortable对象中。
初始:$('.selector').sortable({ dropOnEmpty: false });
获取:var dropOnEmpty = $('.selector').sortable('option', 'dropOnEmpty');
设置:$('.selector').sortable('option', 'dropOnEmpty', false);

forceHelperSize : Boolean : false
If true, forces the helper to have a size.
初始:$('.selector').sortable({ forceHelperSize: true });
获取:var forceHelperSize = $('.selector').sortable('option', 'forceHelperSize');
设置:$('.selector').sortable('option', 'forceHelperSize', true);

forcePlaceholderSize : Boolean : false
If true, forces the placeholder to have a size.
初始:$('.selector').sortable({ forcePlaceholderSize: true });
获取:var forcePlaceholderSize = $('.selector').sortable('option', 'forcePlaceholderSize');
设置:$('.selector').sortable('option', 'forcePlaceholderSize', true);

grid : Array : false
将排序对象的item元素视为一个格子处理,每次移动都按一个格子大小移动,数组值:[x,y]
初始:$('.selector').sortable({ grid: [50, 20] });
获取:var grid = $('.selector').sortable('option', 'grid');
设置:$('.selector').sortable('option', 'grid', [50, 20]);

handle : Selector, Element : false
限制排序的动作只能在item元素中的某个元素开始。
初始:$('.selector').sortable({ handle: 'h2' });
获取:var handle = $('.selector').sortable('option', 'handle');
设置:$('.selector').sortable('option', 'handle', 'h2');

helper : String, Function : 'original'
设置是否在拖拽元素时,显示一个辅助的元素。可选值:'original', 'clone'
初始:$('.selector').sortable({ helper: 'clone' });
获取:var helper = $('.selector').sortable('option', 'helper');
设置:$('.selector').sortable('option', 'helper', 'clone');

items : Selector : '> *'
指定在排序对象中,哪些元素是可以进行拖拽排序的。
初始:$('.selector').sortable({ items: 'li' });
获取:var items = $('.selector').sortable('option', 'items');
设置:$('.selector').sortable('option', 'items', 'li');

opacity : Float : false
定义当排序时,辅助元素(helper)显示的透明度。
初始:$('.selector').sortable({ opacity: 0.6 });
获取:var opacity = $('.selector').sortable('option', 'opacity');
设置:$('.selector').sortable('option', 'opacity', 0.6);

placeholderType: StringDefault: false
设置当排序动作发生时,空白占位符的CSS样式。
初始:$('.selector').sortable({ placeholder: 'ui-state-highlight' });
获取:var placeholder = $('.selector').sortable('option', 'placeholder');
设置:$('.selector').sortable('option', 'placeholder', 'ui-state-highlight');

revert : Boolean : false
如果设置成true,则被拖拽的元素在返回新位置时,会有一个动画效果。
初始:$('.selector').sortable({ revert: true });
获取:var revert = $('.selector').sortable('option', 'revert');
设置:$('.selector').sortable('option', 'revert', true);

scroll : Boolean : true
如果设置成true,则元素被拖动到页面边缘时,会自动滚动。
初始:$('.selector').sortable({ scroll: false });
获取:var scroll = $('.selector').sortable('option', 'scroll');
设置:$('.selector').sortable('option', 'scroll', false);

scrollSensitivity : Integer : 20
设置当元素移动至边缘多少像素时,便开始滚动页面。
初始:$('.selector').sortable({ scrollSensitivity: 40 });
获取:var scrollSensitivity = $('.selector').sortable('option', 'scrollSensitivity');
设置:$('.selector').sortable('option', 'scrollSensitivity', 40);

scrollSpeed : Integer : 20
设置页面滚动的速度。
初始:$('.selector').sortable({ scrollSpeed: 40 });
获取:var scrollSpeed = $('.selector').sortable('option', 'scrollSpeed');
设置:$('.selector').sortable('option', 'scrollSpeed', 40);

tolerance : String : 'intersect'
设置当拖动元素越过其它元素多少时便对元素进行重新排序。可选值:'intersect', 'pointer'
intersect:至少重叠50%
pointer:鼠标指针重叠元素
初始:$('.selector').sortable({ tolerance: 'pointer' });
获取:var tolerance = $('.selector').sortable('option', 'tolerance');
设置:$('.selector').sortable('option', 'tolerance', 'pointer');

zIndex : Integer : 1000
设置在排序动作发生时,元素的z-index值。
初始:$('.selector').sortable({ zIndex: 5 });
获取:var zIndex = $('.selector').sortable('option', 'zIndex');
设置:$('.selector').sortable('option', 'zIndex', 5);


·事件

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) { ... });


·方法
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' )


排序后保存有两种方法,一是cookie,二是数据库配置文件等。
这个是cookie 的例子 大家可以参考 http://www.cnblogs.com/tianxiangbing/archive/2010/01/26/jquery_sortable.html

下面是数据库的部分代码 原作:
$(function() {
var show = $(".loader");
var orderlist = $(".orderlist");
var listleft = $("div[id = 'column_left']");
var listcenter = $("div[id = 'column_center']");
var listright = $("div[id = 'column_right']");
$( ".column" ).sortable({
opacity: 0.5,//拖动的透明度
revert: true, //缓冲效果
cursor: 'move', //拖动的时候鼠标样式
connectWith: ".column",
//开始用update 结果执行两次,浪费资源,古改成stop
//但是stop在元素没有改变位置的时候也会执行,
//用update其他js会有问题,^_^
stop: function(){
var new_order_left = []; //左栏布局
var new_order_center = [];//中栏布局
var new_order_right = [];//右栏布局
listleft.children(".portlet").each(function() {
new_order_left.push(this.title);
});
listcenter.children(".portlet").each(function() {
new_order_center.push(this.title);
});
listright.children(".portlet").each(function() {
new_order_right.push(this.title);
});
var newleftid = new_order_left.join(',');
var newcenterid = new_order_center.join(',');
var newrightid = new_order_right.join(',');
$.ajax({
type: "post",
url: jsonUrl, //服务端处理程序
data: { leftid: newleftid, centerid: newcenterid, rightid:newrightid}, //id:新的排列对应的ID,order:原排列顺序
// beforeSend: function() {
// show.html(" 正在更新");
// },
success: function(msg) {
//alert(msg);
show.html("");
}
});
}
});

SWFObject v1.5的对象结构

1 SWFObject v1.5的对象结构

deconcept
    util
        getRequestParameter(_2b) // 取得url参数value。_2b是URL的key。
    SWFObjectUtil
        getPlayerVersion() // 取得版本号对象。major.minor.rev。
        cleanupSWFs() // 清除页面上所有<OBJECT>元素。
    SWFObject(_1, id, w, h, _5, c, _7, _8, _9, _a)
                                   // _1: swf,指定SWF文件路径。
                                   // _id: id,<embed>或者<object>标签的id。
                                   // w: width,属性width。
                                   // h: height,属性height。
                                   // _5: version,flash版本,默认自动会去读取本地的flash插件版本的。
                                   // c: bgcolor,背景色。
                                   // _7: quality,品质(low, high, autolow, autohigh, best ) 。
                                   // _8: xiRedirectUrl
                                   // _9: redirectUrl
                                   // _a: url参数key
        useExpressInstall(_d) // 设置xiSWFPath, useExpressInstall属性
        setAttribute(_e, _f) // 设置属性attributes。_e是key,_f是value。
        getAttribute(_10) // 取得属性attributes中的值。_10是key。
        addParam(_l1, _l2) // 设置参数params。_l1是key,_l2是value。
        getParams() // 取得params。
        addVariable(_l3, _l4) // 设置变量variables。_13是key,_14是value。
        getVariable(_l5) // 取得变量variables中的值。
        getVariables() // 取得变量variables。
        getVariablePairs() // 取得变量variables的key=value对数组。
        getSWFHTML() // 返回flash嵌入的HTML
                     // 例如:
                     // <embed type="application/x-shockwave-flash"
                     // src="/amchart/amchart/amcolumn/amcolumn.swf"
                     // width="520" height="380"
                     // style="undefined"
                     // id="amcolumn" name="amcolumn"
                     // bgcolor="#FFFFFF"
                     // quality="high"
                     // flashvars="path=/amchar/amchar/amcolumn/&settings_file=amcolumn_settings.xml&data_file=amcolumn_data.txt&preloader_color=#000000"/>
        write(_20) // 写入flash插入的位置。_20可以是id的名称或者是一个dom结点。
    PlayerVersion(_29) // 创建版本号对象。
        versionIsValid(fv) // 验证flash插件的当前版本号是否兼容fv的版本号(大于等于)。

getQueryParamValue = deconcept.util.getRequestParameter;
FlashObject = deconcept.SWFObject;
SWFObject = deconcept.SWFObject;

2 数据文件
支持csv、xml格式。
csv实际上是一个文本文件,而非excel文件,所以,可以直接使用文本文件来命名。
每一列的数据采用“;”或“,”分隔都可以。
例如:
// amcolumn_data.txt
2003;2.5
2004;4.6
2005;5.8
2006;3.8
2007;4.8
2008;6.8
2009;7.8

3 配置文件
例如:
// amcolumn_settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings>
   <!-- chart config -->
   <data_type>csv</data_type>                                                     <!-- [xml] (xml / csv) -->
   <digits_after_decimal>2</digits_after_decimal>
   <legend>
      <enabled>false</enabled>
   </legend>
   <!-- plugin config -->  
   <plugins>
    <!-- value indicator plugin is suitable for line chart, column chart & xy chart -->
    <plugin file="/amchart/amchart/amcolumn/plugins/value_indicator.swf" position="above">      <!-- file should be located in "path" folder. position can be "behind" or "above". "behind" means that the plugin will be loaded behind graphs -->
      <chart_type>column</chart_type>                                             <!-- [line] (line / column / xy) this plugin can be used with line or with column chart -->
      <axis></axis>                                                               <!-- [left] (left / right / x / y) if used with line chat use left or right, if used with xy chart, use x or y -->
      <line_color>#000000</line_color>                                            <!-- [#BBBB00] (hex color code) -->
      <line_alpha></line_alpha>                                                   <!-- [100] (0 - 100) -->
      <text_color>#000000</text_color>                                            <!-- [settings.text_color] -->
      <text_size>13</text_size>                                                   <!-- [settings.tex_size] -->
      <precision>2</precision>                                                    <!-- [0] (Number) how many numbers after comma should be shown -->
    </plugin>
  </plugins>
</settings>

4 在HTML上显示
<body>
<!-- saved from url=(0013)about:internet -->
<!-- amcolumn script-->
 <div id="flashcontent">
  <strong>You need to upgrade your Flash Player</strong>
 </div>

 <script type="text/javascript">
  // <![CDATA[ 
  var so = new SWFObject("/amchart/amchart/amcolumn/amcolumn.swf", "amcolumn", "520", "380", "8", "#FFFFFF"); // 创建SWFObject对象
  so.addVariable("path", "/amchart/amchart/amcolumn/"); // 暂时不是很清楚,破解时用到了这个属性。既然,例子写了,我们也写好了。
  so.addVariable("settings_file", encodeURIComponent("amcolumn_settings.xml")); // 配置文件
  so.addVariable("data_file", encodeURIComponent("amcolumn_data.txt")); // 数据文件
  so.addVariable("preloader_color", "#000000"); // 加载时显示的颜色
  so.write("flashcontent"); // 在flashcontent位置写入flash插入的HTML
  // ]]>
 </script>
<!-- end of amcolumn script -->
</body>

5 破解amchart
没有破解的amchart显示的时候在左上角会出现“chart by amCharts.com”链接,表示是未注册版本,非常讨厌。
原理:网上看到的。
用SWF Decompiler软件加载swf文件,在Resources下找Action中的MainMoive,代码中有一段如下:
function checkKey(serial)
{
   var _l1 = com.amcharts.Utils.stripSymbols(serial, " ");
   _l1 = com.amcharts.Utils.stripSymbols(_l1, "/n");
   _l1 = com.amcharts.Utils.stripSymbols(_l1, "/r");
   _l1 = com.amcharts.Utils.stripSymbols(_l1, "/r/n");
   arr = _l1.split("-");
   if (Number(arr[2]) + Number(arr[3]) != 8645 || Number(arr[2].substr(1, 1)) - Number(arr[3].substr(2, 1)) != 2)
   {
       attachMovie("copyright_mc", "copyright_mc", 1001);
   } // end if
} // End of the function
这就是序列号的代码,再往下看
key_loader.loadVars(path + "amcharts_key.txt", this, "checkKey", false, "checkKey");
破解:
在swf目录下,新建文件amcharts_key.txt。
输入序列号内容如下:0000-0000-1422-7223。
保存后测试通过!真没想到他们会采用这么简单的加密方式!

注意:测试的时候发现一个问题,即使amcharts_key.txt正确放入SWF文件目录下,也有破解不成功的情况。
1)amcolumn, amline, ampie破解时跟so.addVariable("path", "");有关系。该属性设置错误破解不成功。
2)amstock似乎无法破解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值