Jinsi operesheni ya kuvuta na kuacha inafanywa. Kuunda kiolesura rahisi cha "buruta na kudondosha" HTML5. Tofauti kutoka kwa HTML5 Drag'n'Drop

Kipengele cha Buruta na Achia kinaweza kusaidia kuboresha utendakazi wa iPad yako. Hapa kuna jinsi ya kuitumia.

Kwa hivyo unaweza kuhamisha faili kutoka kwa huduma moja ya hifadhi ya wingu hadi nyingine, kunakili maandishi kutoka Safari hadi programu ya kuhariri maandishi ili kuongeza nukuu, au kuhifadhi nakala za picha mahususi kwenye programu ya kuhifadhi faili.

Jinsi ya kuburuta na kuacha picha, faili na maandishi

1. Gusa na ushikilie picha, faili au maandishi yaliyoangaziwa ambayo ungependa kuburuta hadi kwenye programu nyingine.

2. Buruta kipengee hadi mahali unapotaka katika programu hii au nyingine ambayo umefungua katika hali ya Slaidi ya Juu au Mwonekano wa Gawanya na uachilie.

Jinsi ya kuburuta picha au faili nyingi mara moja

1. Gusa na ushikilie mojawapo ya picha au faili unazotaka kuburuta.

2. Unapoburuta kipengee cha sasa, gusa picha au faili nyingine ambayo pia ungependa kuburuta. Fanya hili tena na vitu vingi unavyotaka kusogeza.

3. Buruta vitu vyote vilivyochaguliwa hadi eneo lililoteuliwa katika programu-tumizi nyingine ambayo umefungua katika modi ya Slaidi Zaidi au Mwonekano wa Gawanya na uachilie.

Jinsi ya kuburuta maandishi kutoka kwa programu moja hadi nyingine

1. Gusa na ushikilie sehemu ya maandishi unayotaka kuburuta ili kuichagua.

2. Tumia sehemu za uteuzi kuangazia maandishi mengine unayotaka kuburuta.

3. Gusa na ushikilie maandishi yaliyoangaziwa.

4. Buruta maandishi hadi kwenye programu ambapo unataka kuyaweka na kuyaachilia.

Jinsi ya kubadilisha mpangilio wa icons za programu kadhaa mara moja kwa kutumia "Buruta na Achia"

Ingawa vipengele vingi vya kuburuta na kudondosha katika iOS hufanya kazi kwenye iPad pekee, mbinu hii hufanya kazi kwenye iPhone na iPad. Hii hukuruhusu kupanga mpangilio wa programu kwenye skrini yako ya kwanza kwa kutumia Buruta na Achia badala ya kuzisogeza moja baada ya nyingine.

1. Gusa na ushikilie ikoni ya programu unayotaka kubadilisha mkao wake kwenye Skrini ya kwanza.

2. Gusa programu za ziada ambazo ungependa kuhamisha pia.

3. Buruta programu hizi kwenye ukurasa au folda unayotaka na uzidondoshe.

182

Katika mfano huu, tunachagua kipengee cha div na kuifanya iweze kusongeshwa kwa kupiga njia ya draggable() juu yake. Kama inavyoonyeshwa kwenye takwimu hapa chini, katika hati iliyofunguliwa kitu kinachukua nafasi yake ya kawaida, lakini baada ya hapo inaweza kuhamishwa kwa kutumia pointer ya panya mahali popote kwenye dirisha la kivinjari:

Uwezo wa kuvuta na kuacha vipengele ni muhimu peke yake, lakini ni muhimu zaidi wakati unatumiwa pamoja na mwingiliano wa Kuacha, ambayo inaelezwa ijayo.

Mwingiliano unaoweza kukokotwa hupatikana kupitia utumiaji wa alama maalum za HTML na mitindo ya CSS. Hii inamaanisha kuwa utendakazi huu utafanya kazi karibu na kivinjari chochote, lakini vipengee vilivyopewa havitaweza kufanya kazi na vipengele sawa vya asili vya kuvuta na kuacha vya mifumo ya uendeshaji.

Operesheni za kuvuta na kudondosha zinazofafanuliwa na vipimo vya HTML5 kwa kawaida hutekelezwa kwa kutumia mifumo asilia ya uendeshaji. Ikiwa unatumia utaratibu wa Kuburuta na kudondosha wa UI ya jQuery, basi ni bora kuzima vipengele sawa vya HTML5 ili kuepuka migongano. Ili kufanya hivyo, weka sifa inayoweza kukokotwa ya kipengele kikuu cha hati kuwa uongo.

Kuanzisha mwingiliano unaoweza Kuburutwa

Kuna chaguo nyingi za kubinafsisha kwa mwingiliano unaoweza Kuburutwa. Sifa muhimu zaidi, ambazo zimejadiliwa katika sehemu zifuatazo, zinaonyeshwa kwenye jedwali hapa chini:

Sifa za mwingiliano zinazovutwa Maelezo ya Mali
mhimili Inapunguza uwezo wa kusonga katika mwelekeo fulani. Thamani chaguo-msingi si kweli, ambayo inamaanisha hakuna kizuizi, lakini unaweza pia kubainisha thamani ya "x" (sogeza kwenye mhimili wa X pekee) au "y" (sogea kwenye mhimili wa Y pekee)
kizuizi Hupunguza eneo la kipengele kinachohamishwa hadi eneo maalum la skrini. Aina za maadili zinazoungwa mkono zimeelezewa kwenye jedwali hapa chini, kwa kutumia mfano unaolingana. Thamani chaguo-msingi ni uongo, ambayo ina maana hakuna vikwazo
kuchelewa Hubainisha ni muda gani kipengele lazima kiburuzwe kabla ya kusogezwa. Thamani chaguo-msingi ni 0, ambayo inamaanisha hakuna kuchelewa
umbali Inafafanua umbali ambao mtumiaji lazima aburute kipengele kutoka kwenye nafasi yake ya kuanzia kabla hakijasogea. Thamani chaguo-msingi ni pikseli 1
gridi ya taifa Hulazimisha upigaji wa kipengele kilichohamishwa hadi kwenye seli za gridi ya taifa. Thamani chaguo-msingi ni ya uwongo, ambayo ina maana kwamba hakuna kinachofunga
Kupunguza mwelekeo wa harakati

