Քաշել և թողնել տեխնոլոգիայի անվանումը թարգմանվում է որպես. Drag-n-Drop տեխնիկան՝ օգտագործելով jQuery: Droppable փոխազդեցության կարգավորում

Քաշել և թողնել հավելվածների միջև տվյալների փոխանակման եղանակներից մեկն է: Փոխանակման այս մեթոդը օգտագործվում է բազմաթիվ ծրագրային հավելվածների կողմից: Օրինակ, շատ հաճախ ֆայլերը և թղթապանակները տեղափոխվում են այս ճանապարհով:

Վիզուալ բաղադրիչի գրադարանը - VCL-ն իրականացնում է Drag&Drop-ի իր սեփական տարբերակը, տեխնոլոգիա, որն ապահովում է ցանկացած հսկիչ տարրերի ընդունում և փոխանցում նույն ձևով: Այս ներքին օգտագործման դեպքում VCL-ը չի մուտք գործում օպերացիոն համակարգ, թեև կապի համար տարբեր հավելվածներպետք է օգտագործել Windows API-ի համապատասխան գործառույթները:

Օգտագործողը սեղմում է ձախ կոճակըմկնիկը, կարող է հսկիչ տարրը (աղբյուրի օբյեկտ) քաշել մեկ այլ տարրի (նպատակակետի օբյեկտ) վրա։ Քաշելու և թողնելու պահերին ստեղծվում են իրադարձություններ, որոնք ծրագիրը պետք է մշակի (իրադարձության ընդունիչը այն տարրն է, որի վրա գտնվում է մկնիկի կուրսորը): Բաղադրիչների DragMode հատկությունը պատասխանատու է տվյալների փոխանակման գործընթացում նրանց մասնակցության համար:

DragMode=dmAutomatic- իրադարձությունները գործարկվում են ավտոմատ կերպով, ծրագրավորողը գրում է միայն համապատասխան իրադարձությունների մշակողների կոդերը:

DragMode=dmManual-ծրագրավորողն ինքը պետք է կազմակերպի բոլոր զանգերը։

Իրադարձությունների քաշում

OnDragOver իրադարձությունտեղի է ունենում, երբ մկնիկի կուրսորը շարժվում է նպատակակետ օբյեկտի վրայով, ինչպես նաև երբ այս օբյեկտի կոճակը բաց է թողնվում:

Իրադարձության պարամետրեր.

    Ուղարկող - ստացող օբյեկտ (կուրսորը դրա վերևում է);

    Աղբյուր - աղբյուր օբյեկտ;

    X,Y - մկնիկի կոորդինատները Sender օբյեկտի հաճախորդի տարածքի համակարգում;

    Պետական ​​վիճակ (ունի dsDragEnter երեք արժեքներից մեկը. մկնիկի կուրսորը հայտնվել է տարրի վրայով; dsDragMove կուրսորը շարժվում է տարրի վրայով; dsDragLeave - կուրսորը թողել է տարրը կամ կոճակը բաց է թողնվել տարրի վրայով):

    Ընդունելը բուլյան փոփոխական է: Այս փոփոխականում մշակողը պետք է վերադարձնի Source օբյեկտն ընդունելու կամ չընդունելու իր որոշումը:

Օրինակ, Label(Name=Label1) դասի բաղադրիչը պետք է ընդունի միայն Shape (երկրաչափական ձևեր) դասի բաղադրիչներ, այնուհետև դրա մշակիչը կպարունակի շարժական աղբյուրի օբյեկտի ստուգում (Աղբյուր).

void __fastcall TForm1::Label1DragOver(TObject *Sender, TObject *Source,

int X, int Y, TDragState վիճակ, bool & Ընդունել)

Accept=Source->ClassNameIs("TShape");

OnDragDrop իրադարձությունտեղի է ունենում, երբ մկնիկի ձախ կոճակը բացվում է այն տարրի վրա, որը պատրաստ է ստանալու: Դրա ուղարկող, աղբյուր, X և Y պարամետրերն ունեն նույն նշանակությունը, ինչ նախորդ իրադարձությունը: Այս մշակողի բովանդակությունը կախված է նրանից, թե ինչ գործառույթներ է ծրագրավորողը թույլ տալիս օգտվողին կատարել քաշել և թողնել: Սա կարող է լինել օբյեկտների գտնվելու վայրի փոփոխություն, տեղեկատվության փոխանակում և այլն:

Հետևյալ օրինակում առարկաների ֆիզիկական շարժում չկա. Label1 բաղադրիչը ցուցիչ է ստանում դեպի տեղափոխված օբյեկտը (երկրաչափական պատկեր) և կարդում է հատկությունների արժեքները (Բարձրություն, Լայնություն)՝ նկարի պարագիծը հաշվարկելու համար: Հաշվարկի արդյունքը տեղադրվում է Label1-> Caption-ում:

void __fastcall TForm1::Label1DragDrop(TObject *Sender,

TObject *Աղբյուր, միջերես X, միջերես Y)

float p, pi=3.14; int w, h, r, D;

if (String(Source->ClassName())=="TShape")

h=((Tshape *)Աղբյուր)->Բարձրություն;

w= ((Tshape *)Աղբյուր)->Լայնություն ;

D=w; եթե (D > h) D = h;

անջատիչ ((TShape *) Աղբյուր) -> Ձև)

