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

HarmonyOS玩转ArkUI动效-水母动画

时间:2023-03-27 23:40:26 HTML

1.鍓嶈█鏈枃灏嗚缁嗚瑙f垜鍙備笌HarmonyOS銆愭寫鎴樼涓夐樁娈点€戠帺ArkUI鍔ㄦ晥鐨勯」鐩垜鐨勯」鐩簮鐮侊細銆愭寫鎴樼涓夐樁娈点€慗ellyfishAnimationOur鍔ㄧ敾鏁堟灉鍙傝€冿細cassie-codes鐨刯ellyfishSVG銆傚崕涓洪缚钂欐斁寮冧簡Java浣滀负楦胯挋鐨勫紑鍙戣瑷€锛屽紑鍙戜簡澹版槑寮廢I妗嗘灦ArkUI锛屽紑鍙戣瑷€鍙樻垚浜咥rkTS銆侫rkUI鏄竴涓敤浜庢瀯寤哄垎甯冨紡搴旂敤绋嬪簭鐣岄潰鐨勫0鏄庡紡UI寮€鍙戞鏋躲€侫rkTS鍩轰簬TypeScript锛堢畝绉癟S锛夌殑鎵╁睍锛屾槸TS鐨勮秴闆嗐€侫rkTS缁ф壙浜員S鐨勬墍鏈夌壒鎬с€備笅闈㈢敤涓€涓畝鍗曠殑渚嬪瓙鏉ヨ鏄嶢rkTS鐨勫熀鏈粍鎴愶細鏇村鍏充簬ArkUI鐨勪俊鎭紝鎰熷叴瓒g殑鍚屽鍙互鐐规蹇€熶笂鎵嬶紝杩涘叆姝i銆?.婧愮爜鐩綍缁撴瀯3.鎷嗚ВSVG寮€澶存垜浠彁鍒颁簡cassie-codesjellyfishSVG銆傚鏋滀綘寰楀埌杩欎釜SVG锛屼綘濡備綍浣跨敤绋嬪簭鏉ユ覆鏌撳畠锛?銆佺粍鎴愭垜浠畝鍖栦竴涓嬶紝鐪嬬湅瀹冪殑缁勬垚锛?!--涓轰簡鐩磋鐨勬煡鐪嬬粍鎴愮粨鏋勶紝鎴戜滑鍒犻櫎浜嗚矾寰勬暟鎹?-><璺緞绫?"瑙︽墜"/>鐐瑰嚮鏌ョ湅SVG鍏ㄩ儴鍐呭锛屾垜浠厛鏉ョ湅绗竴涓矾寰勬暟鎹細M226銆?1258.64c.778.682.7116.481.5525.15-.788.24-515.18-7.3723-3.110.84-4.6522.551.1732.524.657.377.7511.715.8121.25-2.338.67-7.3716.91-2.71264.268.687.754.348.14-3.39-12.140-24.28.77-36.78-16.91-12-27.75-2.71-44.237-12.1511.24-337.76-46.83z瀵逛簬SVG鐩稿叧鍐呭涓嶇啛鎮夌殑鍚屽鍙兘鐪嬩笉鎳傚畠锛屼綘鐢氳嚦鍙兘浼氭湁浜涙伡鐏紝涓嶈繃鍒潃鎬ワ紝鐪嬩笉鎳傛病鍏崇郴锛岃窡鐫€鎴戜滑寰€涓嬬湅锛屽瀹屼箣鍚庝綘涔熷彲浠ュ湪GSAP鍔ㄧ敾涓壘鍒颁竴浜涚浉鍏崇殑SVG缁冧範棰榩latform涓嬮潰绠€鍗曠湅涓€涓嬭矾寰勬暟鎹腑涓€浜涘父鐢ㄥ懡浠ょ殑鍚箟锛歁,m:Moveto:绉诲姩鍒帮紝绉诲姩鍒癓,l,H,h,V,v:Lineto:鐢荤嚎C,c銆丼銆乻锛氫笁娆¤礉濉炲皵鏇茬嚎Q銆乹銆乀銆乼锛氫簩娆¤礉濉炲皵鏇茬嚎A銆乤锛氭き鍦嗗姬鏇茬嚎Z銆亃锛氶棴鍚堣矾寰勮繖浜涘懡浠ゅ尯鍒嗗ぇ灏忓啓锛屽ぇ鍐欏瓧姣嶈〃绀虹粷瀵瑰潗鏍囷紝灏忓啓瀛楁瘝琛ㄧず鍛戒护鐩稿浜庡綋鍓嶄綅缃€傛洿澶氱粏鑺傚拰鐭ヨ瘑鐐硅鍙傝€冿細璺緞鏁版嵁鍛戒护瑙勮寖銆?.濡備綍鍦ˋrkUI涓粯鍒堕偅涔堟垜浠浣曞湪ArkUI涓娇鐢ㄨ繖涓矾寰勬暟鎹憿锛熸垜浠湪HarmonyOS鏂囨。涓湅鍒颁簡Path缁樺埗缁勪欢Path缁樺埗缁勪欢锛氭牴鎹粯鍒惰矾寰勭敓鎴愰棴鍚堢殑鑷畾涔夊舰鐘禤ath鎺ュ彛濡備笅锛歅ath(value?:{width?:number|string;height?:number|string;commands?:string})鍙傛暟鍚箟濡備笅锛氬弬鏁板悕绉板弬鏁扮被鍨嬪繀濉弬鏁拌鏄巜idthnumber鎴杝tring鍚﹁矾寰勬墍鍦ㄧ煩褰㈢殑瀹藉害榛樿鍊硷細0heightnumber鎴杝tring鍚﹁矾寰勬墍鍦ㄧ煩褰㈢殑楂樺害pathlocatedDefaultvalue:0commandsstringNo缁樺埗璺緞鐨勫懡浠ゅ瓧绗︿覆Defaultvalue:''瀹冭繕鏈夊緢澶氬叡鍚岀殑灞炴€э紝鎵€浠ユ垜浠妸姘存瘝鐨勭涓€涓矾寰勬暟鎹紶缁檆ommands璇曡瘯锛歅ath().commands('M226.31258.64c.778.682.7116.481.55....').fillOpacity(0.49).fill(Color.White)鎴戜滑鐪嬪埌绗竴涓Е鎵嬪垰鍒氳鎴戜滑娓叉煋浜嗐€傛槸涓嶆槸鎰熻寰堢畝鍗曪紵3銆佸厓绱犳爣绛緂杩欐椂鍊欏彲鑳芥湁鍚屽浼氶棶浜嗭紝璺緞澶栧眰鍖呰9鐫€涓€涓厓绱犳爣绛?gclass="...">锛岄偅涔堣繖涓厓绱犳爣绛?gclass="...">瀹冩槸鍋氫粈涔堢敤鐨勶紵闂緱濂金煈忦煆火煈忦煆伙紝杩欎釜g鐨勬剰鎬濇槸锛氱粍鍚堝璞$殑瀹瑰櫒锛屽姞鍦╣鍏冪礌涓婄殑transformation浼氬簲鐢ㄥ埌瀹冩墍鏈夌殑瀛愬厓绱犱笂銆傛坊鍔犲埌g鍏冪礌鐨勫睘鎬х敱鍏舵墍鏈夊瓙鍏冪礌缁ф壙銆傝繖閲屾湁涓皬鎻掓洸锛氭垜涓€寮€濮嬩篃鐘簡涓€涓敊璇紝鍦ㄥ崕涓虹殑瀹樻柟鏂囨。涓病鏈夌湅鍒癎roup缁勪欢銆備负浠€涔堜細鎯冲埌闆嗗洟锛熸綔鎰忚瘑璁や负ArkUI搴旇鍜屽叾浠栧钩鍙颁竴鏍凤紝搴旇鏈夌殑銆傚績鎯虫棦鐒舵槸缁勫悎瀵硅薄鐨勫鍣紝娌℃壘鍒癎roup锛岄偅Stack涓嶅氨瀹屼簡鍚楋紵鐒惰€岋紝浜嬪疄璇佹槑锛屼簨鎯呭苟娌℃湁鎯宠薄涓偅涔堢畝鍗曘€傚鏋滀娇鐢⊿tack鐩存帴鍖呰9Path锛屽彲鑳藉嚭鐜扮殑閿欒鏁堟灉濡備笅锛?/绫讳技濡備笅浠g爜锛歋tack(){Path().commands(...)...}.width('100%').height('100%')鎴戜滑鍙互鐪嬪埌鍐呭鐢诲ソ浜嗭紝浣嗘槸绂绘垜浠兂瑕佺殑鏁堟灉杩樺樊寰楀緢杩滐紝鐢氳嚦涓戦檵銆佷贡涓冨叓绯熴€傛槸浠€涔堝師鍥狅紵姣忎竴姝ョ殑澶辫触杩囩▼杩欓噷灏变笉澶氳浜嗮煒傦紝鍘熷洜鏄垜浠繕娌℃湁璁剧疆鈥滆矾寰勬墍鍦ㄧ煩褰㈢殑瀹介珮鈥濓紝鎵€浠ュ鏋滃儚涓嬮潰杩欐牱涓€涓€璁剧疆锛屾槸涓嶆槸鏄笉鏄お鍌讳簡锛烶ath().commands(...).width(...).height(...)鍚庢潵鍙堜粩缁嗘煡鐪婬armonyOS鐨勬枃妗o紝鍦ㄧ粯鍥剧粍浠朵腑鎵惧埌浜哠hape缁勪欢銆傛牴鎹畼鏂规枃妗o紝鏈?绉嶅惈涔夛細1.缁樺浘缁勪欢浠hape涓虹埗缁勪欢锛屽疄鐜扮被浼糞VG鐨勬晥鏋溿€?銆佺粯鍥剧粍浠跺崟鐙敤浜庡湪椤甸潰涓婄粯鍒舵寚瀹氱殑鍥惧舰銆傚埌鐩墠涓烘锛岃鎴戜滑鍥為【涓€涓嬬敱瀹藉害/楂樺害寮曡捣鐨勪竴浜涢棶棰樸€傛垜浠€氳繃SVGXML涓殑viewBox灞炴€ц幏鍙栧畠銆倂iewBox="00530.46563.1"viewBox灞炴€х殑鍊兼槸涓€涓垪琛紝鍖呭惈4涓弬鏁癿in-x,min-y,width鍜宧eight锛屼互绌烘牸鎴栭€楀彿闅斿紑銆備笉鍏佽瀹藉害鍜岄珮搴︿负璐熷€笺€傚鏋渨idth鎴杊eight鐨勫€肩瓑浜?锛屽垯鍏冪礌涓嶄細琚覆鏌撱€?svgxmlns="http://www.w3.org/2000/svg"viewBox="00530.46563.1">......杩欓噷鎴戜滑浣跨敤Shape缁勪欢涓殑viewPort灞炴€ф柟娉曟潵璁剧疆閲岄潰鐨勫搴iewBox鍜宧eight鍥犳锛屾垜浠彲浠ラ€氳繃浠ヤ笅鏂瑰紡瀹炵幇SVG鐨勭瓑浠风墿锛?gclass="...">绛夊悓浜庯細Shape(){Path().commands('....').fill(...)Path().commands('...').fill(...)}.viewPort({width:'530.46px',height:'563.1px',})鍙兘杩樻湁鍚屽闂紝涓轰粈涔堝崟浣嶆槸PX锛熷ソ闂馃憦馃徎馃憦馃徎锛屾垜瑙夊緱杩欓噷鏈変竴绡囨枃绔犺В閲婄殑寰堣缁嗭細涓轰粈涔坴iewBox涓殑鍗曚綅鏄痯x锛烻VG鏈€閲嶈鐨勫唴瀹瑰凡缁忔媶瑙d粙缁嶃€?銆丗eTurbulence杩欐椂鍊欏彲鑳藉彟涓€涓悓瀛﹁闂簡锛宖eTurbulence鍦⊿VG涓湁浠€涔堢敤锛?filterid="turbulence"filterUnits="objectBoundingBox"x="0"y="0"width="100%"height="100%">feTurbulence鍚箟锛歋VG婊ら暅浼氫骇鐢熷櫔澹帮紝鐢ㄦ潵妯℃嫙涓€浜涜嚜鐒剁幇璞★紝姣斿锛氫簯銆佺伀鍜岀儫锛屾湁鍔╀簬鐢熸垚澶嶆潅鐨勭汗鐞嗭紝鏁堟灉濡傚ぇ鐞嗙煶鎴栬姳宀楀博銆傜偣鍑绘煡鐪媐eTurbulence浜嗚В鏇村閭d箞濡備綍鍦ˋrkUI涓疄鐜拌繖涓晥鏋滃憿锛烪armonyOS鏂囨。涓殑Shape缁勪欢鏈変竴涓狹esh灞炴€с€傛寜鐞嗚鑳借揪鍒拌繖鏍风殑鏁堟灉銆傛垜鎻愪氦浜嗕竴浠藉伐浣滃崟骞惰闂簡缃戞牸灞炴€с€傚畼鏂圭粰鎴戠殑鍥炲鏄細鎵€浠ヨ繖涓」鐩笉鑳戒娇鐢∕esh鐗规€с€傜幇鍦紝鏈熷緟瀹樻柟鏇存柊銆?.鍒朵綔鍔ㄧ敾鍗庝负瀹樻柟瀵瑰弬涓庢寫鎴樼殑瑕佹眰鏄細鍙傝禌鑰呴渶瑕侊細鈶犱娇鐢╝nimateTo瀹炵幇鏄惧紡鍔ㄧ敾锛屸憽浣跨敤animation涓虹粍浠舵坊鍔犲睘鎬у姩鐢汇€傜偣鍑绘煡鐪嬪姩鐢诲睘鎬у姩鐢伙紝鐐瑰嚮鏌ョ湅animateTo鏄剧ず鍔ㄧ敾锛屾墍浠ユ垜浠寜鐓у畼鏂硅姹傚啓浜嗕竴涓按姣嶅姩鐢诲叆鍙c€傛垜浠殑鏁版嵁鐘舵€佸瓨鍌ㄦ斁鍦↗ellyFishViewModel涓€傛按姣嶇殑鐪ㄧ溂浣跨敤animateTo閫氳繃鏄剧ず鍔ㄧ敾淇敼鏉ュ疄鐜扮湪鐪兼晥鏋滐細姘存瘝鐪肩潧Y杞寸殑缂╂斁姣斾緥鍜屼笉閫忔槑搴︺€傛垜浠畝鍗曠湅涓€涓嬬湪鐪煎姩鐢伙細blinkAnimateTo(){animateTo({duration:150,curve:Curve.EaseOut,iterations:1,playMode:PlayMode.Normal,onFinish:()=>{//闂溂鍚?resume鍥炲埌鐫佺溂鐘舵€乼his.blinkScale=this.blinkScale==0.3?1:0.3this.blinkAlpha=this.blinkAlpha==0?1:0}},()=>{this.blinkScale=this.blinkScale==0.3?1:0.3this.blinkAlpha=this.blinkAlpha==0?1:0})}鐒跺悗璁剧疆缂╂斁鍜岄€忔槑搴﹀睘鎬ц鎴戜滑鐨勬按姣嶇溂鐫涚湪鐪笺€傝繖鏄乏鐪间唬鐮佺殑涓€閮ㄥ垎锛歋hape(){Path().fill(...).commands(...)}.scale({y:this.blinkScale,centerY:'233px'}).opacity(this.blinkAlpha).viewPort({width:'530.46px',height:'563.1px'})杩欓噷鍙兘鏈変簺鍚屽锛屽張瑕佹彁闂簡銆傚浣曡缃缉鏀惧拰centerY锛熷綋鐒舵垜浠渶瑕佽缃缉鏀剧殑涓績鐐癸紝鐜板湪鏄鍑哬杞寸殑锛屾墍浠ユ垜浠渶瑕侊細璁剧疆Y杞寸殑涓績鐐癸紝鍚﹀垯浼氬亸銆傞偅涓轰粈涔堟槸233px鍛紵闂緱濂斤紝鎴戜滑鐪嬩竴涓嬪乏鐪肩殑pathData锛歁262233.63a3.13.1010-33.193.13.10003-3.19z涓婇潰鎴戜滑鍦ㄥ弽姹囩紪SVG鐨勬椂鍊欙紝寮曞叆浜哅:鐨勫惈涔夊埌move鍒颁簡锛屽ぇ鍐欏瓧姣嶇殑鎰忔€濇槸锛氱粷瀵瑰潗鏍囷紝褰撶劧浣犱篃鍙互濉?33.63px銆傛垜浠暣涓按姣嶇殑韬綋鏄浣曚笂涓嬭繍鍔ㄧ殑锛熸垜浠娇鐢ㄥ睘鎬у姩鐢籥nimation鏉ユ洿鏂扮粍浠跺睘鎬ranslate涓殑y杞存暟鎹紝瀹炵幇涓婁笅绉诲姩鐨勫姩鐢汇€傛垜浠畝鍗曠湅涓€涓嬩笅闈㈣繖娈典吉浠g爜锛屽畠鏄浣曡繛缁笂涓嬬Щ鍔ㄧ殑锛歋tack(){//姘存瘝浣撳厓绱犲垎缁?..}.translate({y:this.translateY}).onAreaChange(()=>{this.translateY=-30}).animation({duration:3000,//鍔ㄧ敾鎸佺画鏃堕棿iterations:1,//鎾斁娆℃暟playMode:PlayMode.Normal,//鍔ㄧ敾妯″紡onFinish:()=>{//鍥炶皟褰撳姩鐢绘挱鏀惧畬this.translateY=this.translateY==0?-30:0}})鎵€浠ユ垜浠幇鍦紝璁╂按姣嶇殑鏁翠釜韬綋鍏冪礌涓婁笅绉诲姩锛屽畠涓嶄細鍋滄銆傞偅涔堟按姣嶇殑鑴告槸濡備綍涓婁笅宸﹀彸绉诲姩锛屼笌韬綋涓嶅悓姝ワ紝浠庤€屽嚭鐜伴敊浣嶆帀钀芥晥鏋滅殑鍛紵濂介棶棰橈紝鎴戜滑鏉ョ湅鐪嬪浣曞鐞嗘按姣嶈劯鐨勫姩鐢伙細Stack(){//浜鸿劯鏁版嵁...}.translate({y:this.translateY,x:this.translateX}).onAreaChange(()=>{this.translateY=-25this.translateX=...//杩欓噷鎴戜滑瀹為檯涓婃槸浣跨敤Math.random鏉ヨ绠梫iewModel涓璽ranslateX鐨勫€?/鏈夊叴瓒g殑鍙互鎵撳紑鎴戜滑鐨勬簮鐮乼oview}).animation({duration:3000,//鍔ㄧ敾鎸佺画鏃堕棿iterations:1,//鎾斁娆℃暟playMode:PlayMode.Normal,//鍔ㄧ敾妯″紡onFinish:()=>{//鍔ㄧ敾鎾斁缁撴潫鍥炶皟this.translateY=this.translateY==0?-25:0this.translateX=...//杩欓噷鎴戜滑鍏跺疄鏄敤Math.random鏉ヨ绠梫iewModel涓璽ranslateX鐨勫€?/鏈夊叴瓒g殑鍙互鎵撳紑鎴戜滑鐨勬簮鐮佹煡鐪媫})濡傛灉瀛︿範鍚庤寰楁湁甯姪锛屽彲浠ョ偣璧炩潳锔?鏀惰棌鉂わ笍+鍒嗕韩鉂わ笍+鍏虫敞鉂わ笍