Kuna njia kadhaa ambazo unaweza kuzuia harakati za kipengele kwa mwelekeo fulani. Ya kwanza ni kutumia chaguo la mhimili, ambayo inakuwezesha kuzuia mwelekeo wa harakati kwenye mhimili wa X au Y. Mfano wa hii umeonyeshwa hapa chini:

... div.dragElement (ukubwa wa fonti: kubwa; mpaka: nyeusi nyembamba; padding:16px; upana: 8em; panga maandishi: katikati; rangi ya mandharinyuma: lightgray; ukingo: 4px ) $(function() ( $ (".dragElement").draggable(( mhimili: "x")).chujio("#dragV").draggable("chaguo", "mhimili", "y"); )); Buruta kwa wima Buruta kwa mlalo Endesha mfano

Katika mfano huu, tunafafanua vipengele viwili vya div, chagua kwa kutumia jQuery, na piga draggable() njia. Kama hoja kwa njia hii, tunapitisha kitu ambacho mwanzoni kinazuia kusogea kwa vipengele vyote viwili vya div kwa mwelekeo kando ya mhimili wa X. Kwa kutumia wakati huo jQuery filter() mbinu, tunaweza kuchagua kipengele cha dragV bila jQuery kutafuta hati nzima tena na kuiweka kwa mwelekeo tofauti wa kuruhusiwa wa harakati - kando ya mhimili wa Y. Kwa hivyo, tunapata hati ambayo kipengele kimoja cha div kinaweza kuvuta tu kwa mwelekeo wa wima, na nyingine - tu katika mwelekeo wa usawa. Matokeo yanaonyeshwa kwenye takwimu:

Kupunguza eneo linaloruhusiwa la harakati za kipengele

Unaweza pia kuweka kikomo eneo la skrini ambapo unaweza kuburuta kipengee. Ili kufanya hivyo, tumia chaguo la kuzuia. Miundo ya thamani ambayo inaweza kubainishwa katika chaguo hili imefafanuliwa kwenye jedwali hapa chini:

Mfano wa kutumia chaguo la kontena umepewa hapa chini:

... div.dragElement (ukubwa wa fonti: kubwa; mpaka: nyeusi nyembamba; padding:16px; upana: 8em; panga maandishi: katikati; rangi ya mandharinyuma: lightgray; ukingo: 4px ) #chombo ( mpaka: wastani mara mbili nyeusi; upana: 700px; urefu: 450px) $(function() ( $(".dragElement").draggable(( containment: "parent")).chujio("#dragH").draggable("chaguo", " mhimili", "x");)); Buruta kwa mlalo Buruta ndani ya mfano wa Endesha mzazi

Katika mfano huu, vipengele vyote viwili vina mipaka katika uwezo wao wa kusonga ili viweze tu kuburutwa ndani ya kipengele chao kikuu, ambacho ni div ya ukubwa usiobadilika. Mojawapo ya div zinazoelea ina kizuizi cha ziada cha kuelea kwa kutumia chaguo la mhimili kwa kuwa inaweza tu kusogea kwa mlalo ndani ya mzazi wake. Matokeo yanaonyeshwa kwenye takwimu:

Kuweka kikomo uwezo wa kuhamisha kipengele hadi seli za gridi ya taifa

Chaguo la gridi hukuruhusu kuweka ufungaji wa kipengee kilichosogezwa kwenye seli za gridi ya taifa. Chaguo hili huchukua kama thamani safu ya vipengele viwili vinavyobainisha upana na urefu wa seli za gridi katika saizi. Mfano wa kutumia chaguo la gridi ya taifa umepewa hapa chini:

... #inaweza kuburutwa (ukubwa wa fonti: x-kubwa; mpaka: nyeusi nyembamba; upana: 5em; panga maandishi: katikati; padding:10px) $(function() ( $("#draggable").draggable( ( gridi ya taifa: ));)); Niburute Kimbia mfano

Mfano huu unabainisha gridi iliyo na seli za upana wa pikseli 100 na urefu wa pikseli 50. Unapoburuta kipengee, "huruka" kutoka kwa seli moja (isiyoonekana) hadi nyingine. Athari ya kupiga picha ni mfano mzuri wa jinsi utendaji wa mwingiliano unaweza kutumika, lakini ni vigumu kuwasilisha kwa kutumia picha za skrini.

Unaweza kuunda madoido ya haraka kwa mwelekeo mmoja tu kwa kuweka mhimili wa kusogea bila malipo hadi 1. Kwa mfano, ukiweka chaguo la gridi kuwa , kipengee kitachukua seli za gridi ya upana wa pikseli 100 kikisogezwa kwa mlalo, lakini kitasogea kwa uhuru wima.

Kuchelewa kwa hoja

Kuna chaguo mbili zinazokuwezesha kuchelewesha kuvuta kwa kipengele cha kusonga. Chaguo la kuchelewesha hukuruhusu kubainisha muda, katika milisekunde, ambayo mtumiaji lazima aburute kielekezi cha kipanya kabla ya kipengele kuhamishwa. Aina nyingine ya ucheleweshaji hutolewa na chaguo la umbali, ambalo hubainisha umbali katika pikseli ambazo lazima mtumiaji aburute kiashiria cha kipanya kabla ya kufuatiwa na kipengele.

Mfano wa kutumia mipangilio yote miwili imetolewa hapa chini:

... #wakati, #umbali (ukubwa wa fonti: kubwa; mpaka: nyeusi nyembamba; pedi: 10px; upana: 120px; panga maandishi: katikati; rangi ya mandharinyuma: lightgray; ukingo: 4px; ) $(function( ) ( $("#time").draggable(( delay: 1000 )) $("#umbali").draggable(( umbali: 150 )) )); Zuia kwa kuchelewa kwa muda Zuia kwa kutumia umbali wa chini zaidi mfano wa kukimbia

Katika mfano huu kuna vipengele viwili vinavyoweza kusonga, moja ambayo imechelewa kwa kutumia chaguo la kuchelewa, na nyingine imechelewa kwa kutumia chaguo la umbali.

Katika hali ya kuchelewa, iliyobainishwa na chaguo la kuchelewesha, mtumiaji lazima aburute kwa muda maalum kabla ya kuhamisha kipengele. Katika mfano huu, muda wa kipindi hiki ni 1000 ms. Sio lazima kusonga panya kwa wakati huu, lakini katika kipindi chote cha kuchelewa kifungo cha panya lazima kibaki kushinikizwa, baada ya hapo kipengele kinaweza kuhamishwa kwa kusonga panya. Baada ya muda wa kuchelewa kupita, kipengele kinachosogezwa kitapita hadi mahali pa kielekezi cha kipanya, kulingana na vikwazo vilivyowekwa na gridi, eneo na chaguzi za mhimili zilizojadiliwa hapo awali.

Chaguo la umbali lina athari sawa, lakini katika kesi hii mtumiaji lazima aburute pointer ya kipanya angalau idadi maalum ya saizi katika mwelekeo wowote kutoka eneo la kuanzia la kipengele. Kipengele kinachosogezwa kitaruka hadi eneo la sasa la kielekezi.

Ikiwa unatumia mipangilio yote kwa kipengele sawa, kipengele kilichohamishwa hakitasonga hadi vigezo vyote viwili vya kuchelewa vifikiwe, i.e. hadi jaribio la kuburuta kipengee lidumu kwa muda maalum na hadi kiashiria cha kipanya kisogeze idadi maalum ya saizi.

Kwa kutumia njia za mwingiliano zinazoweza Kuburutwa

Mbinu zote zilizobainishwa kwa mwingiliano unaoweza Kuburutwa ni sehemu ya seti ya mbinu za msingi ambazo tayari umeziona unapotazama wijeti. Hakuna mbinu mahususi za mwingiliano unaoweza Kuburutwa, kwa hivyo hatutazishughulikia kwa kina. Orodha ya njia zinazopatikana imeonyeshwa kwenye jedwali hapa chini:

Kutumia Matukio ya Mwingiliano Yanayoweza Kuburutwa

Mwingiliano wa Kuburuta huauni seti rahisi ya matukio ambayo hukuarifu kipengele kinapoburutwa. Matukio haya yamefafanuliwa katika jedwali lifuatalo:

Kama ilivyo kwa matukio ya wijeti, matukio haya yanaweza pia kujibiwa. Mfano wa kushughulikia matukio ya kuanza na kusitisha umetolewa hapa chini:

... #inaweza kuburutwa (ukubwa wa fonti: x-kubwa; mpaka: nyeusi nyembamba; upana: 190px; panga maandishi: katikati; padding:10px) $(function() ( $("#draggable").draggable( ( start: function() ( $("#draggable").text("Niburute..."), acha: kazi() ( $("#draggable").text("Niburute") ) )) ;)); Niburute Kimbia mfano

Mfano huu hutumia matukio ya kuanza na kusimamisha kubadilisha maandishi ya kipengele kinavyoburutwa. Faida hii inatokana na ukweli kwamba mwingiliano wa Draggable unatekelezwa kabisa kwa kutumia HTML na CSS: unaweza kutumia jQuery kubadilisha hali ya kipengee kinachoweza kuburutwa hata kinaposonga kwenye skrini.

Kutumia Mwingiliano unaoweza Kuacha

Kuburuta kipengele pekee kunaweza kutosha katika hali fulani, lakini ni muhimu zaidi inapotumiwa pamoja na Mwingiliano Unaoweza Kuacha.

Vipengele ambavyo mwingiliano unaoweza Kuangusha umetumiwa (vipengee vya kupokea) hupata uwezo wa kukubali vipengele vinavyoweza kusongeshwa vilivyoundwa kwa kutumia mwingiliano unaoweza Kuburutwa.

Vipengee vya kupokea huundwa kwa kutumia njia ya droppable(), lakini ili kupata utendakazi muhimu utahitaji kuunda vidhibiti vya hafla kutoka kwa vile vilivyoainishwa kwa aina hii ya mwingiliano. Matukio yanayopatikana yanaonyeshwa kwenye jedwali hapa chini:

Matukio ya mwingiliano yanayoweza kuangusha Maelezo ya Tukio
kuunda Hutokea wakati mwingiliano Unaoweza Kuacha unatumika kwa kipengele
amilisha Hutokea mtumiaji anapoanza kuburuta kipengele kinachosogezwa
zima Hutokea mtumiaji anapoacha kuburuta kipengele kinachosogezwa
juu Hutokea wakati mtumiaji anaburuta kipengee kinachoweza kuelea juu ya kipengele kinachopokea (mradi tu kitufe cha kipanya hakijatolewa)
nje Hutokea wakati mtumiaji anaburuta kipengele kinachosogezwa nje ya kipengele kinachopokea
kushuka Hutokea wakati mtumiaji anaacha kipengele kikisogezwa kwenye kipengee cha kupokea

Mfano wa kuunda kipengee rahisi cha kupokea ambacho kidhibiti cha tukio kimoja kinafafanuliwa umepewa hapa chini:

... #inaweza kuburuzwa, #inaweza kudondoshwa (ukubwa wa herufi: kubwa; mpaka: nyeusi nyembamba; pedi: 10px; upana: 100px; panga maandishi: katikati; rangi ya asili: kijivu-nyepesi; ukingo: 4px;) #inayodondoshwa (padding : 20px; nafasi: kabisa; kulia: 5px;) $(kazi() ( $("#draggable").draggable(); $("#droppable").droppable(( drop: function() ( $(" #yanayoweza kuburutwa").maandishi("Kushoto") ));)); Niache hapa Niburute Kimbia mfano

Mfano huu unaongeza kipengele cha div kwenye hati ambayo maandishi yake yanawakilishwa na mfuatano "Ondoka hapa." Tunachagua kipengee hiki kwa kutumia jQuery na kupiga simu kwa njia ya droppable(), tukipitisha kitu cha mipangilio ambacho kinafafanua kidhibiti cha tukio la kushuka. Jibu la tukio hili ni kubadilisha maandishi ya kipengele kinachosogezwa kwa kutumia njia ya maandishi ().

Mwingiliano wa Kuburuta na Kudondosha ulioundwa katika mfano huu ni rahisi, lakini unatoa muktadha muhimu wa kueleza jinsi mwingiliano wa Kuburuta na Kudondosha hufanya kazi pamoja. Hatua mbalimbali za mchakato wa kuvuta vipengele zinaonyeshwa kwenye takwimu:

Yote inaonekana rahisi sana. Tunaburuta kipengele kinachosogezwa hadi kiwe juu ya kipengele kinachopokea na kukitoa. Kipengele kinachodondoshwa kinabaki pale kilipoachwa, na maudhui yake ya maandishi hubadilika kutokana na tukio la kuacha. Sehemu zifuatazo zinaonyesha jinsi ya kutumia matukio mengine ya mwingiliano yanayoweza Kuacha ili kuboresha matumizi ya mtumiaji.

Mwangaza wa kitu kinachopokea lengwa

Kwa kutumia kuwezesha na kuzima matukio, unaweza kuangazia kitu kinacholengwa wakati mtumiaji anapoanza mchakato wa kuburuta kipengele. Katika hali nyingi, wazo hili huzaa matunda sana kwa sababu humpa mtumiaji mwongozo unaotegemeka kuhusu ni vipengele vipi ambavyo ni sehemu ya modeli ya kuburuta na kudondosha. Mfano unaolingana umetolewa hapa chini:

... $(kazi() ( $("#draggable").draggable(); $("#droppable").droppable(( drop: function() ( $("#draggable").text("Kushoto). ") ), wezesha: function() ( $("#droppable").css(( border: "medium double green", backgroundColor: "lightGreen"); ), zima: function() ( $("#droppable) ") .css("mpaka", "").css("rangi ya usuli", ""); )); )); ...Endesha mfano

Mara tu mtumiaji anapoanza kuburuta kipengele, tukio la kuwezesha linalohusishwa na kipengele chetu cha kupokea huondolewa, na kidhibiti hutumia mbinu ya css() kubadilisha sifa za CSS za mpaka na rangi ya usuli za kipengele hicho. Kwa hivyo, kipengele cha kupokea kinacholengwa kinaangaziwa, kuashiria kwa mtumiaji kuwa kuna uhusiano kati yake na kipengele kinachohamishwa.

Tukio la kuzima hutumika kuondoa thamani za vipengee vya CSS kutoka kwenye kipengee kinachopokea na kuirejesha katika hali yake ya awali mara tu mtumiaji atakapotoa kitufe cha kipanya. (Tukio hili hutokea wakati wowote kukokota kipengele kunaposimama, bila kujali kama kipengele kinachoburutwa kimeachwa kwenye kipengele cha kupokea au la.) Utaratibu huu unaonyeshwa kwenye mchoro:

Kushughulikia vipengele vinavyoingiliana

Teknolojia ya kuburuta na kudondosha inaweza kuboreshwa kwa kuongeza ushughulikiaji wa tukio na kutoka. Tukio la juu hutokea wakati 50% ya kipengele kinachohamishwa kiko juu ya sehemu yoyote ya kipengele cha kupokea. Tukio la nje hutokea wakati vipengele vilivyopishana hapo awali haviingiliani tena. Mfano wa majibu kwa matukio haya umetolewa hapa chini:

$(function() ( $("#draggable").draggable(); $("#droppable").droppable(( drop: function() ( $("#draggable").text("Left") ) , activate: function() ( $("#droppable").css(( border: "medium double green", backgroundColor: "lightGreen")); ), zima: function() ( $("#droppable"). css("mpaka", "").css("background-color", ""); ), over: function() ( $("#droppable").css(( border: "medium double red", backgroundColor : "nyekundu" )); ), out: function() ( $("#droppable").css("mpaka", "").css("background-color", ""); ) )); ) ); Kukimbia mfano

Kazi sawa za kidhibiti hutumiwa hapa kama katika mfano uliopita, lakini katika kesi hii zinahusishwa na matukio ya juu na nje. Wakati kipengele kinachopokea kinapoingiliana angalau 50% ya kipengele kinachosogezwa, kinafungwa kwenye fremu na rangi yake ya usuli inabadilika, kama inavyoonyeshwa kwenye takwimu:

Kikomo hiki cha 50% kinaitwa kizingiti cha kuingiliana (uvumilivu), thamani ambayo inaweza kuwekwa wakati wa kuunda kipengele cha kupokea, kama itaonyeshwa baadaye.

Kuweka mwingiliano unaoweza Kuacha

Mwingiliano wa Kuacha una idadi ya sifa ambazo unaweza kubadilisha ili kubinafsisha tabia yake. Tabia hizi zimeorodheshwa kwenye jedwali hapa chini:

Sifa za Mwingiliano Zinazoweza Kuacha Maelezo ya Mali
walemavu Ikiwa chaguo hili ni kweli, basi utendakazi wa mwingiliano unaoweza kudondoshwa hapo awali umezimwa. Thamani chaguo-msingi si kweli
kukubali Hupunguza seti ya vipengele vinavyohamishika ambavyo kipengele kinachopokea kitajibu. Thamani chaguo-msingi ni *, ambayo inalingana na kipengele chochote
activeClass Inafafanua darasa ambalo litagawiwa kujibu tukio la kuwezesha na kuondolewa kwa kujibu tukio la kuzima
hoverClass Inafafanua darasa litakalowekwa kujibu tukio la juu na kuondolewa kwa kujibu tukio la nje
uvumilivu Inafafanua kiwango cha chini cha mwingiliano ambapo tukio la kupita kiasi hutokea
Kuweka kikomo vipengele vinavyoruhusiwa kuhamishwa

Unaweza kudhibiti seti ya vipengee vinavyoweza kudondoshwa ambavyo vitakubaliwa na kipengee chenye utendakazi unaoweza kuathiriwa kwa kutumia chaguo la kukubali. Thamani ya chaguo la kukubali inapaswa kuwekwa kwa kiteuzi. Kwa hivyo, matukio ya mwingiliano yanayoweza kuangusha yatatokea tu ikiwa kipengele kinachosogezwa kinalingana na kiteuzi kilichobainishwa. Mfano unaolingana umetolewa hapa chini:

... .inaweza kuburutwa, #inaweza kudondoshwa (ukubwa wa herufi: kubwa; mpaka: nyeusi nyembamba; pedi: 10px; upana: 100px; panga maandishi: katikati; rangi ya mandharinyuma: lightgray; ukingo: 4px;) #inayodondoshwa (padding : 20px; nafasi: kabisa; kulia: 5px;) $(function() ( $(".draggable").draggable(); $("#droppable").droppable(( drop: function(tukio, ui) ( ui.draggable.text("Left") ), wezesha: function() ( $("#droppable").css(( border: "medium double green", backgroundColor: "lightGreen")); ), zima: kazi () ( $("#droppable").css("mpaka", "").css("background-color", ""); ), kubali: "#drag1" )); )); Ondoka hapa Kipengele cha 1 Kipengele 2 Tekeleza mfano

Katika mfano huu kuna vipengee viwili vinavyoweza kukokotwa na vitambulisho buruta1 na buruta2. Wakati wa kuunda kipengee cha kupokea, tunatumia chaguo la kukubali, ambalo tunaonyesha kuwa kipengele cha drag1 pekee ndicho kitakuwa kipengele kinachokubalika kuhamishwa.

Unapoburuta kipengee cha buruta1, utaona athari sawa na katika mifano iliyotangulia. Kwa nyakati zinazofaa, matukio ya kuwezesha, kuzima, juu na nje yatafutwa kwa kipengele cha kupokea. Wakati huo huo, ikiwa utaburuta kipengee cha buruta2 ambacho hakilingani na kiteuzi kilichobainishwa katika kigezo cha kukubalika, basi matukio haya hayatafutwa. Kipengele hiki kinaweza kuhamishwa kwa uhuru, lakini haitatambulika na kipengele cha kupokea.

Angalia mabadiliko katika jinsi tunavyochagua kipengee kinachokubalika cha kuelea ambacho tutaita njia ya maandishi(). Wakati kulikuwa na kipengee kimoja tu cha kusonga kwenye hati, sifa ya kitambulisho ilitosha kwa hii:

Drop: function() ( $("#draggable").text("Left") ),

Katika mfano huu, kuna vipengele viwili vinavyoweza kuelea, na kuchagua kwa sifa ya kitambulisho haitatoa matokeo yaliyohitajika, kwa kuwa maandishi katika kesi hii yatabadilika kila wakati katika kipengele sawa cha kuelea, bila kujali ni ipi inayokubalika kwa kipengele cha kupokea.

Suluhisho ni kutumia kitu cha ui, ambacho jQuery UI hutoa kama hoja ya ziada kwa kila kidhibiti tukio. Sifa inayoweza kukokotwa ya kitu cha ui hurejesha kitu cha jQuery kilicho na kipengele ambacho mtumiaji huburuta au kujaribu kudondosha kwenye kipengele kinacholengwa, na kuruhusu kipengele kinachohitajika kuchaguliwa kama hii:

Kudondosha: function(tukio, ui) ( ui.draggable.text("Left") ),

Kubadilisha kizingiti cha kuingiliana

Kwa chaguo-msingi, tukio la juu hutokea tu wakati angalau 50% ya kipengele kinachosogezwa kinaingiliana na kipengele kinachopokea. Kiasi cha mwingiliano huu wa kizingiti kinaweza kubadilishwa kwa kutumia chaguo la uvumilivu, ambalo linaweza kuchukua maadili yaliyoonyeshwa kwenye jedwali hapa chini:

Thamani mbili ninazotumia mara nyingi zinafaa na zinaguswa kwa sababu zinaleta maana zaidi kwa watumiaji. Ninatumia fit wakati kipengele kilichoburutwa kinahitaji kubaki katika eneo la kipengele cha kupokea kilipohamishiwa, na kugusa wakati kipengele kilichoburutwa kinahitaji kurudi kwenye nafasi yake ya asili (mfano utatolewa hapa chini). Mfano wa kutumia vigezo vya kufaa na kugusa umepewa hapa chini:

Thamani ya clone inaiambia jQuery UI kuunda nakala ya kipengele kinachohamishwa, pamoja na yaliyomo ndani yake, na kutumia matokeo kama kipengele cha msaidizi. Matokeo yanaonyeshwa kwenye takwimu:

Kipengele cha msaidizi huondolewa mtumiaji anapoachilia kitufe cha kipanya juu ya kipengele kinachosogezwa, na kuacha kipengele kikisogezwa na kipengee cha kupokea katika nafasi zao za awali.

Kama inavyoonyeshwa kwenye mchoro, kipengele asili kinachosogezwa kinasalia mahali pake na ni kipengele kisaidizi pekee kinachosogea karibu na skrini kufuatia kielekezi cha kipanya. Ikiwa saizi ya kipengee kilichohamishwa ni kubwa, kama katika mfano wetu, basi inashughulikia vipengele vingine vya hati, hivyo itakuwa vigumu kwa mtumiaji kufuatilia nafasi ya kipengele cha kupokea. Shida hii inaweza kushughulikiwa kwa kutoa kazi kama thamani ya chaguo la msaidizi, kama inavyoonyeshwa kwenye mfano hapa chini:

... $(kazi() ( $("div.draggable")..png"/>") )); $("#kikapu").droppable(( activeClass: "active", hoverClass: "hover")); )); ...Endesha mfano

Mtumiaji anapoanza kuburuta kipengee, jQuery UI huita kitendakazi kilichobainishwa na kigezo cha msaidizi na hutumia kipengee kilichorejeshwa kama kitu cha kuburuzwa. Katika kesi hii, ninatumia jQuery kuunda kipengee cha img. Matokeo yanaonyeshwa kwenye takwimu:

Picha ndogo hufanya kama proksi ya kipengele kinachosogezwa, na hivyo kurahisisha kufuatilia vipengele vingine kwenye hati.

Kitu cha ui ambacho kiolesura cha jQuery hupitisha kwa matukio ya mwingiliano yanayoweza Kuangusha kina kipengele cha msaidizi, na kipengele hiki kinaweza kutumika kudanganya kisaidizi kinapovutwa. Mfano wa kutumia mali hii kwa kushirikiana na matukio ya juu na nje umepewa hapa chini:

... $(kazi() ( $("div.draggable")..png"/>") )); $("#basket").droppable(( activeClass: "active", hoverClass: "hover", over: function(event, ui) ( ui.helper.css("border", "thick solid #27e6ed") ) , nje: kazi(tukio, ui) ( ui.helper.css("mpaka", "") ) )); )); ...

Hapa matukio ya juu na nje na mali ya ui.helper hutumiwa kuonyesha mpaka karibu na kipengele cha msaidizi kinapoingiliana na kipengele cha kupokea. Matokeo yanaonyeshwa kwenye takwimu:

Nenda kwenye kingo za vipengele

Kwa kutumia chaguo la snap, unaweza kuhakikisha kuwa kipengele kilichosogezwa "kinavutia" kwenye kando ya vipengele vilivyo karibu na ambavyo hupita. Chaguo hili linakubali kiteuzi kama thamani. Kipengele kinachosogezwa kitapita kwenye kingo za kipengele chochote kinacholingana na kiteuzi kilichobainishwa. Mfano wa kutumia chaguo la snap umepewa hapa chini:

Endesha kiolesura cha jQuery mfano #snapper, .draggable, .droppable (ukubwa wa fonti: kubwa; mpaka: nyeusi thabiti; pedi: 4px; upana: 150px; panga maandishi: katikati; rangi ya usuli: lightgray; ukingo-chini: 10px ;).inayoweza kudondoshwa (pembezoni-kulia: 5px; urefu: 50px; upana: 120px) #dropContainer (nafasi: kabisa; kulia: 5px;) div span (nafasi: jamaa; juu: 25%) .droppable.active (mpakani: kijani kibichi cha wastani) .droppable.hover (chini-chini-rangi: kijani kibichi) #snapper (nafasi: kabisa; kushoto: 35%; mpaka: nyeusi mango ya wastani; upana: 180px; urefu: 50px) $(function() ( $(" div.draggable").draggable(( snap: "#snapper, .droppable", snapMode: "zote mbili", snapTolerance: 50 )); $("#basket").droppable(( activeClass: "active", hoverClass: "hover"));)); Mkokoteni Piga hapa Niburute

Wakati kitu kinachosonga kinakaribia moja ya vitu vinavyofaa, ni kana kwamba "kivutiwa" nacho kwa njia ambayo kingo zao za karibu zinagusa. Kwa kuunganisha vile, unaweza kuchagua kipengele chochote, si tu kipengele cha kupokea. Katika mfano huu, niliongeza kipengele cha div na kuweka chaguo la snap kwa thamani inayochagua kipengele hicho pamoja na kipengele cha kupokea kwenye hati.

Kuna chaguzi kadhaa za wasaidizi ambazo hukuruhusu kubinafsisha kwa usahihi tabia ya kushikilia ya vipengee. Mmoja wao ni chaguo la snapMode. Kwa msaada wake unaweza kutaja aina ya kumfunga. Thamani zifuatazo zinaruhusiwa: ndani(piga kwenye kingo za ndani za vitu), nje(snap kwa kingo za nje za vipengele) na zote mbili(snap kwa kingo zote; chaguo-msingi).

Chaguo la snapTolerance hukuruhusu kubainisha ni umbali gani kipengee kilichoelea kinapaswa kukaribia ukingo wa kipengele kinacholengwa kabla ya kufyatua kutokea. Thamani chaguo-msingi ni 20, ambayo inamaanisha saizi 20. Mfano hutumia thamani ya 50, ambayo inalingana na snap kwa mbali zaidi. Ni muhimu sana kuchagua thamani sahihi kwa chaguo hili. Ikiwa thamani ya snapTolerance ni ya chini sana, mtumiaji anaweza asitambue athari ya kupiga picha, na ikiwa ni ya juu sana, kipengele kinachosogezwa kitaanza kufanya miruko isiyotarajiwa, ikipita kwa vipengele vya mbali.

Hivi majuzi nilipata wazo la kuanza kutengeneza mchezo wa Android. Kuanza, niliamua kuandika chess. Ilionekana kwangu kuwa teknolojia ya Drag na Drop itakuwa kamili kwa ajili ya kutekeleza utaratibu wa kusonga takwimu. Kwa wasiojua, ninaona kuwa njia ya kuburuta na kuangusha ni uwezo wa kuburuta kitu kimoja cha picha hadi kingine na kufanya kitendo kimoja au kingine baada ya kukitoa. Mfano rahisi zaidi ni kufuta njia ya mkato kutoka kwa eneo-kazi la Kompyuta yako kwa kuiburuta hadi kwenye tupio. Kwa "kutupa" lebo kwenye tupio, tunauambia mfumo kuwa tunataka kulazimisha vitu hivi viwili kuingiliana. Mfumo hupokea ishara yetu na huamua ni hatua gani inapaswa kuchukua. Kuburuta na kuangusha kumeenea kwa sababu ya uwazi wake angavu. Mbinu hii inaungwa mkono na matumizi yetu ya kuingiliana na vitu vya ulimwengu halisi na hufanya kazi vizuri katika mazingira ya mtandaoni. Kuhusu chess, kutumia buruta na kudondosha ni rahisi kiteknolojia kuamua kisanduku ambapo mtumiaji aliburuta kipande, kwani hakuna haja ya kuhesabu nambari ya seli kutoka kwa viwianishi vya mahali pa kutolewa. Kazi hii itachukuliwa na mashine ya mtandaoni.

Madhumuni ya kutumia teknolojia ya Drag n Drop

Kutumia teknolojia ya kuvuta na kuacha huniruhusu kutatua shida tatu kwa bidii kidogo:

  • Taswira ya maendeleo. Wakati mtumiaji anagusa umbo na kuanza kuisogeza karibu na skrini, umbo hilo hubadilishwa na muundo mdogo. Kwa hivyo, mtumiaji anaelewa kuwa takwimu imetekwa.
  • Nilipunguza eneo la harakati za takwimu kwa saizi ya bodi.
  • Ikiwa mtumiaji atatoa kipande mahali pabaya, kinapaswa kurudi kwenye nafasi yake ya asili.
  • Kazi zimeainishwa, wacha tuanze kuzitekeleza.

    ImageView badala juu ya kugusa

    Maumbo yangu yote ni vitu vya ImageView. Kwa bahati mbaya, ikawa kwamba utekelezaji wa Drag & Drop katika Android hairuhusu "moja kwa moja nje ya sanduku" kuchukua nafasi ya picha ya kitu wakati inaguswa. Walakini, kazi hii inaweza kutatuliwa kabisa kwa kutumia API. Tutahitaji kufanya idadi ya hatua rahisi:

  • Unda kitu cha DragShadowBuilder.
  • Piga njia ya startDrag.
  • Ficha Taswira yetu ya Picha, inayoonyesha umbo, kwa kuita njia ya Kuonekana kwa kuweka na kigezo cha View.INVISIBLE. Matokeo yake, kitu cha DragShadowBuilder pekee kitakachobaki kwenye skrini, ambacho kitaashiria kwa mtumiaji kwamba sura imechukuliwa.
  • Vitendo hivi lazima vitekelezwe katika kidhibiti cha OnTouchListner cha kipengee cha ImageView. Ili kufanya hivyo, wacha tufute njia ya onTouch:

    @ Batilisha boolean ya umma onTouch(Tazama mwonekano, MotionEvent motionEvent) ( ikiwa (motionEvent. getAction() == MotionEvent. ACTION_DOWN) ( ClipData clipData= ClipData. newPlainText("" , "" ) ; Tazama. DragShadowBuilder dsb=ShadowBuilder Drag=Mwonekano mpya. (mtazamo) ; tazama. startDrag(clipData, dsb, view, 0 ) ; tazama. setVisibility(View. INNVISIBLE) ; rudisha true ; ) vinginevyo ( rudisha uongo ; ) )

    Kila kitu ni rahisi sana. Kwa hiyo, tumepanga uingizwaji wa picha, hebu tuendelee kwenye kazi inayofuata.

    Kuweka kikomo eneo la kuburuta kwa kitendakazi cha kuangusha

    Kuna tatizo katika kuweka kikomo eneo la kukokota. Jambo ni kwamba ikiwa utaachilia kipande nje ya ubao, tukio la kushuka halitatokea, kwani mtumiaji alitoa kitu hicho kwenye nafasi tupu, na hakuna kitu cha kuingiliana nacho. Matokeo yake, takwimu haitarudi kwenye hali yake ya awali na itabaki siri milele. Nilitumia muda mwingi kusoma hati, lakini bado sikuweza kupata njia ya kuweka kikomo eneo la kuburuta na kudondosha la vitu. Ufahamu ulikuja ghafla. Siitaji kuweka kikomo eneo hilo hata kidogo, ninahitaji kujua ikiwa mtumiaji alitoa umbo kwa usahihi au la.

    Kuamua Toleo Sahihi
    Nilipata majibu ya maswali yangu katika sehemu ya "kushughulikia matukio ya kuburuta" kwenye tovuti ya Wasanidi Programu wa Android. Hapa kuna mambo machache muhimu:

  • Mtumiaji anapomaliza kuburuta, tukio la ACTION_DRAG_ENDED linatolewa katika kidhibiti cha DragListeners.
  • Katika DragListener, unaweza kupata maelezo zaidi kuhusu utendakazi wa kuburuta kwa kupiga njia ya DragEvent.getResult().
  • Ikiwa DragListener itarejesha kweli kwa kujibu tukio la ACTION_DROP, simu ya kupataResult pia itarudi kuwa kweli, vinginevyo itarudi kuwa sivyo.
  • Kwa hivyo ninahitaji kukatiza tukio la ACTION_DRAG_ENDED na kupiga njia ya getResult. Ikiwa inarudi kuwa ya uwongo, basi mtumiaji ameburuta kipande hicho kwenye ubao na ninahitaji kuweka ImageView kwa hali inayoonekana.

    @ Batilisha boolean ya umma onDrag(Tazama mwonekano, DragEvent dragEvent) ( int dragAction= dragEvent. getAction() ; Tazama dragView= (Tazama) dragEvent. getLocalState() ; ikiwa (dragAction== DragEvent. ACTION_DRAG_EXITED ina uongo; mwingine)= if (dragAction== DragEvent. ACTION_DRAG_ENTERED) ( containsDragable= true ; ) vinginevyo ikiwa (dragAction== DragEvent. ACTION_DRAG_ENDED) ( if (dropEventNotHandled(dragEvent) ) ( DragView. setVisibility(View. )VIction=Dra = DragEven ;)

    Sasa mtumiaji anaweza kutolewa takwimu popote, na hakuna kitu kibaya kitatokea.

    Ufafanuzi wa hatua halali

    Sehemu ya mwisho ya makala imejikita katika kuangalia uhalali wa hatua ambayo mtumiaji anajaribu kufanya. Kabla ya kujadili mada hii kwa undani, nitatoa maelezo mafupi kuelezea muundo wa maombi yangu. Ubao wa chess unawakilishwa kama TableLayout, na kila seli ni mtoto wa LinearLayout na ina OnDragListener.

    Kwa kuongeza, kila OnDragListener inarejelea kitu cha "mpatanishi", ambacho kinashughulikia mwingiliano wa vitu vya mchezo na kukumbuka nafasi ya kisanduku cha sasa.

    Wakati mtumiaji anaburuta kipande juu ya seli, vitendo vifuatavyo vinawezekana:

  • Kwa kutumia tukio la ACTION_DRAG_ENTERED kuweka kigezo cha 'containsDraggable' kuwa kweli.
  • Kwa kutumia tukio la ACTION_DRAG_EXITED kuweka kigezo cha 'containsDraggable' kuwa sivyo.
  • Kwa kutumia tukio la ACTION_DROP kuuliza mpatanishi ikiwa inakubalika kuweka kipande kwenye kisanduku hiki.
  • Chini ni nambari inayotumia mantiki iliyoelezewa

    @ Batilisha boolean ya umma onDrag(Tazama mwonekano, DragEvent dragEvent) ( int dragAction= dragEvent. getAction() ; Tazama dragView= (Tazama) dragEvent. getLocalState() ; ikiwa (dragAction== DragEvent. ACTION_DRAG_EXITED ina uongo; mwingine)= if (dragAction== DragEvent. ACTION_DRAG_ENTERED) ( containsDragable= true ; ) vinginevyo ikiwa (dragAction== DragEvent. ACTION_DRAG_ENDED) ( if (dropEventNotHandled(dragEvent) ) ( DragView. setVisibility(View. )VIction=Dra = DragEvent.ACTION_DROP& amp;& amp; containsDragable) ( checkForValidMove((ChessBoardSquareLayoutView) tazama, burutaTazama) ; dragView. setVisibility(View. VISIBLE) ; ) rudisha kweli ; )

    Kama unavyoona, bila kujali kama hoja ni halali au la, ImageView inahamishiwa kwenye hali inayoonekana. Nilitaka mtumiaji kuona umbo likisogea. Nilitaja hapo awali kuwa seli ni mtoto wa LayoutView. Hii inafanywa ili iwe rahisi kuhamisha ImageView kutoka seli hadi seli. Ifuatayo ni msimbo wa njia ya checkForValidMove, ambayo inaonyesha jinsi ImageView inavyosonga.

    utupu wa faragha checkForValidMove(ChessBoardSquareLayoutView mwonekano, Tazama burutaMtazamo) (kama (mpatanishi. isValidMove(view) ) ( ViewGroup owner= (ViewGroup) dragView. getParent() ; mmiliki. removeView(dragView) ; view. addGrag(dragView) ty; tazama. (Mvuto. CENTER); tazama. showAsLanded() ; mpatanishi. handleMove(view) ; ) )

    Natumaini makala hii itakusaidia wakati wa kuendeleza miradi yako mwenyewe.

    Ambapo vipengele vya GUI vinatekelezwa kwa kutumia pseudographics) kwa kutumia kipanya au skrini ya kugusa.

    Njia hiyo inatekelezwa kwa "kukamata" (kwa kushinikiza na kushikilia kuu ( kwanza, kwa kawaida kitufe cha kushoto cha kipanya) cha kitu kinachoonyeshwa kwenye skrini ya kompyuta, kinapatikana kwa utaratibu kwa ajili ya uendeshaji kama huo, na kukihamisha hadi mahali pengine (kubadilisha eneo) au "kukitupa" kwenye kipengele kingine (kuita kitendo kinacholingana kilichotolewa. kwa mpango). Kuhusiana na madirisha (pia yenye uwezo wa kusonga kwa njia sawa), neno hili kwa kawaida halitumiwi.

    Vitendo vya kimsingi na mifano rahisi zaidi ya vitendo vya kuburuta na kudondosha ni: kusogeza kitu, kusogeza kitu kutoka kwa paneli hadi kwenye jopo, ingawa katika mifumo ya uendeshaji ya kisasa ya kuvuta-kudondosha hutumiwa sana na ni mojawapo ya njia kuu za kuingiliana nayo. kompyuta katika kiolesura cha picha.

    Vipengee vya kusongeshwa vinaweza kuwa vipengee vifuatavyo vya kiolesura: aikoni za Kompyuta ya mezani, upau wa vidhibiti zinazoelea, njia za mkato za programu kwenye Upau wa Shughuli (kuanzia na Win XP), vipengele vya TreeView, mfuatano wa maandishi, kisanduku cha DataGridView, pia vipengele vya OLE. Vitu vinaweza kusonga ndani ya eneo fulani, ndani ya dirisha moja, kati ya paneli za dirisha moja na kati ya madirisha tofauti.

    Tukio la kuburuta lazima lianzishwe na kitendo fulani cha mtumiaji. Mara nyingi, kitendo hiki ni kubonyeza kitufe cha kushoto cha kipanya kwenye kipengee (tukio hili linaitwa MouseDown), ambalo linaweza kuhamishwa kwenye chombo chake. Baadhi ya vipengele vina matukio yao ya kuanza ya kuburuta-n-tone - kwa mfano, TreeView ina tukio la ItemDrag.


    Wikimedia Foundation. 2010.

    Tazama "Buruta-angusha" ni nini katika kamusi zingine:

      Buruta na uangushe - 〈[ dræg ənd drɔ̣p] n.; ; unz.; EDV〉 das Anklicken eines Objektes, das auf dem Computerbildschirm (in eine andere Datei bzw. an eine andere Stelle) verschoben u. dort wieder losgelassen wird [engl. buruta "ziehen" + na "und" + dondosha "imeanguka… … Universal-Lexikon

      Njia ya kutekeleza vitendo vyovyote katika violesura vya picha vya mtumiaji, vinavyohusisha matumizi ya kipanya cha kompyuta. Ilitafsiriwa kutoka kwa Kiingereza maana yake halisi: buruta na kutupa. Kitendo kinafanywa kwa kufanya kazi kuonekana kwenye skrini... ... Kamusi ya maneno ya biashara

      buruta na uangushe - (computing) Kusogeza aikoni, faili, n.k kwenye skrini kwa kutumia kipanya na kuitoa katika sehemu tofauti (kivumishi cha buruta na dropˈ) Ingizo Kuu: buruta ... Kamusi muhimu ya kiingereza.

      buruta na uangushe - IT kuhamisha kitu kutoka eneo moja la skrini ya kompyuta hadi nyingine kwa kutumia kipanya: »Programu hukuruhusu kuburuta na kuangusha vipengele vya picha za ukurasa, maandishi, n.k. popote unapotaka. Ingizo Kuu: buruta...Masharti ya kifedha na biashara

      buruta-dondosha - UK US kitenzi n.; Mwa.:; Pl.: unz.; EDV〉 das Anklicken eines Objektes, das auf dem Computerbildschirm (in eine andere Datei bzw. an eine andere Stelle) verschoben u. dort wieder losgelassen wird)