(պատյան strRrecangle:

Label2->Caption = "Rectangle";

Label2->Caption = «Քառակուսի»;

Label2->Caption = «Շրջանակ»;

Label2->Caption = "Ellipse";

p=pi*(3*(w+h)/4-sqrt(w*h)/2);

պատյան strRoundRect:

Label2->Caption = «Կլորացված

ուղղանկյուն»;

r=(D-((TShape*)Աղբյուր)->Գրիչ->

p=2*(w+h)-8*r+2*pi*r;

գործը strRoundSquare:

Label2->Caption="Կլորացված

քառակուսի»;

r=(D-((TShape*)Աղբյուր)->Գրիչ->

p=4*D-8*r+2*pi*r;

p=p/(Form1->PixelsPerInch/2.54);

Label1->Caption = FloatToStr(p);

Երբ քաշելու գործընթացը ավարտվում է, անկախ դրա արդյունքից, սկզբնական օբյեկտը ստանում է OnEndDrag իրադարձություն. Դրա պարամետրերն են.

    Ուղարկող - աղբյուրի օբյեկտի ցուցիչ;

    Թիրախ - թիրախային օբյեկտի ցուցիչ;

    X, Y - կուրսորի կոորդինատները:

Հետևյալ օրինակում փաթաթող բաղադրիչը Shape1 սովորում է թիրախային օբյեկտի անունը (եթե օբյեկտը չի ընդունվում, NULL է փոխանցվում).

void __fastcall TForm1::Shape1EndDrag(TObject *Sender, TObject *Target,

եթե (Թիրախ != NULL)

Label2->Caption =(AnsiString) ((TComponent *) Target)->Անուն;

Երկար ժամանակ JavaScript ֆունկցիաները օգտագործվում էին Drag&Drop ֆունկցիան ստեղծելու համար, սակայն բրաուզերները միշտ չէ, որ կարողացել են ճիշտ ցուցադրել արդյունքը։ HTML 5-ն ունի մի քիչ JavaScript-ի օգնությամբ Drag&Drop-ը խելացիորեն աջակցելու միջոց: Այս հոդվածը մանրամասնում է HTML 5-ում Drag&Drop-ի օգտագործման տեսողական օրինակ:

Քաշել և թողնել իրադարձությունները

Հետևյալը «Քաշել և թողնել» իրադարձություններն են, որոնք կարող եք օգտագործել՝ վերահսկելու քաշել և թողնել գործընթացը.
  • dragStart. օգտատերը սկսում է տարրը քաշել:
  • dragEnter. Քաշվող տարրը հասնում է վերջնական տարրին:
  • dragOver. քաշելիս մկնիկի կուրսորը գտնվում է տարրի վրայով:
  • dragLeave. մկնիկի կուրսորը թողնում է քաշված տարրը:
  • քաշել. կուրսորը շարժվում է քաշելիս:
  • անկում. տեղի է ունենում տարրի անկում:
  • dragEnd. օգտատերը արձակում է մկնիկի կուրսորը քաշելիս:

Տվյալների փոխանցման օբյեկտ

Այստեղ տեղի է ունենում քաշել և թողնել գործընթացը: Ամենակարևոր պարամետրերը.
  • dataTransfer.effectAllowed=value. Վերադարձնում է հասանելի գործողության տեսակը՝ ոչ մեկը, պատճենել, պատճենելՀղում, copyMove, հղում, հղումՏեղափոխել, տեղափոխել, բոլորը կամ չնախաստորագրված:
  • dataTransfer.setData (ձևաչափ, տվյալներ). ավելացնում է տվյալներ ցանկալի ձևաչափով:
  • dataTransfer.clearData (ֆորմատ). մաքրում է տվյալները:
  • dataTransfer.setDragImage(տարր, x, y): սահմանում է պատկերը, որը պետք է քաշվի կուրսորի կոորդինատներում (0, 0 - վերին ձախ անկյուն):
  • data = dataTransfer.getData (ֆորմատ). վերադարձնում է տվյալները:

Քաշել և թողնել օրինակ

Հիմա եկեք նայենք Drag&Drop-ի օգտագործման տեսողական պարզ օրինակին, որտեղ երկու փոքրիկ կապույտ դիվիզները կարող են տեղափոխվել մեծ կարմիրի վրա, ինչպես նաև վերադարձնել իրենց սկզբնական տեղը:
Սկսեք քաշել օբյեկտը
Առաջին հերթին, դուք պետք է ստեղծեք HTML նշում բլոկների համար՝ ավելացնելով draggable հատկանիշը.


Այնուհետև սահմանեք JavaScript-ի մեկնարկի գործընթացի գործառույթը.

dragStart(ev) ֆունկցիան ( ev.dataTransfer.effectAllowed="move"; ev.dataTransfer.setData("Text", ev.target.getAttribute("id")); ev.dataTransfer.setDragImage(ev.target,100,100) վերադարձ ճշմարիտ;)
Առաջին տողում նշվում է քաշել և թողնելու հնարավոր տեսակը՝ տեղափոխել, երկրորդում՝ սահմանում է գործընթացի տվյալները՝ տեսակը (Text) և ID: Երրորդ տողում setDragImage-ը որոշում է կուրսորի դիրքը, այս դեպքում՝ 200x200 պիքսել քառակուսու մեջտեղում։

Ավարտեք օբյեկտը քաշելը
Ձեզ հարկավոր է երեք իրադարձություն սահմանել՝ dragEnter, dragOver և drop.


Բացի այդ, մենք պետք է ավելացնենք JavaScript գործառույթները՝ ձգելու գործընթացը ավարտելու համար՝ որոշելու, թե ինչ պետք է տեղի ունենա տարրերի հետ, երբ կուրսորը թողարկվի.

ֆունկցիա dragEnter(ev) ( event.preventDefault(); return true; ) ֆունկցիա dragOver(ev) ( event.preventDefault();)

Սրանում պարզ օրինակդրված են միայն հիմնական գործողությունները, բայց կարող են ավելացվել մյուսները՝ փոխելով ֆոնի գույնը, ավելացնելով տեքստ և այլն: Հաջորդը եզրափակիչ փուլն է։ Ահա, որտեղ դուք սահմանում եք վերջի քաշման գործողությունը.

Ֆունկցիան dragDrop(ev) ( var data = ev.dataTransfer.getData («Տեքստ»); ev.target.appendChild(document.getElementById(տվյալներ)); ev.stopPropagation(); վերադարձ կեղծ; )
Ինչպես տեսնում եք օրինակից, կապույտ բլոկները քաշելուց հետո կարող են վերադարձվել իրենց սկզբնական տեղը: Բարեբախտաբար, դա շատ հեշտ է անել: Բոլոր գործառույթները հայտարարված են, մնում է ավելացնել հետևյալ կոդը.

Եզրակացություն

Շատ Drag&Drop լուծումներ ստեղծվել են JavaScript գրադարանների միջոցով, և դրանք հաճախ ավելի հեշտ են օգտագործել, քան նկարագրված օրինակը: Այնուամենայնիվ, ամենայն հավանականությամբ, ապագայում HTML5 & JavaScript-ի մի խումբ ավելի ու ավելի կօգտագործվի:

Տեխնոլոգիաների օգտագործումը քաշել և թողնել (քաշել և թողնել) թույլ է տալիս օգտվողին տեղափոխել տարբեր օբյեկտներ մեկից մյուսը, օրինակ՝ մի ցուցակի տարրերը մյուսը: Դա անելու համար հարկավոր է օգտագործել երկու հսկիչ՝ լվացարան և աղբյուր: Ստացողն այն օբյեկտն է, որը կստանա սկզբնական օբյեկտը (շարժական օբյեկտ):

Իրադարձությունները, որոնք տեղի են ունենում օբյեկտների շարժման ժամանակ, թվարկված են ստորև՝ ըստ դրանց տեղի ունենալու հերթականության:

OnStartDrag(տեսակ TStartDragEvent) - ստեղծվել է աղբյուրի օբյեկտի կողմից գործողության սկզբում: Իրադարձությունների մշակողին փոխանցված պարամետրեր՝ DragObject ստացողի օբյեկտ (TDragObject տեսակ), Աղբյուրի օբյեկտ (TObject տեսակ):

OnDragOver(տեսակ TDragOverEvent) - ստեղծում է թիրախային օբյեկտ, երբ դրա վերևում տեղադրվում է լողացող օբյեկտ: Միջոցառումների մշակողին փոխանցված պարամետրեր. Ուղարկողի ստացողի օբյեկտ (TObject տեսակ), Աղբյուրի աղբյուրի օբյեկտ (TObject տեսակ), վիճակի շարժման վիճակ (TDragState տեսակ), X և Y (ամբողջ թվի տեսակ) - մկնիկի ցուցիչի ընթացիկ կոորդինատները, Ընդունել (բուլյան տիպը): ) տեղափոխման գործողության հաստատման նշան. Շարժման վիճակը պարզ է դարձնում, թե արդյոք տեղափոխվող առարկան գտնվում է ընդունիչի տարածքում, շարժվում է, թե ոչ: Անցած պարամետրերը թույլ են տալիս ընդունող օբյեկտին ընդունել կամ մերժել աղբյուրի օբյեկտը: Ընդունել պարամետրը դրված է «Փորձել», եթե տեղափոխման գործողությունն ընդունված է, «Սխալ»՝ հակառակ դեպքում:

onDragDrop (տեսակ TDragDropEvent) - Բարձրացվում է նպատակակետ օբյեկտի կողմից, երբ քաշված օբյեկտը գցվում է դրա վրա: Իրադարձությունների մշակողին փոխանցվում են մկնիկի ցուցիչի, Ուղարկողի ստացողի օբյեկտի (TObject տեսակ) և սկզբնական Source շարժման օբյեկտի (TObject տեսակ) ընթացիկ կոորդինատները:

onEndDrag (տեսակ EndDragEvent) - Բարձրացվում է, երբ քաշում գործողությունն ավարտվում է: Այն կետի X և Y կոորդինատները, որտեղ ուղարկող աղբյուրի օբյեկտը և թիրախ ստացողի օբյեկտը փոխանցվում են իրադարձությունների մշակողին:

«Drag and drop» ստեղծելու համար բավական է իրականացնել երկու իրադարձություն՝ OnDragDrop և OnDragOver՝ DragMode հատկությամբ dmAutomatic: Հակառակ դեպքում, շարժման գործողության սկիզբը՝ BeginDrag մեթոդը, պետք է կոդավորվի ծրագրավորողի կողմից:

Նյութը համախմբելու համար մենք կստեղծենք հետևյալ հավելվածը. Տեղադրեք վահանակի բաղադրիչը ձևաթղթի վրա: Սահմանեք Object Inspector-ի DragMode հատկությունը dmAutomatic: Ընտրեք ձևի օբյեկտը և օգտագործեք Object Inspector՝ հետևյալ իրադարձությունները ստեղծելու համար.

Ընթացակարգ TForm1.FormDragOver(Ուղարկող, Աղբյուր՝ TObject; X, Y: Ամբողջ թիվ; Վիճակ՝ TDragState; var Ընդունել՝ Բուլյան); սկսել, եթե Աղբյուր = Panel1, ապա Ընդունել: = Ճիշտ է, այլ Ընդունել: = Սխալ; վերջ; ընթացակարգ TForm1.FormDragDrop(Ուղարկող, Աղբյուր՝ TObject; X, Y: Ամբողջ թիվ); startPanel1.Left:=X; Panel1.Top:=Y; վերջ;

Այժմ, գործարկելով հավելվածը և սեղմելով մկնիկի կոճակը վահանակի վրա, մենք կարող ենք վահանակի օբյեկտը տեղափոխել ամբողջ ձևով:

Եզրակացություն՝ մենք ծանոթացանք տեխնոլոգիային քաշել և թողնել(քաշել և թողնել) և օգտագործել այն գործնականում:

182

Այս օրինակում մենք ընտրում ենք div տարր և այն դարձնում շարժական՝ զանգահարելով դրա վրա draggable() մեթոդը. Ինչպես ցույց է տրված ստորև նկարում, բացված փաստաթղթում տարրը վերցնում է իր սովորական դիրքը, բայց դրանից հետո այն կարելի է տեղափոխել մկնիկի ցուցիչով դիտարկիչի պատուհանի ցանկացած վայր.

Քաշել և թողնել ֆունկցիան ինքնին օգտակար է, բայց այն նույնիսկ ավելի օգտակար է, երբ օգտագործվում է Droppable փոխազդեցության հետ միասին, որը նկարագրված է հաջորդիվ:

Քաշվող փոխազդեցությունն իրականացվում է բացառապես հատուկ HTML նշագրման և CSS ոճերի օգտագործման միջոցով: Սա նշանակում է, որ այս ֆունկցիոնալությունը կաշխատի գրեթե ցանկացած բրաուզերում, սակայն դրանով օժտված տարրերը չեն կարողանա աշխատել նմանատիպ բնիկ քաշել և թողնել սարքերի հետ: օպերացիոն համակարգեր.

HTML5 հատկորոշմամբ սահմանված «քաշել և թողնել» գործողությունները սովորաբար իրականացվում են օպերացիոն համակարգի բնիկ մեխանիզմների միջոցով: Եթե ​​դուք օգտագործում եք jQuery UI-ի քաշել և թողնել մեխանիզմը, ապա ավելի լավ է անջատել HTML5 համարժեքները՝ կոնֆլիկտներից խուսափելու համար: Դա անելու համար դրեք փաստաթղթի հիմնական տարրի draggable հատկանիշը false-ի:

Քաշվող փոխազդեցության հարմարեցում

Կան բազմաթիվ հարմարեցման տարբերակներ Քաշվող փոխազդեցության համար: Մեծ մասը կարևոր հատկություններ, որոնք ընդգրկված են հետևյալ բաժիններում, ներկայացված են ստորև բերված աղյուսակում.

Քաշվող փոխազդեցության հատկություններ
Սեփականություն Նկարագրություն
առանցք Սահմանափակում է շարժումը որոշակի ուղղություններով: Նախնական արժեքը false է, ինչը նշանակում է, որ սահմանափակումներ չկան, բայց կարող եք նաև նշել «x» արժեքը (տեղափոխվել միայն x առանցքի երկայնքով) կամ «y» (տեղափոխվել միայն y առանցքի երկայնքով)
զսպում Սահմանափակում է լողացող տարրի գտնվելու վայրը էկրանի որոշակի տարածքով: Աջակցվող արժեքների տեսակները նկարագրված են ստորև բերված աղյուսակում՝ համապատասխան օրինակով: Նախնական արժեքը կեղծ է, դա նշանակում է, որ սահմանափակումներ չկան
ուշացում Հատկանշում է, թե որքան ժամանակ է տարրը պետք քաշվի, նախքան այն շարժվի: Լռելյայն արժեքը 0 է, ինչը նշանակում է, որ ուշացում չկա
հեռավորությունը Նշում է այն հեռավորությունը, որը օգտվողը պետք է քաշի տարրն իր սկզբնական դիրքից, նախքան այն իրականում շարժվելը: Նախնական արժեքը 1 պիքսել է
ցանց Ստիպում է տեղափոխված տարրի միացումը ցանցի բջիջներին: Նախնական արժեքը false է, ինչը նշանակում է, որ պարտադիր չէ

Շարժման ուղղությունների սահմանափակում

Կան մի քանի եղանակներ, որոնցով դուք կարող եք սահմանափակել տարրի շարժումը որոշակի ուղղություններով: Դրանցից առաջինը առանցքի տարբերակի օգտագործումն է, որը թույլ է տալիս սահմանափակել շարժման ուղղությունը X կամ Y առանցքի վրա: Օրինակը ներկայացված է ստորև.

...

Քաշեք ուղղահայաց
Քաշեք հորիզոնական


Գործարկել օրինակ

Այս օրինակում մենք սահմանում ենք երկու div տարր, ընտրում դրանք jQuery-ով և կանչում draggable() մեթոդը։ Այս մեթոդին փոխանցվում է մի օբյեկտ, որն ի սկզբանե սահմանափակում է երկու div-ները շարժվել x-ուղղությամբ: Այնուհետև կիրառելով jQuery filter() մեթոդը, մենք կարող ենք ընտրել dragV տարրը առանց jQuery-ի հետ նորից փնտրելու ամբողջ փաստաթղթում և սահմանել այն մեկ այլ թույլատրված շարժման ուղղություն՝ Y առանցքի երկայնքով: Այսպիսով, մենք ստանում ենք փաստաթուղթ, որում մեկ div տարրը կարող է քաշվել միայն ուղղահայաց ուղղությամբ, իսկ մյուսը՝ միայն հորիզոնական ուղղությամբ: Արդյունքը ցույց է տրված նկարում.

Տարրը տեղափոխելու համար թույլատրելի տարածքի սահմանափակում

Կարող եք նաև սահմանափակել էկրանի այն տարածքը, որտեղ կարող եք տարր քաշել: Դրա համար օգտագործվում է զսպման տարբերակը: Արժեքի ձևաչափերը, որոնք կարող են նշվել այս տարբերակում, նկարագրված են ստորև բերված աղյուսակում.

Ստորև ներկայացված է զսպման տարբերակի օգտագործման օրինակ.

...

Քաշեք հորիզոնական
Քաշեք ծնողի ներսում


Գործարկել օրինակ

Այս օրինակում երկու տարրերն էլ սահմանափակված են տեղաշարժվելու համար, որպեսզի դրանք կարողանան քաշվել միայն մայր տարրի ներսում, որը ֆիքսված չափի div տարր է: Լողացող div-ներից մեկն ունի լրացուցիչ սահմանափակում՝ օգտագործելով առանցքի տարբերակը, որ այն կարող է միայն հորիզոնական շարժվել մայր տարրի ներսում: Արդյունքը պատկերված է նկարում.

Տարրը ցանցի բջիջներ տեղափոխելու ունակության սահմանափակում

Ցանցային տարբերակը թույլ է տալիս սահմանել տեղափոխված տարրի կապը ցանցի բջիջներին: Այս տարբերակը ընդունում է երկու տարրերից բաղկացած զանգված, որը նշում է ցանցի բջիջների լայնությունը և բարձրությունը պիքսելներով: Ցանցային տարբերակի օգտագործման օրինակը ներկայացված է ստորև.

...

քաշել ինձ


Գործարկել օրինակ

Այս օրինակում ցանցը սահմանվել է 100 պիքսել լայնությամբ և 50 պիքսել բարձրությամբ: Երբ տարր եք քաշում, այն «ցատկում» է մի (անտեսանելի) բջիջից մյուսը։ Կտրուկի էֆեկտը հիանալի օգտագործման դեպք է փոխազդեցության ֆունկցիոնալության համար, սակայն այն դժվար է փոխանցել էկրանի կադրերով:

Դուք կարող եք ստեղծել ճեղքման էֆեկտ միայն մեկ ուղղությամբ՝ ազատ շարժման առանցքը դնելով 1-ի: Օրինակ, եթե ցանցի տարբերակը սահմանեք , ապա տարրը կկտրվի մինչև 100px լայն ցանցի բջիջներ հորիզոնական շարժվելիս, բայց այն ազատորեն կշարժվի ուղղահայաց: .

Ճամփորդության հետաձգում

Կան երկու տարբերակ, որոնք թույլ են տալիս հետաձգել լողացող տարրի քաշումը: Հետաձգման տարբերակով դուք կարող եք միլիվայրկյաններով սահմանել այն ժամանակը, որ օգտագործողը պետք է քաշի մկնիկի ցուցիչը նախքան տարրը իրականում տեղափոխվի: Մեկ այլ տեսակի ուշացում տրամադրվում է հեռավորության ընտրանքով, որը սահմանում է հեռավորությունը պիքսելներով, որ օգտագործողը պետք է քաշի մկնիկի ցուցիչը նախքան տարրը հետևի դրան:

Երկու կարգավորումների օգտագործման օրինակը ներկայացված է ստորև.

...

Արգելափակել ժամանակի ուշացումով
Արգելափակել նվազագույն հեռավորությամբ


Գործարկել օրինակ

Այս օրինակում կան երկու լողացող տարր, որոնցից մեկում հետաձգվում է հետաձգման տարբերակը, իսկ մյուսը՝ հեռավորության տարբերակով։

Հետաձգման տարբերակով նշված ուշացման դեպքում օգտատերը պետք է որոշակի ժամանակ քաշի, մինչև տարրն իրականում տեղափոխի: AT այս օրինակըայս ընդմիջման տևողությունը 1000 ms է: Այս ընթացքում մկնիկը տեղափոխել պարտադիր չէ, բայց մկնիկի կոճակը պետք է սեղմված մնա ամբողջ ձգձգման ժամանակահատվածում, որից հետո տարրը կարելի է տեղափոխել՝ շարժելով մկնիկը։ Հետաձգման ժամանակը լրանալուց հետո տեղափոխվող տարրը կհայտնվի մկնիկի ցուցիչի դիրքում՝ հաշվի առնելով ցանցի, տարածաշրջանի և առանցքի տարբերակների կողմից նախկինում քննարկված սահմանափակումները:

Հեռավորության տարբերակը նման ազդեցություն ունի, բայց այս դեպքում օգտագործողը պետք է մկնիկի ցուցիչը քաշի առնվազն նշված թվով պիքսելներ տարրի մեկնարկային վայրից ցանկացած ուղղությամբ: Այնուհետև տեղափոխվող տարրը ցատկելու է ցուցիչի ներկայիս վայրը:

Եթե ​​դուք կիրառեք երկու կարգավորումները նույն տարրի վրա, ապա տեղափոխվող տարրը չի շարժվի այնքան ժամանակ, քանի դեռ չեն բավարարվել հետաձգման երկու չափանիշները, այսինքն. մինչև տարրը քաշելու փորձը տևի նշված ժամանակահատվածում և մինչև մկնիկի ցուցիչը տեղափոխի նշված թվով պիքսելներ:

Քաշվող փոխազդեցության մեթոդների օգտագործումը

Քաշվող փոխազդեցության համար սահմանված բոլոր մեթոդները հիմնական մեթոդների շարքի մի մասն են, որոնք դուք արդեն տեսել եք վիդջեթներում: Քաշվող փոխազդեցությանը հատուկ մեթոդներ չեն տրամադրվում, ուստի մենք դրանք մանրամասն չենք անդրադառնա: Հասանելի մեթոդների ցանկը ներկայացված է ստորև բերված աղյուսակում.

Քաշվող փոխազդեցության իրադարձությունների օգտագործումը

Քաշվող փոխազդեցությունն աջակցում է իրադարձությունների պարզ շարքին, որոնք ծանուցում են, երբ տարրը քաշվում է: Այս իրադարձությունները նկարագրված են ստորև բերված աղյուսակում.

Ինչպես վիդջեթների իրադարձությունների դեպքում, այս իրադարձություններին նույնպես կարելի է արձագանքել: Ստորև ներկայացված է մեկնարկի և դադարեցման իրադարձությունների կառավարման օրինակ.

...

քաշել ինձ


Գործարկել օրինակ

Այս օրինակը օգտագործում է մեկնարկի և դադարեցման իրադարձությունները՝ տարրի տեքստային բովանդակությունը փոխելու համար քաշելու գործընթացում: Այս առավելությունը գալիս է նրանից, որ Draggable-ի փոխազդեցությունն ամբողջությամբ իրականացվում է HTML-ի և CSS-ի միջոցով. դուք կարող եք օգտագործել jQuery՝ փոխելով քաշվող տարրի վիճակը նույնիսկ այն ժամանակ, երբ այն շարժվում է էկրանով:

Օգտագործելով Droppable փոխազդեցությունը

Որոշ իրավիճակներում միայն տարրը քաշելը կարող է բավարար լինել, բայց այն առավել օգտակար է, երբ օգտագործվում է Droppable փոխազդեցության հետ միասին:

Տարրերը, որոնց վրա կիրառվել է Droppable փոխազդեցությունը (ընդունող տարրեր), ստանում են Draggable փոխազդեցությամբ ստեղծված droppable տարրեր ընդունելու ունակություն:

Ստացող տարրերը ստեղծվում են dropable() մեթոդը, բայց օգտակար ֆունկցիոնալություն ստանալու համար ձեզ հարկավոր է ստեղծել իրադարձությունների մշակիչներ այս տեսակի փոխազդեցության համար սահմանվածներից: Հասանելի իրադարձությունները ներկայացված են ստորև բերված աղյուսակում.

Droppable փոխազդեցության իրադարձություններ
Իրադարձություն Նկարագրություն
ստեղծել Առաջանում է, երբ Droppable փոխազդեցությունը կիրառվում է տարրի վրա
ակտիվացնել Դա տեղի է ունենում, երբ օգտվողը սկսում է քաշել լողացող տարրը
ապաակտիվացնել Դա տեղի է ունենում, երբ օգտվողը դադարում է քաշել լողացող տարրը
ավարտվել է Առաջանում է, երբ օգտատերը լողացող տարրը քաշում է ընդունող տարրի վրայով (սակայն ենթադրելով, որ մկնիկի կոճակը դեռ ազատված չէ)
դուրս Առաջանում է, երբ օգտվողը լողացող տարրը քաշում է ընդունող տարրից դուրս
անկում Առաջանում է, երբ օգտագործողը լողացող տարր է թողնում ընդունող տարրի վրա

Ստորև բերված է պարզ ստացող տարրի ստեղծման օրինակ, որն ունի մեկ կաթիլ իրադարձությունների մշակիչ.

...

հեռանալ այստեղից
քաշել ինձ


Գործարկել օրինակ

Այս օրինակում փաստաթղթին ավելացվում է div տարր, որի տեքստի բովանդակությունը ներկայացված է «Թողիր այստեղ» տողով։ Մենք ընտրում ենք այս տարրը՝ օգտագործելով jQuery և կանչում droppable() մեթոդը՝ փոխանցելով այն կարգավորումների օբյեկտ, որը սահմանում է կարգավորիչ՝ drop-ի իրադարձության համար: Այս իրադարձության պատասխանը լողացող տարրի տեքստը փոխելն է՝ օգտագործելով text() մեթոդը։

Այս օրինակում ստեղծված «քաշել և թողնել» ինտերակտիվ փորձը ամենապարզն է, բայց այն հնարավորությունները բացատրելու համար օգտակար ենթատեքստ է տալիս: համատեղ աշխատանքՔաշվող և գցվող փոխազդեցություններ: Էլեմենտները քաշելու և թողնելու գործընթացի տարբեր փուլերը պատկերված են նկարում.

Այս ամենը շատ պարզ է թվում։ Մենք քաշում ենք տեղափոխվող տարրը, մինչև այն գտնվի ընդունող տարրի վերևում և բաց թողնում այն։ Բաց թողնված տարրը մնում է այնտեղ, որտեղ մնացել է, և դրա տեքստի բովանդակությունը փոխվում է՝ ի պատասխան անկման իրադարձության: Հետևյալ բաժինները ցույց են տալիս, թե ինչպես օգտագործել այլ Droppable փոխազդեցության իրադարձություններ՝ օգտատիրոջ փորձը բարելավելու համար:

Թիրախ ստացող օբյեկտի ընդգծում

Օգտագործելով ակտիվացնել և անջատել իրադարձությունները, դուք կարող եք ընդգծել թիրախ ստացող օբյեկտը, երբ օգտվողը սկսում է տարրը քաշելու գործընթացը: Շատ իրավիճակներում այս գաղափարը շատ արդյունավետ է, քանի որ այն օգտվողին տալիս է հուսալի նշում, թե որ տարրերն են հանդիսանում քաշել և թողնել մոդելի մաս: Համապատասխան օրինակը ներկայացված է ստորև.

... $(function() ( $("#draggable").draggable();$("#droppable").droppable(( drop: function() ($("#draggable").text("Droppable") ") ), ակտիվացնել՝ ֆունկցիան() ($("#droppable").css(( եզրագիծը՝ "միջին կրկնակի կանաչ", backgroundColor՝ "lightGreen" )); ), ապաակտիվացնել ֆունկցիան() ($("#droppable"): ").css("սահման", "").css("background-color", ""); ) )); )); ... Գործարկել օրինակը

Հենց որ օգտատերը սկսում է տարրը քաշել, ակտիվացման իրադարձությունը, որը կապված է մեր ստացող տարրի հետ, բռնկվում է, և handler ֆունկցիան օգտագործում է css() մեթոդը՝ տարրի եզրագծերը և ֆոնի գույնի CSS հատկությունները փոխելու համար: Արդյունքում թիրախ ստացող տարրը ընդգծվում է՝ օգտատիրոջը ցույց տալով, որ կապ կա դրա և տեղափոխվող տարրի միջև։

Ապաակտիվացման իրադարձությունն օգտագործվում է ստացող տարրից CSS հատկության արժեքները հեռացնելու և այն վերադարձնելու համար սկզբնական վիճակհենց որ օգտատերը բաց թողնի մկնիկի կոճակը: (Այս իրադարձությունը գործարկվում է ամեն անգամ, երբ տարրի քաշումը դադարում է, անկախ նրանից՝ քաշված տարրը մնացել է ընդունող տարրի վրա, թե ոչ:) Այս գործընթացը պատկերված է նկարում.

Տարրերի համընկնման կառավարում

Քաշել-թողնել տեխնոլոգիան կարող է բարելավվել՝ դրանում ավելացնելով իրադարձությունների մշակումը: Over-ի իրադարձությունը տեղի է ունենում, երբ տեղափոխվող տարրի 50%-ը գտնվում է ընդունող տարրի ցանկացած մասի վերևում: Ելքի իրադարձությունը միանում է, երբ նախկինում համընկնող տարրերն այլևս չեն համընկնում: Այս իրադարձությունների պատասխանի օրինակը ներկայացված է ստորև.

$(function() ( $("#draggable").draggable(); $("#droppable").droppable(( drop: function() ($("#draggable").text("Droppable") ) , ակտիվացնել՝ function() ( $("#droppable").css(( եզրագիծը՝ "միջին կրկնակի կանաչ", backgroundColor՝ "lightGreen" )); ), ապաակտիվացնել՝ function() ($("#droppable"): css("սահման", "").css("background-color", ""); ), over: function() ($("#droppable").css(( եզրագիծը՝ "միջին կրկնակի կարմիր", backgroundColor "կարմիր" )); ), դուրս. ֆունկցիա() ($("#droppable").css("սահման", "").css("background-color", ""); ) )); ); Գործարկել օրինակ

Այստեղ օգտագործվում են նույն կարգավորիչի գործառույթները, ինչպես նախորդ օրինակում, բայց այս դեպքում դրանք կապված են ավարտված և ավարտված իրադարձությունների հետ: Երբ լողացող տարրի առնվազն 50%-ը համընկնում է ընդունող տարրի հետ, այն շրջանակվում է և նրա ֆոնի գույնը փոխվում է, ինչպես ցույց է տրված նկարում.

Այս 50% սահմանը կոչվում է հանդուրժողականության շեմ, որը կարող է սահմանվել ստացող տարրը ստեղծելիս, ինչպես ցույց կտա հաջորդը:

Droppable փոխազդեցության կարգավորում

Droppable-ի փոխազդեցությունն ունի մի շարք հատկություններ, որոնք կարող եք փոփոխել՝ հարմարեցնելու նրա վարքագիծը: Այս հատկությունները թվարկված են ստորև բերված աղյուսակում.

Ընկնող փոխազդեցության հատկություններ
Սեփականություն Նկարագրություն
անաշխատունակ Եթե ​​այս տարբերակը ճշմարիտ է, ապա Droppable փոխազդեցության գործառույթն ի սկզբանե անջատված է: Կանխադրված արժեքը կեղծ է
ընդունել Նեղացնում է լողացող տարրերի շարքը, որոնց ընդունող տարրը կպատասխանի: Նախնական արժեքը * է, այն համապատասխանում է ցանկացած տարրի
activeClass Սահմանում է դաս, որը կհատկացվի ի պատասխան ակտիվացման իրադարձության և կհեռացվի ի պատասխան ապաակտիվացման իրադարձության
hoverClass Սահմանում է դաս, որը կհատկացվի՝ ի պատասխան ավարտված իրադարձության և կհեռացվի՝ ի պատասխան ավարտված իրադարձության:
հանդուրժողականություն Նշում է համընկնման նվազագույն աստիճանը, որի դեպքում տեղի է ունենում over-ի իրադարձությունը

Թույլատրված լողացող տարրերի սահմանափակում

Դուք կարող եք սահմանափակել droppable տարրերի շարքը, որոնք կընդունվեն Droppable-ի փոխգործունակության գործառույթ ունեցող տարրի կողմից՝ օգտագործելով Ընդունել տարբերակը: Ընդունման տարբերակի արժեքը պետք է լինի ընտրիչ: Այս իրադարձության արդյունքում Droppable փոխազդեցությունները տեղի կունենան միայն այն դեպքում, եթե տեղափոխվող տարրը համապատասխանի նշված ընտրիչին: Համապատասխան օրինակը ներկայացված է ստորև.

...

հեռանալ այստեղից
Տարր 1
Տարր 2


Գործարկել օրինակ

Այս օրինակում կան երկու լողացող տարրեր՝ drag1 և drag2 ID-ներով: Ընդունող տարր ստեղծելիս օգտագործվում է ընդունելի տարբերակը, որով նշում ենք, որ միայն drag1 տարրը կլինի ընդունելի լողացող տարր։

drag1 տարրը քաշելիս կտեսնեք նույն ազդեցությունը, ինչ նախորդ օրինակներում: Ակտիվացնել, ապաակտիվացնել, ավարտվել և դադարեցնել իրադարձությունները համապատասխան ժամանակներում կգործարկվեն ընդունող տարրի վրա: Միևնույն ժամանակ, եթե քաշեք drag2 տարրը, որը չի համապատասխանում ընդունման պարամետրում նշված ընտրիչին, ապա այդ իրադարձությունները չեն գործարկվի: Այս տարրը կարող է ազատ տեղաշարժվել, բայց այն չի ընդունվի ընդունող տարրի կողմից:

Նշեք ընդունելի լողացող տարր ընտրելու ձևի փոփոխությունը, որի վրա պետք է կանչեք text() մեթոդը: Երբ փաստաթղթում կար միայն մեկ լողացող տարր, id հատկանիշը բավարար էր դրա համար.

Թողնել՝ function() ( $("#draggable").text("Dropped") ),

Այս օրինակում կան երկու լողացող տարր, և id հատկանիշով ընտրելը չի ​​տա ցանկալի արդյունքը, քանի որ տեքստը այս դեպքում միշտ կփոխվի նույն լողացող տարրում, անկախ նրանից, թե որն է ընդունելի ստացող տարրի համար։

Լուծումը կայանում է նրանում, որ օգտագործենք UI օբյեկտը, որը jQuery UI-ն տրամադրում է որպես լրացուցիչ փաստարկ յուրաքանչյուր իրադարձություն մշակողի համար: Ui օբյեկտի draggable հատկությունը վերադարձնում է jQuery օբյեկտ, որը պարունակում է այն տարրը, որը օգտվողը քաշում է կամ փորձում է գցել թիրախային տարրի վրա՝ թույլ տալով ընտրել ցանկալի տարրը հետևյալ կերպ.

Թողնել՝ ֆունկցիա (իրադարձություն, UI) ( ui.draggable.text ("Dropped")),

Փոխելով համընկնման շեմը

Լռելյայնորեն, over-ի իրադարձությունը բացվում է միայն այն դեպքում, երբ տեղափոխվող տարրի առնվազն 50%-ը համընկնում է ընդունող տարրի հետ: Այս շեմի համընկնման չափը կարող է փոխվել՝ օգտագործելով հանդուրժողականության տարբերակը, որը կարող է վերցնել ստորև բերված աղյուսակում ներկայացված արժեքները.

Երկու արժեքները, որոնք ես ամենից հաճախ օգտագործում եմ՝ տեղավորել և շոշափել, դրանք են, որոնք առավել իմաստալից են օգտվողների համար: Ես օգտագործում եմ համապատասխանության արժեքը, երբ քաշված տարրը պետք է մնա ընդունող տարրի տարածքում, որտեղ այն տեղափոխվել է, և հպման արժեքը, երբ քաշված տարրը պետք է վերադառնա իր սկզբնական դիրքին (օրինակը կտրվի ավելի ուշ): Համապատասխանության և հպման պարամետրերի օգտագործման օրինակը ներկայացված է ստորև.

Կլոնի արժեքը jQuery UI-ին հուշում է ստեղծել լողացող տարրի պատճենը նրա ողջ բովանդակության հետ միասին և օգտագործել արդյունքը որպես օգնական տարր: Արդյունքը ցույց է տրված նկարում.

Օգնական տարրը հանվում է, երբ օգտատերը մկնիկի կոճակը թողնում է տեղափոխվող տարրի վրա՝ տեղափոխվող տարրը և ստացող տարրը թողնելով իրենց սկզբնական դիրքերում։

Ինչպես ցույց է տրված նկարում, սկզբնական լողացող տարրը մնում է իր տեղում, և միայն օժանդակ տարրը շարժվում է էկրանով մկնիկի ցուցիչին հետևելով: Եթե ​​տեղափոխվող տարրի չափը մեծ է, ինչպես մեր օրինակում, ապա այն ընդգրկում է փաստաթղթի մնացած տարրերը, ուստի օգտագործողի համար դժվար կլինի նույնիսկ հետևել ստացող տարրի դիրքին: Այս խնդիրը կարող է լուծվել՝ տրամադրելով գործառույթ՝ որպես օգնական տարբերակի արժեք, ինչպես ցույց է տրված ստորև բերված օրինակում.

... $(function() ( $("div.draggable")..png"/>") )); $("#basket").droppable(( activeClass: "active", hoverClass: "hover" )); )); ... Գործարկել օրինակը

Երբ օգտվողը սկսում է տարր քաշել, jQuery UI-ն կանչում է ֆունկցիա, պարամետրօգնական և օգտագործում է վերադարձված տարրը որպես շարժական օբյեկտ: Այս դեպքում ես օգտագործում եմ jQuery img տարրը ստեղծելու համար: Արդյունքը ցույց է տրված նկարում.

Փոքր պատկերը գործում է որպես լողացող տարրի տեղապահ, ինչը շատ ավելի հեշտ է դարձնում փաստաթղթի այլ տարրերին հետևելը:

Ui օբյեկտը, որը jQuery UI-ն փոխանցում է Droppable-ի փոխազդեցության իրադարձություններին, պարունակում է օգնական հատկություն, և այս հատկությունը կարող է օգտագործվել օգնական տարրը կառավարելու համար, մինչ այն քաշվում է: Այս հատկության օգտագործման օրինակը հետ միասին ավելի ու դուրս իրադարձությունների ցույց է տրված ստորև.

... $(function() ( $("div.draggable")..png"/>") )); $("#basket").droppable(( activeClass: "active", hoverClass: "save", over: function(event, UI) (ui.helper.css("border", "thick solid #27e6ed") ) , դուրս՝ ֆունկցիա (իրադարձություն, UI) ( ui.helper.css("սահման", "") ) )); )); ...

Այստեղ over and out իրադարձությունները և ui.helper հատկությունը օգտագործվում են օժանդակ տարրի շուրջ եզրագիծ ցուցադրելու համար, երբ այն համընկնում է հյուրընկալող տարրի հետ: Արդյունքը ցույց է տրված նկարում.

Կպչեք տարրերի եզրերին

Օգտագործելով snap ընտրանքներհնարավոր է հասնել, որ տեղափոխվող տարրը «գրավվի» այն տարրերի եզրերին, որոնց կողքով այն անցնում է։ Այս տարբերակը որպես արժեք ընդունում է ընտրիչ: Լողացող տարրը կկպչի ցանկացած տարրի եզրերին, որը համապատասխանում է նշված ընտրիչին: Snap տարբերակի օգտագործման օրինակը ներկայացված է ստորև.

Գործարկել օրինակ jQuery UI

Զամբյուղ
Կապել այստեղ
քաշել ինձ


Երբ շարժական տարրը մոտենում է համապատասխան տարրերից մեկին, այն մի տեսակ «քաշվում» է դեպի այն այնպես, որ դրանց հարակից եզրերը հպվում են: Նման կապի համար կարող եք ընտրել ցանկացած տարր, ոչ միայն ստացող: Այս օրինակում ես ավելացրել եմ div տարր և սահմանել snap տարբերակը մի արժեքի վրա, որն ընտրում է փաստաթղթում տրված տարր, ինչպես նաև ընդունող տարրը։

Կան մի քանի ենթատարբերակներ, որոնք թույլ են տալիս ճշգրտել, թե ինչպես են տարրերն իրենց պահում խարսխման հարցում: Դրանցից մեկն է snapMode տարբերակ. Այն կարող է օգտագործվել կապակցման տեսակը նշելու համար: Թույլատրվում են հետևյալ արժեքները. ներքին(կտրվել տարրերի ներքին եզրերին), արտաքին(կտրել տարրերի արտաքին եզրերին) և երկուսն էլ(կապել բոլոր եզրերին, լռելյայն):

snapTolerance տարբերակթույլ է տալիս ճշտել, թե որքան հեռու պետք է լողացող տարրը մոտենա թիրախային տարրի եզրին, նախքան խզելը: Նախնական արժեքը 20 է, ինչը նշանակում է 20 պիքսել: Օրինակը օգտագործում է 50 արժեք, որը համապատասխանում է ավելի մեծ հեռավորության վրա գտնվող խարիսխին: Շատ կարևոր է ընտրել այս տարբերակի ճիշտ արժեքը: Եթե ​​snapTolerance տարբերակի արժեքը չափազանց ցածր է, ապա օգտագործողը կարող է չնկատել խզման էֆեկտը, իսկ եթե այն չափազանց բարձր է, տեղափոխվող տարրը կսկսի անսպասելիորեն ցատկել՝ դիպչելով հեռու տարրերին:

Քաշել և թողնել տեխնիկան զարգացել է երկար տարիների ընթացքում: Զարմանալի չէ, որ ծրագրավորողների թվի աճով պլագիններ են մշակում բացով աղբյուր կոդը(օրինակ՝ jQuery-ի համար) հին մեթոդները վերածնվում են: JavaScript գրադարանը շատ հարմարվողական է և առաջարկում է բազմաթիվ բարելավումներ վեբ տեխնոլոգիայի այս դարում:

Այս ձեռնարկում մենք կստեղծենք սցենար, որը մենք կարող ենք օգտագործել մեր կայքում դինամիկ ուղղանկյուններ քաշելու և թողնելու համար: Գործընթացը վերահսկվում է jQuery-ի կողմից: Նման սցենարները խնայում են ժամանակը՝ տրամադրելով պատրաստի ֆունկցիոնալություն: Իսկ քաշել և թողնել գրադարանը կարող է օգտագործվել այլ նախագծերում:

Մենք պատրաստում ենք բովանդակություն

Նախ և առաջ մենք փոքրիկ կայք կպատրաստենք նախագծի համար։ Ծրագրի թղթապանակում դուք պետք է ստեղծեք երկու գրացուցակ ուշագրավ անուններով «js»և «css»և դատարկ ֆայլ index.html . Կոդը կլինի շատ պարզ, որպեսզի հստակ պատկերացում լինի աշխատանքի մասին, և կա հետագա զարգացման կետ:

Ստորև բերված է մեր ծածկագիրը HTML ֆայլ. Գլխում գլուխմենք ներառում ենք 3 սցենար. Հիմնական jQuery սկրիպտը կբեռնվի Google Code սերվերից: Ներառված է նաև մեր style.css ֆայլը, որը պարունակում է ձևավորման հիմնական հատկությունները տեսքըմեր փաստաթուղթը։

քաշել ինձ

Այո այո. Հենց ես։

Ինձ էլ կարող են քաշել

( zIndex՝ 200, անթափանցիկություն՝ .9 )

P.S. Դուք կարող եք ինձ թողնել ամենուր:


Բաժնի շրջանակներում մարմինըընդամենը երկու բլոկ դիվ, որոնք պարունակում են երկու ուղղանկյուններ։ Կոդը բավականին պարզ է և հասկանալի։ Յուրաքանչյուր ուղղանկյունի ներսում տեղադրվում են դասեր ունեցող վերնագրեր: կարգավորողև կարգավորող 2. Սա կարևոր է, քանի որ յուրաքանչյուր ուղղանկյուն քաշվելիս տարբեր կերպ է վարվում:


CSS-ի տեղադրում

HTML կոդը շատ պարզ է. Եթե ​​հասկանում եք հիմնական նշումը, ապա css ոճերընույնպես դժվար չի լինի: Այն հիմնականում սահմանում է լուսանցքները, լիցքավորումը և գույները:

Body,html ( տառատեսակ-ընտանիք:Calibri, sans-serif; ֆոն:#eaf3fb; տառաչափ՝ 12px; բարձրություն՝1000px; տող-բարձրություն՝18px;) p (բարձրություն՝30px; )

Ընտրիչներ մարմին, htmlօգտագործվում է միայն ցուցադրական էջի համար: Եվ ամբողջ բովանդակությունը տեղադրվում է երկու քաշվող ուղղանկյունների մեջ:

Dv1 ( լայնությունը:200px; ֆոնի գույնը:#eff7ff; եզրագիծը:1px կոշտ #96c2f1; դիրքը:բացարձակ; ձախ:100px; վերև:100px; ) ընտանիք՝ Վրաստան, «Times Նոր Հռոմ", Times, սերիֆ; տառաչափ՝ 1.0em; տեքստի փոխակերպում: մեծատառ; տառատեսակի քաշը՝ թավ; գույնը՝ #3a424a; լուսանցք՝ 1px; կուրսորը՝ շարժվել; :10px; ) .dv2 (ֆոնի գույնը՝#f6ebfb; եզրագիծը՝ 1px կոշտ #a36fde; լայնությունը՝ 550px; դիրքը՝ բացարձակ; կուրսորը՝ տեղափոխել; ձախը՝ 400px; վերև՝ 230px; ) .dv2 h2 (ֆոնի գույնը՝ #eacfe9; տառերի տարածություն՝-0,09em; տառաչափ՝ 1,8մ; տառատեսակի քաշ՝ թավ; լիցք՝ 15px; լուսանցք՝ 1px; գույն՝#241f24; կուրսոր՝ տեղափոխել; ) .dv2 .content2 (լիցքավորում՝5px լուսանցք-ներքև: 10px;)

Երկու .dv1 և .dv2 դասերի համար մենք օգտագործում ենք բացարձակ դիրքավորում: Սա անհրաժեշտ չէ և, հավանաբար, ամենաշատը Լավագույն միջոցըքարշվող ուղղանկյուններ տեղադրելու համար: Այնուամենայնիվ, մեր օրինակի համար այս դիրքավորումը իմաստ ունի, քանի որ ամեն անգամ, երբ էջը թարմացվում է, ուղղանկյունները տեղադրվում են որոշակի վայրերում:

Նաև տառատեսակները և գույները տարբեր են ուղղանկյունների համար, որպեսզի ավելի հեշտ լինի տեսնել տարբերությունը:

Հակառակ դեպքում, բլոկների վերնագրերը և բովանդակությունը գրեթե նույնական են: Եթե ​​դուք կպատճենեք ոճերը ձեր նախագծի մեջ, գործարկելուց առաջ փոխեք անունները: Որոշ դեպքերում ավելի խելամիտ կլինի ID-ներ օգտագործել դասերի փոխարեն, օրինակ՝ մեկ կոնկրետ բլոկի համար քաշել և թողնել տեխնիկան օգտագործելու դեպքում:

JavaScript-ի վերլուծություն

Երկու JavaScript ֆայլպարունակում է բոլոր անհրաժեշտ ծածկագրերը աշխատելու համար: Մենք բաց կթողնենք jQuery-ի հետ աշխատելու մանրամասները, քանի որ դա դուրս է այս ձեռնարկի շրջանակներից: Եկեք ուշադրություն դարձնենք jquery.dragdrop.js ֆայլին։

Տող 22-ը ֆունկցիայի սահմանումն է Քաշում է.

$.fn.Drags = ֆունկցիա(opts) ( var ps = $.extend(( zIndex՝ 20, oppsity՝ .7, handler՝ null, onMove: function() ( ), onDrop: function() ( ) ), opts );

Սա սահմանում է վերադարձի փոփոխականը և սկզբնավորման տվյալները Քաշում է. Այս մեթոդը շատ լայնորեն կիրառվում է jQuery-ի հետ աշխատելիս՝ տարբերակները այլ գործառույթներին փոխանցելու համար։ Ներսում մենք փոփոխականներ ենք դնում բոլորի համար մատչելի տարբերակներքարշվող ուղղանկյունների համար:


Կոդի հետևյալ հատվածը ներառում է իրադարձությունների մշակիչներ փոփոխականի համար քաշել թողնել. Երկու իրադարձություններն էլ քաշելև անկումզանգի գործառույթներ՝ դրանց փոխանցելով իրադարձության պարամետրերը: Այս իրադարձությունները տեղի են ունենում, երբ սեղմում եք մկնիկի կոճակը՝ օբյեկտը քաշելու և այնուհետև այն բաց թողնելու համար:

Var dragdrop = ( քաշել՝ ֆունկցիա(e) ( var dragData = e.data.dragData; dragData.target.css(( ձախ՝ dragData.left + e.pageX - dragData.offLeft, վերև՝ dragData.top + e.pageY - dragData.offTop )); dragData.handler.css (( կուրսորը՝ «տեղափոխել» )); dragData.target.css (( կուրսորը՝ «տեղափոխել» )); dragData.onMove(e); ), թողնել՝ ֆունկցիա ( ե) ( var dragData = e.data.dragData; dragData.target.css (dragData.oldCss); //.css (( «անթափանցիկություն»: «» )); dragData.handler.css («կուրսորը», dragData: oldCss.cursor); dragData.onDrop(e); $().unbind("mousemove", dragdrop.drag) .unbind("mouseup", dragdrop.drop); ) )

Մեր գործառույթները շահարկում են յուրաքանչյուր օբյեկտի CSS դիրքավորումը: Եթե ​​փոխեք ձեր օբյեկտների բացարձակ դիրքը, ապա դա չի ազդի ծածկագրի վրա, քանի որ յուրաքանչյուրը JavaScript ֆունկցիանփոխում է ցանկացած ոճ, որը սահմանված է օբյեկտի համար:

Կոդի մնացած մասում կարգավորիչը ստուգվում է, և այլ ոճերը կոսմետիկորեն փոխվում են: Այստեղ դուք կարող եք ավելացնել թափանցիկության, տառատեսակի և գույնի փոփոխություն կամ ավելացնել նոր պարբերություններ:

Քաշել/թողնել գործառույթները

Երկրորդ fn.js ֆայլը պարունակում է շատ պարզ կոդ։ Մենք սպասում ենք, որ փաստաթուղթը ամբողջությամբ բեռնվի, որից հետո մենք զանգահարում ենք մեր գործառույթները: Սահմանված է երկու ֆունկցիայի օրինակ Քաշում է, որով զբաղվել են ավելի վաղ։

Մենք ունենք երկու լողացող բլոկներ .dv1 և .dv2 դասերով: Եթե ​​Ձեզ անհրաժեշտ է թողնել մեկ լողացող բլոկ, ապա պարզապես անհրաժեշտ է հեռացնել կոդի երկրորդ մասը։ Մեկ այլ լողացող բլոկ ավելացնելը նույնպես հեշտ է: Դուք միայն պետք է ավելացնել նոր առանձնահատկությունայս ֆայլում:

Առաջին քայլը գործառույթը կանչելիս ընտրանքները սահմանելն է: Համոզվեք, որ սահմանեք կարգավորողի անունը: Դրա միջոցով մենք jQuery-ին ասում ենք, թե որ կարգավորիչն օգտագործի, երբ սեղմված է մկնիկի կոճակը որոշակի տարածքփաստաթուղթ։ Գործադիրի անունը կարող է լինել դաս կամ ID հատկանիշ:

Մեր առաջին գործառույթն ունի երկու իրադարձությունների մշակող onMoveև onDrop. Երկուսն էլ կանչում են նոր գործառույթներ, որոնք փոխանցվում են ընթացիկ իրադարձությանը որպես փոփոխականներ: Սա այն վայրն է, որտեղ ուղղանկյունի HTML կոդը մանիպուլյացիայի է ենթարկվում յուրաքանչյուր քայլի ընթացքում թարմացնելու համար: Սա հիանալի էֆեկտ է ցույց տալու համար, թե ինչպես կարող եք կառավարել գործընթացը պարզ jQuery իրադարձություններով:

Երկրորդ գործառույթում մենք օգտագործում ենք z-Index և opacity պարամետրերը: Դուք կարող եք ավելացնել ուրիշներին css հատկությունները? բայց սա վերամշակման կարիք ունի: JavaScript կոդըկարգավորումները ստուգելու համար: Օրինակ, դուք կարող եք փոխանցել այլ տառատեսակի ոճ կամ արժեքներ լողացող ուղղանկյունի բարձրության և լայնության համար՝ շատ հետաքրքիր հնարք:

Եզրակացություն

Մի փոքր աշխատանքի արդյունքում մենք մեր տրամադրության տակ ունենք մի հրաշալի ինտերֆեյս՝ drag and drop ֆունկցիայով։ jQuery-ն հսկայական առավելություններ է տալիս ծրագրավորողների համար, ովքեր ցանկանում են օգտագործել հին ուղիներն իրենց նախագծերում:

Արդյունքում մենք ոչ միայն ստացանք իրադարձությունների մշակման գործառույթներ, այլև կարող ենք նոր փոփոխականներ փոխանցել քաշվող բլոկներին: Սա ստեղծագործական նոր հնարավորություններ է բացում: Դասի ցուցադրումը պարունակում է միայն ուրվագիծ, թե ինչ կարելի է անել նման կոդի օգնությամբ:

Այսպիսով, ստուգեք jQuery-ի փաստաթղթերը գրադարանի գործառույթներն օգտագործելու համար: