当前位置: 首页 > Web前端 > HTML

使拖放更加用户友好?如何自定义拖拽样式

时间:2023-03-27 23:47:19 HTML

娆㈣繋鍏虫敞寰俊鍏紬鍙凤細鍓嶇渚︽帰鍦╳eb寮€鍙戜腑缁忓父浼氶亣鍒伴渶瑕佹嫋鎷界殑鍦烘櫙銆備负浜嗘洿濂界殑浣撻獙锛屾嫋鎷藉尯鍩熼渶瑕佹湁涓€瀹氱殑鍙樺寲鎻愮ず锛屽憡璇夌敤鎴凤細鈥滅幇鍦ㄥ彲浠ユ斁杩欓噷浜唦鈥濓紝姣斿鏈枃灏变粙缁嶄簡濡備綍鑷畾涔夋嫋鎷芥牱寮忥紝鎺ヤ笅鏉ヤ竴鎺㈢┒绔熻繖娆″浣曡嚜瀹氫箟dragover鏍峰紡銆?銆乨ragenter鍜宒ragleave瑕佽揪鍒拌繖鏍风殑鏁堟灉锛屽鐞哾ragenter鍜宒ragleave鏄皯涓嶄簡鐨勩€傚綋琚嫋鍔ㄧ殑鍏冪礌杩涘叆涓€涓湁鏁堢殑鏀剧疆鐩爣鏃讹紝浼氳Е鍙慸ragenter浜嬩欢銆傚綋琚嫋鍔ㄧ殑鍏冪礌绂诲紑鏈夋晥鐨勬斁缃洰鏍囨椂锛屼細瑙﹀彂dragleave浜嬩欢銆傚亣璁炬湁杩欐牱涓€涓粨鏋勪綋锛屽叾涓璱mg鏄嫋鍔ㄧ洰鏍囷紝div銆俢ontent鏄斁缃洰鏍囥€?img>

鐒跺悗鐩戝惉document.addEventListener('dragleave',function(ev){console.log('dragleave',ev.target)})document.addEventListener('draenter',function(ev){console.log('draenter',ev.target)})閭d箞鍦ㄥ皢img鎷栧叆div.content鐨勮繃绋嬩腑锛岃偗瀹氫細瑙﹀彂dragenter鍜宒ragleave浜嬩欢锛屽涓嬪鏋滈〉闈㈡瘮杈冪畝鍗曪紝鑷畾涔夋嫋鎷借繃绋嬩篃姣旇緝瀹规槗function(ev){ev.target.toggleAttribute('over',true);})閫氳繃娣诲姞over灞炴€ц嚜瀹氫箟鏍峰紡銆俢ontent[over]{outline:4pxsolidslateblue;}濡備笅鏁堟灉鏄笉鏄緢绠€鍗曪紵鍏跺疄鍦ㄥ疄闄呬娇鐢ㄤ腑杩樻槸鏈夊緢澶氬眬闄愭€х殑銆備笅闈㈠皢涓€涓€浠嬬粛銆?.褰撴斁缃洰鏍囨湁瀛愬厓绱犳椂锛屽ぇ澶氭暟鎯呭喌涓嬶紝鏀剧疆鐩爣涓嶄负绌猴紝杩樻湁鍏朵粬瀛愬厓绱犮€傚鏋滀娇鐢ㄤ笂闈㈢殑鏂规硶锛屽氨浼氬嚭鐜伴棶棰樸€傜幇鍦紝鍋囪甯冨眬鏄繖鏍风殑锛屼负浜嗗尯鍒嗭紝鍙互缁欓渶瑕佹斁缃殑鍏冪礌鍔犱笂涓€涓睘鎬э紝姣斿allowdrop锛岃〃绀哄厑璁告斁缃?img>
涓嶅厑璁告斁缃?/div>
杩欓噷鎴戜滑閫氳繃灞炴€ф潵鍖哄垎document.addEventListener('dragleave',function(ev){if(ev.target.getAttribute('allowdrop')!==null){ev.target.toggleAttribute('over',false);}})document.addEventListener('dragenter',function(ev){if(ev.target.getAttribute('allowdrop')!==null){ev.target.toggleAttribute('over',true);}})鏁堟灉濡備笅锛屽彲浠ョ湅鍒帮紝褰撴嫋鍔ㄧ洰鏍囩粡杩囧瓙鍏冪礌鏃讹紝澶栧眰鏍峰紡宸茬粡涓㈠け銆傚師鍥犲叾瀹炲緢绠€鍗曘€傜┛杩囧瓙鍏冪礌鏃讹紝droptarget涔熶細瑙﹀彂dragleave浜嬩欢锛佹湁娌℃湁鍔炴硶涓嶈Е鍙戝畠锛熻繖閲屾湁涓ょ鏂瑰紡锛氫竴鏄彲浠ュ彇娑堝dragleave鐨勭洃鍚紝鍥犱负鍦ㄦ墽琛宒ragleave鏃讹紝鍏冪礌鏈韩骞朵笉鐭ラ亾鍗冲皢杩涘叆鍝釜鍖哄煙锛屽緢瀹规槗鈥滆浼も€濄€傝€屾槸姣忔dragenter锛屽厛鍘绘帀涓婁竴涓猟roptarget鐨勫睘鎬э紝鍐嶆坊鍔犱竴涓柊鐨勶紝鏈夌偣绫讳技tab鐨勬搷浣溿€傚叿浣撳疄鐜板涓嬶細varlastDrop=null;document.addEventListener('draenter',function(ev){if(lastDrop){lastDrop.toggleAttribute('over',false);}constdropbox=ev.target.closest('[allowdrop]');//鑾峰彇鏈€杩戠殑鏀剧疆鐩爣CSS鐨勮繖閲屾湁涓€涓潪甯哥畝鍗曠矖鏆寸殑鏂规硶锛岀洿鎺ョ鐢ㄥ瓙鍏冪礌鐨勯紶鏍囧搷搴旓紝濡備笅銆傚湪浠讳綍瀛愬厓绱犱笂锛岃繖鏄畬缇庣殑馃榿3銆備笂闈㈠灞傚祵濂楁斁缃洰鏍囩殑鏂规硶鍏跺疄鍙互瑙e喅澶ч儴鍒嗛棶棰橈紝姣曠珶澶ч儴鍒嗗満鏅兘鏄钩闈㈢殑銆備絾鏄紝鏈夋椂鍊欎細閬囧埌澶氬眰缁撴瀯锛屾瘮濡傚彲瑙嗗寲缂栬緫宸ュ叿锛屽挨鍏舵槸鐜板湪娴佽鐨勪綆浠g爜骞冲彴锛岄兘浼氭秹鍙婂埌澶氬眰缁撴瀯锛屽亣璁綡TML鏄繖鏍风殑
涓嶅厑璁告嫋鏀?/div>
If鎸夌収CSS鐨勫鐞嗘柟寮忥紙鐢↗S鐨勬柟寮忔病鏈夐棶棰橈級锛岀敱浜庢墍鏈夌殑瀛愬厓绱犻兘琚鐢ㄤ簡锛屾墍浠ラ噷闈㈢殑缁撴瀯鑷劧鏃犳硶鍝嶅簲锛岄偅涔堝浣曡閲岄潰鐨刣roptarget鍝嶅簲鍛紵鍏跺疄鍙渶瑕佹敼涓€涓嬩笂闈㈢殑CSS锛屽涓嬨€俢ontent[allowdrop][over]>*:not([allowdrop]){pointer-events:none;}杩欓噷浣跨敤>閫夋嫨鍣ㄨ〃绀哄彧閫夋嫨瀛愬厓绱犮€備笉鍖呮嫭鍚庝唬鍏冪礌锛岀劧鍚庢帓闄ゆ斁缃洰鏍囷紝杩欐牱灏卞彲浠ュ疄鐜板灞傚祵濂椼€傛晥鏋滃涓嬶紝鏄笉鏄畝鍗曠殑鍑哄鍛紵4.鍏朵粬浜や簰缁嗚妭銆備笉鐭ラ亾浣犳湁娌℃湁娉ㄦ剰鍒般€傚湪涓婇潰鐨勭ず渚嬩腑锛屽綋鎷栧姩寮€濮嬫椂锛岄紶鏍囧缁堝浜庤繖绉嶁€滃彲鏀剧疆鈥濈姸鎬侊紝鏃犺鏄湪鏀剧疆鐩爣鐨勫閮ㄨ繕鏄唴閮ㄣ€傝繖鏄洜涓鸿缃簡dragover灞炴€э紝鎵€浠ユ暣涓枃妗e彉鎴愪簡涓€涓彲鏀剧疆鐨勭洰鏍囷紝鍏佽瑙﹀彂drop浜嬩欢document.addEventListener('dragover',function(ev){ev.preventDefault()})濡傛灉浣犳兂瑕佷氦浜掓洿缁嗚吇锛屼綋楠屾洿濂斤紝閭d箞鍦ㄩ紶鏍囨寚閽堜笂涔熷彲浠ヨ繘涓€姝ヤ紭鍖栵紝杩涘叆droptarget鍚庡彲浠ュ彉鎴愯繖涓姸鎬侊紝濡備笅document.addEventListener('dragover',function(ev){constdropbox=ev.target.closest('[allowdrop]');if(dropbox){ev.preventDefault()}})鏁堟灉濡備笅锛堟敞鎰忛紶鏍囩殑鍙樺寲馃斀锛夊彟澶栵紝瀹冨簲璇ュ湪涓嬮檷绉婚櫎缁撴潫鍚庣殑over灞炴€?;}})杩欐牱灏卞疄鐜颁簡涓€涓畬鍏ㄩ€氱敤鐨勮嚜瀹氫箟鎷栨嫿鏁堟灉锛屽尯鍩熷唴鏈夊嚑鍗佹潯绾匡紝閲嶇偣绐佸嚭銆傚畬鏁翠唬鐮佸涓嬶細document.addEventListener('dragover',function(ev){constdropbox=ev.target.closest('[allowdrop]');if(dropbox){ev.preventDefault()}})document.addEventListener('drop',function(ev){ev.target.toggleAttribute('over',false);})document.addEventListener('dragleave',function(ev){if(ev.target.getAttribute('allowdrop')!==null){ev.target.toggleAttribute('over',false);}})document.addEventListener('draenter',function(ev){if(ev.target.getAttribute('allowdrop')!==null){ev.target.toggleAttribute('over',true);}})//鎴栬€呬笅闈㈢殑鏂瑰紡锛屼笉闇€瑕乨ragleave锛屼笉闇€瑕侀澶栫殑CSSvarlastDrop=null;document.addEventListener('dragenter',function(ev){if(lastDrop){lastDrop.toggleAttribute('over',false);}constdropbox=ev.target.closest('[allowdrop]');//鑾峰彇鏈€杩戠殑鏀剧疆鐩爣if(dropbox){dropbox.toggleAttribute('over',true);lastDrop=淇濈绠憋紱}})褰撶劧CSS鐨勯厤鍚堜篃寰堥噸瑕?;}[allowdrop][over]{/*鑷畾涔夋牱寮?/}[allowdrop][over]>*:not([allowdrop]){pointer-events:none;}杩欓噷鏄竴涓狢SS灏忔妧宸э紝鏂囨湰鎻愮ず涓婇潰渚嬪瓙鍦ㄦ嫋鎷借繃绋嬩腑鐨勫彉鍖栧叾瀹炴槸閫氳繃浼厓绱犲疄鏃跺彉鍖栫殑~澶у涔熷彲浠ユ煡鐪嬪湪绾块摼鎺ワ細customdragover锛坈odepen.io锛夋垨鑰卌ustomdragover锛坖uejin.cn锛夊彟澶栵紝濡傛灉闇€瑕佸畬鍏ㄨ嚜瀹氫箟鎷栨嫿锛屽彲浠ュ弬鑰冭繖涓」鐩細https://github.com/XboxYan/draggable-polyfill锛岄潪甯歌交閲忕骇锛?00琛屼唬鐮侊紝涓嶅奖鍝嶄笟鍔¢€昏緫锛岄潪甯搁€傚悎瀛︿範骞朵娇鐢紝娆㈣繋star~5.鎬荤粨涓庤鏄庝互涓婂氨鏄嚜瀹氫箟鎷栨嫿鏁堟灉鐨勫畬鏁村疄鐜帮紝涓嶇畻澶鏉傦紝浣嗘槸涔熸湁涓€浜涘皬鎶€宸э紝灏ゅ叾鏄疌SS鐨勪娇鐢ㄨ兘鍔涖€傚叾瀹炲湪杩欎釜鐗堟湰瀹炵幇涔嬪墠锛屾垜涔熷皾璇曡繃寰堝鍏朵粬鐨勫疄鐜帮紝浣嗘槸閮芥病鏈夎繖涓柟娉曠畝娲佹槑浜嗐€備笅闈㈡€荤粨涓€涓嬶細涓轰簡鏇村ソ鐨勪綋楠岋紝鍙互鍦ㄦ嫋鎷借繃绋嬩腑缁欑敤鎴烽€傚綋鐨勬敼鍙樻彁绀恒€備富瑕佸疄鐜版柟娉曞湪浜巇ragenter鍜宒ragleave銆傚綋鏀剧疆鐩爣鏈夊瓙鍏冪礌鏃讹紝涔熶細瑙﹀彂dragleave浜嬩欢銆傚鍘熼€昏緫鐨勫共鎵板彲浠ュ幓闄ragleave鏉ュ幓闄ゅ瓙鍏冪礌鐨勫共鎵般€俤ragenter闇€瑕佸厛鍒犻櫎骞舵坊鍔犮€侰SSpointer-events鍙互鍘婚櫎瀛愬厓绱犵殑骞叉壈銆傚鏋滄湁澶氬眰鍙斁缃粨鏋勶紝鍙互閫氳繃:not杩囨护鍙斁缃洰鏍囥€傞紶鏍囨寚閽堣繕鍙互鏀瑰杽浜や簰浣撻獙銆備笉瑕佸繕璁癉OM鎿嶄綔涓殑CSS锛岃繖涓€鐐归潪甯搁噸瑕併€傚綋鐒讹紝椤甸潰鎷栨斁鐨勪氦浜掔粏鑺傝繕鏄湁寰堝鐨勶紝姣斿鎷栨斁鎺掑簭杩囩▼涓殑鎸ゅ帇鍔ㄧ敾鏁堟灉銆傚緟浼氬啀鐮旂┒涓€涓嬶紝浜夊彇鎵惧埌涓€涓€氱敤鐨勮В鍐虫柟妗堛€傛渶鍚庯紝濡傛灉瑙夊緱瀵逛綘鏈夊ソ澶勫拰甯姪锛岃鐐硅禐銆佹敹钘忋€佽浆鍙戔潳鉂も潳娆㈣繋鍏虫敞寰俊鍏紬鍙凤細鍓嶇澶т睛鎺?/p>