列表數(shù)據(jù)拖拽排序

前言:很多時(shí)候我們都有這樣的一種需求:在一個(gè)數(shù)據(jù)列表中叹括,對(duì)數(shù)據(jù)進(jìn)行排序瀑晒,然后這個(gè)排序又希望用戶體驗(yàn)好一點(diǎn)绍坝,頁(yè)面不刷新,也不需要彈出修改數(shù)據(jù)的彈出層苔悦,直接在列表中拖拽數(shù)據(jù)實(shí)現(xiàn)排序轩褐。那么這樣的需求可以如何實(shí)現(xiàn)呢?這就需要用到前端的拖拽插件了玖详,前端拖拽插件有很多把介,這里選擇的是Sortable插件。

下載插件

Sortable是可以實(shí)現(xiàn)DOM元素拖拽效果的前端插件蟋座,它的包很小拗踢,簡(jiǎn)單易用,功能齊全蜈七,效果很好秒拔,它不依賴(lài)jQuery庫(kù),是使用原生JavaScript開(kāi)發(fā)的飒硅。最重要的是它可以讓我們完成列表數(shù)據(jù)拖拽排序的需求砂缩。

下載地址:https://github.com/RubaXa/Sortable
官方DEMO:http://rubaxa.github.io/Sortable/

開(kāi)始使用

在頁(yè)面初始化成功后,創(chuàng)建出Sortable對(duì)象三娩,然后傳入需要拖拽的DOM元素庵芭,該DOM元素應(yīng)該是一個(gè)列表,這樣雀监,該列表下的數(shù)據(jù)就能拖拽了:

$(function () {
        //給需要做拖拽排序的dom對(duì)象實(shí)例化出拖拽排序的對(duì)象
        var el = $("#items")[0];
        Sortable sortable = new Sortable(el);
})

完成拖拽排序

然后結(jié)合Sortable的其他屬性和方法双吆,調(diào)用后臺(tái)程序就能完成拖拽排序的需求。在初始化Sortable代碼的基礎(chǔ)上進(jìn)行改造会前,加上拖拽數(shù)據(jù)事件好乐,觸發(fā)了該事件就把拖拽后的數(shù)據(jù)傳到后臺(tái),然后由后臺(tái)程序完成數(shù)據(jù)重新排序:

//Sortable對(duì)象提取出來(lái)
var sortable;
    $(function () {
        //給需要做拖拽排序的dom對(duì)象實(shí)例化出拖拽排序的對(duì)象,并添加數(shù)據(jù)拖拽事件
        var el = $("#items")[0];
        sortable = new Sortable(el,{
            onUpdate:updateSort
        });
    })

    //更新數(shù)據(jù)排序方法
    function updateSort() {
        //調(diào)用Sortable對(duì)象的toArray方法瓦宜,該方法的作用看下面屬性和方法的詳細(xì)介紹
        var ids = sortable.toArray();
        $.ajax({
            url:"xxx",
            type:"POST",
            data:JSON.stringify(ids),
            contentType:"application/json",
            dataType:"json"
        })
    }

其他屬性和方法

屬性:

group:string or array

sort:boolean 定義是否列表單元是否可以在列表容器內(nèi)進(jìn)行拖拽排序蔚万;

delay:number 定義鼠標(biāo)選中列表單元可以開(kāi)始拖動(dòng)的延遲時(shí)間;

disabled:boolean 定義是否此sortable對(duì)象是否可用临庇,為true時(shí)sortable對(duì)象不能拖放排序等功能反璃,為false時(shí)為可以進(jìn)行排序,相當(dāng)于一個(gè)開(kāi)關(guān)假夺;

animation:number 單位:ms淮蜈,定義排序動(dòng)畫(huà)的時(shí)間;

handle:selector 格式為簡(jiǎn)單css選擇器的字符串已卷,使列表單元中符合選擇器的元素成為拖動(dòng)的手柄梧田,只有按住拖動(dòng)手柄才能使列表單元進(jìn)行拖動(dòng);

filter:selector 格式為簡(jiǎn)單css選擇器的字符串,定義哪些列表單元不能進(jìn)行拖放柿扣,可設(shè)置為多個(gè)選擇器肖方,中間用“,”分隔未状;

draggable:selector 格式為簡(jiǎn)單css選擇器的字符串俯画,定義哪些列表單元可以進(jìn)行拖放

ghostClass:selector 格式為簡(jiǎn)單css選擇器的字符串,當(dāng)拖動(dòng)列表單元時(shí)會(huì)生成一個(gè)副本作為影子單元來(lái)模擬被拖動(dòng)單元排序的情況司草,此配置項(xiàng)就是來(lái)給這個(gè)影子單元添加一個(gè)class艰垂,我們可以通過(guò)這種方式來(lái)給影子元素進(jìn)行編輯樣式;

chosenClass:selector 格式為簡(jiǎn)單css選擇器的字符串埋虹,當(dāng)選中列表單元時(shí)會(huì)給該單元增加一個(gè)class猜憎;

forceFallback:boolean 如果設(shè)置為true時(shí),將不使用原生的html5的拖放搔课,可以修改一些拖放中元素的樣式等胰柑;

fallbackClass:string 當(dāng)forceFallback設(shè)置為true時(shí),拖放過(guò)程中鼠標(biāo)附著單元的樣式爬泥;

scroll:boolean 默認(rèn)為true柬讨,當(dāng)排序的容器是個(gè)可滾動(dòng)的區(qū)域,拖放可以引起區(qū)域滾動(dòng)


事件:

onChoose:function 列表單元被選中的回調(diào)函數(shù)

onStart:function 列表單元拖動(dòng)開(kāi)始的回調(diào)函數(shù)

onEnd:function 列表單元拖放結(jié)束后的回調(diào)函數(shù)

onAdd:function 列表單元添加到本列表容器的回調(diào)函數(shù)

onUpdate:function 列表單元在列表容器中的排序發(fā)生變化后的回調(diào)函數(shù)

onRemove:function 列表元素移到另一個(gè)列表容器的回調(diào)函數(shù)

onFilter:function 試圖選中一個(gè)被filter過(guò)濾的列表單元的回調(diào)函數(shù)

onMove:function 當(dāng)移動(dòng)列表單元在一個(gè)列表容器中或者多個(gè)列表容器中的回調(diào)函數(shù)

onClone:function 當(dāng)創(chuàng)建一個(gè)列表單元副本的時(shí)候的回調(diào)函數(shù)


事件對(duì)象:

事件對(duì)象在各個(gè)函數(shù)中略有不同袍啡,可通過(guò)輸出對(duì)象查看對(duì)象的屬性踩官,下面簡(jiǎn)單列舉幾個(gè):

to:HTMLElement--移動(dòng)到列表容器

from:HTMLElement--來(lái)源的列表容器

item:HTMLElement--被移動(dòng)的列表單元

clone:HTMLElement--副本的列表單元

oldIndex:number/undefined--在列表容器中的原序號(hào)

newIndex:number/undefined--在列表容器中的新序號(hào)


方法

option(name[,value])

獲得或者設(shè)置項(xiàng)參數(shù),使用方法類(lèi)似于jQuery用法境输,沒(méi)有第二個(gè)參數(shù)為獲得option中第一個(gè)參數(shù)所對(duì)應(yīng)的值蔗牡,有第二個(gè)參數(shù)時(shí),將重新賦給第一個(gè)參數(shù)所對(duì)應(yīng)的值嗅剖;

toArray()

序列化可排序的列表單元的data-id(可通過(guò)配置項(xiàng)中dataIdAttr修改)放入一個(gè)數(shù)組辩越,并返回這個(gè)數(shù)組中

sort()

通過(guò)自定義列表單元的data-id的數(shù)組對(duì)列表單元進(jìn)行排序

save()

destroy()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市信粮,隨后出現(xiàn)的幾起案子黔攒,更是在濱河造成了極大的恐慌,老刑警劉巖蒋院,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異莲绰,居然都是意外死亡欺旧,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)蛤签,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辞友,“玉大人,你說(shuō)我怎么就攤上這事〕屏” “怎么了留拾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)鲫尊。 經(jīng)常有香客問(wèn)我痴柔,道長(zhǎng),這世上最難降的妖魔是什么疫向? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任咳蔚,我火速辦了婚禮,結(jié)果婚禮上搔驼,老公的妹妹穿的比我還像新娘谈火。我一直安慰自己,他們只是感情好舌涨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布糯耍。 她就那樣靜靜地躺著,像睡著了一般囊嘉。 火紅的嫁衣襯著肌膚如雪温技。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天哗伯,我揣著相機(jī)與錄音荒揣,去河邊找鬼。 笑死焊刹,一個(gè)胖子當(dāng)著我的面吹牛系任,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播虐块,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼俩滥,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了贺奠?” 一聲冷哼從身側(cè)響起霜旧,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎儡率,沒(méi)想到半個(gè)月后挂据,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡儿普,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年崎逃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片眉孩。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡个绍,死狀恐怖勒葱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情巴柿,我是刑警寧澤凛虽,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站广恢,受9級(jí)特大地震影響凯旋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜袁波,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一瓦阐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧篷牌,春花似錦睡蟋、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至夭苗,卻和暖如春信卡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背题造。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工傍菇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人界赔。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓丢习,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親淮悼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子咐低,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,743評(píng)論 25 707
  • 用到的組件 1、通過(guò)CocoaPods安裝 2袜腥、第三方類(lèi)庫(kù)安裝 3见擦、第三方服務(wù) 友盟社會(huì)化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 14,603評(píng)論 1 180
  • 成功的先決條件就是持續(xù)不斷,不厭其煩地努力羹令。雖然聽(tīng)起來(lái)好像很簡(jiǎn)單鲤屡,但比別人更真誠(chéng)努力的人,的確是可以成功的福侈,...
    周立zhouli閱讀 442評(píng)論 0 1
  • 一年一度酒来,每當(dāng)春天到來(lái)的時(shí)候,它總是這樣飄呀飄癌刽,默默地役首、不動(dòng)聲色但卻是盡情地?fù)崦趪?yán)冬中悄然沉睡的大地,給其溫暖...
    紫螳螂閱讀 391評(píng)論 0 1
  • 夜晚显拜,韓少遲遲沒(méi)有回來(lái)衡奥。雨欣睡不著便到外面的花園看夜色,聽(tīng)到汽車(chē)聲響趕緊跑過(guò)去远荠,見(jiàn)韓少獨(dú)自開(kāi)車(chē)回來(lái)“來(lái)矮固,我?guī)湍隳冒?..
    幽蘭馨雨閱讀 271評(píng)論 0 0