成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一篇帶你實現(xiàn)一個會動的鴻蒙 LOGO

開發(fā) 前端
本文將帶大家簡單實現(xiàn)一個會動的鴻蒙 LOGO。而本文想嘗試的,是該 LOGO 的其他一些細節(jié),核心是倒影部分的水波效果。

[[422184]]

Hello 大家好,我是 Coco。本文將帶大家簡單實現(xiàn)一個會動的鴻蒙 LOGO。

emmm,寫本文的動機是之前在掘金看到一篇實現(xiàn)鴻蒙 LOGO 的文章 -- 產(chǎn)品經(jīng)理:鴻蒙那個開場動畫挺帥的 給咱們頁面也整一個唄[1]

鴻蒙的 LOGO 本身是這樣的:

該篇作者最終實現(xiàn)的是一個字母 O 的動畫展開過程:

而本文想嘗試的,是該 LOGO 的其他一些細節(jié),核心是倒影部分的水波效果。

實現(xiàn)主體

首先,我們需要對該結構進行簡單的一個拆解,因為上下部分的較大差異,雖然是一個圓,但是很明顯需要分成兩塊處理,這部分比較簡單且不是重點,我就略過分享,直接上代碼。

我們的結構大致如下:

  1. <div class="g-container"
  2.     <div class="g-top"
  3.     </div> 
  4.     <div class="g-bottom"
  5.     </div> 
  6. </div> 
  1. @import url('https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100;0,200;1,200&display=swap'); 
  2. .g-container { 
  3.     width: 100%; 
  4.     height: 100%; 
  5.     background: #000; 
  6. .g-top { 
  7.     position: fixed; 
  8.     top: 0; 
  9.     left: 0; 
  10.     width: 100vw; 
  11.     height: 50vh; 
  12.     overflow: hidden; 
  13.      
  14.     &::before { 
  15.         content: ""
  16.         position: absolute
  17.         border-radius: 50%; 
  18.         bottom: 0; 
  19.         left: 50%; 
  20.         width: 200px; 
  21.         height: 200px; 
  22.         transform: translate(-50%, 100px); 
  23.         box-sizing: border-box; 
  24.         background: #000; 
  25.         border: 25px solid #fff; 
  26.         z-index: 1; 
  27.         box-shadow:  
  28.             0 0 4px 1px rgba(255, 255, 255, .8), 
  29.             0 0 8px 2px rgba(255, 255, 255, .6); 
  30.     } 
  31. .g-bottom { 
  32.     position: fixed; 
  33.     top: 50vh; 
  34.     left: 0; 
  35.     width: 100vw; 
  36.     height: 50vh; 
  37.     background: #000; 
  38.     overflow: hidden; 
  39.      
  40.     &::before { 
  41.         content: ""
  42.         position: absolute
  43.         border-radius: 50%; 
  44.         top: 0; 
  45.         width: 200px; 
  46.         height: 200px; 
  47.         background: #000; 
  48.         left: 50%; 
  49.         transform: translate(-50%, -100px); 
  50.         box-sizing: border-box; 
  51.         border: 25px solid #fff; 
  52.         z-index: 2; 
  53.         box-shadow:  
  54.             0 0 4px rgba(255, 255, 255, .8), 
  55.             0 0 8px rgba(255, 255, 255, .7), 
  56.             0 0 20px rgba(255, 255, 255, .6); 
  57.         filter: blur(4px); 
  58.     } 

核心做的就是上下兩個半圓的實現(xiàn),以及對下面部分使用了模糊濾鏡 filter: blur(),我們可以初步得到這樣一個結構:

好吧,看著確實是平平無奇。

添加 SVG feTurbulence 濾鏡。實現(xiàn)水波倒影效果

OK,下面就是見證奇跡的時刻。我們給下部分的 g-bottom 添加一個 SVG feTurbulence 濾鏡,讓它產(chǎn)生水波倒影效果。

SVG feTurbulence 濾鏡在我的非常多篇文章中都有提到,turbulence 意為湍流,不穩(wěn)定氣流,而 SVG 濾鏡能夠?qū)崿F(xiàn)半透明的煙熏或波狀圖像。通常用于實現(xiàn)一些特殊的紋理。濾鏡利用 Perlin 噪聲函數(shù)創(chuàng)建了一個圖像。噪聲在模擬云霧效果時非常有用,能產(chǎn)生非常復雜的質(zhì)感,利用它可以實現(xiàn)了人造紋理比如說云紋、大理石紋的合成。

  • 如果你對 SVG 濾鏡還不算太了解,可以簡單看看我的這幾篇文章入門:有意思!強大的 SVG 濾鏡[2] 以及這篇實戰(zhàn)篇:震驚!巧用 SVG 濾鏡還能制作表情包?[3]

emmm,所以步驟是:

  1. 實現(xiàn)一個 SVG feTurbulence 效果
  2. 加上 SVG animation 動畫,
  3. 再通過 CSS Filter 引用至濾鏡到 DOM 結構之上
  1. <!-- HTML 結構下的 SVG 代碼 --> 
  2. <svg> 
  3.     <filter id="fractal" filterUnits="objectBoundingBox" x="0%" y="0%" width="100%" height="100%"
  4.         <feTurbulence id="turbulence" type="fractalNoise" baseFrequency="0.01 0.01" numOctaves="10"
  5.             <animate 
  6.                  attributeName="baseFrequency" 
  7.                  dur="30s"  
  8.                  values="0.01 0.01;0.03 0.15;0.01 0.01" 
  9.                  repeatCount="indefinite" /> 
  10.         </feTurbulence> 
  11.         <feDisplacementMap in="SourceGraphic" scale="15"></feDisplacementMap> 
  12.     </filter> 
  13. </svg> 
  1. .g-bottom { 
  2.     // 通過 Filter 引用 SVG 濾鏡到 DOM 結構之上 
  3.     filter: url(#fractal); 

Wow,僅僅是一個濾鏡的疊加,就瞬間讓動畫高大上了起來。這也是 SVG feTurbulence 濾鏡的魅力所在,完成了 CSS 一些無法實現(xiàn)的功能。

通過漸變及 MASK 實現(xiàn)光圈

再看看原圖,還有一圈圈的藍色光圈,這個使用 repeating-radial-gradient 及 mask 可以實現(xiàn)。

簡單的代碼如下:

  1. <div></div> 
  1. div { 
  2.     background: repeating-radial-gradient(circle at 50% 100%, transparent, transparent 5px, #2c5ec8 5.2px, #2c5ec8 6.2px, transparent 6.5px); 
  3.     mask: radial-gradient(circle at 50% 100%, rgba(255, 255, 255, .8), transparent 25%, transparent); 

repeating-radial-gradient 配合 mask 實現(xiàn)漸隱的光圈效果,結果如下:

把這個光圈往效果里疊加,及其他一些小細節(jié)及文字,最終可以實現(xiàn)一個這樣的 LOGO 效果(雖然也不是很像,還有很多細節(jié)沒還原):

完整的代碼你可以猛擊這里:CSS 靈感 -- SVG 濾鏡及 filter: blur 實現(xiàn)鴻蒙 LOGO[4]

腦洞一下

運用上述的 SVG feTurbulence 濾鏡,我們能不能再搞點事情呢?

我們可以利用它,嘗試去實現(xiàn)這樣的效果,實現(xiàn)圖片的部分動態(tài)波動,運用在特定的場景,能夠非常大的提升用戶體驗,讓人“哇塞”一下:

又或者是:

(圖片幀率有點低,放大看遠處的天際線)

上述兩個效果來自:tympanus - Distortion Effect[5],但是它們并非是使用 CSS + SVG 實現(xiàn),而是使用的 WebGL,但是它們確實可以用上述的方式復現(xiàn)。

假設我們有這樣一張圖:

下面,我們就利用 SVG feTurbulence 讓中間的石頭波動起來:

  1. 我們讓兩張一模一樣的圖疊加在一起(使用 div 及它的偽元素即可)
  2. 利用 clip-path 將疊在上層的圖中的石頭切割出來
  3. 利用 SVG feTurbulence 將濾鏡作用給上層的圖片

完整的代碼如下:

  1. <div></div> 
  2.  
  3. <svg> 
  4.     <filter id="fractal" filterUnits="objectBoundingBox" x="0%" y="0%" width="100%" height="100%"
  5.         <feTurbulence id="turbulence" type="fractalNoise" baseFrequency="0.005 0.005" numOctaves="10"
  6.             <animate 
  7.                  attributeName="baseFrequency" 
  8.                  dur="60s"  
  9.                  values="0.005 0.005;0.003 0.03;0.005 0.005" 
  10.                  repeatCount="indefinite" /> 
  11.         </feTurbulence> 
  12.         <feDisplacementMap in="SourceGraphic" scale="15"></feDisplacementMap> 
  13.     </filter> 
  14. </svg> 
  1. div { 
  2.     position: relative
  3.     width: 600px; 
  4.     height: 400px; 
  5.     background-image: url(https://z3.ax1x.com/2021/09/05/hWPVqe.jpg); 
  6.      
  7.     &::before { 
  8.         content: ""
  9.         position: absolute
  10.         top: 0; 
  11.         left: 0; 
  12.         bottom: 0; 
  13.         right: 0; 
  14.         background: inherit; 
  15.         clip-path: polygon(225px 50px, 320px 50px, 320px 90%, 225px 90%); 
  16.         filter: url(#fractal); 
  17.     } 

這樣,我們就能得到一張動起來的石頭,我們利用一張靜態(tài)圖,實現(xiàn)了其中部分的動態(tài)波動效果:

CodePen Demo -- SVG feTurbulence Image Effect[6]

利用這個技巧,我們可以很輕松的還原上述兩個使用 WebGL 實現(xiàn)的效果。Amazing~

最后

好了,本文到此結束,希望對你有幫助 :)

參考資料

[1]產(chǎn)品經(jīng)理:鴻蒙那個開場動畫挺帥的 給咱們頁面也整一個唄:

https://juejin.cn/post/6979042510400126983

[2]有意思!強大的 SVG 濾鏡:

https://github.com/chokcoco/cnblogsArticle/issues/27

[3]震驚!巧用 SVG 濾鏡還能制作表情包?:

https://github.com/chokcoco/iCSS/issues/107

[4]CSS 靈感 -- SVG 濾鏡及 filter: blur 實現(xiàn)鴻蒙 LOGO:

https://csscoco.com/inspiration/#/./svg/svg-feTurbulence-harmony-logo.md

[5]tympanus - Distortion Effect:

https://tympanus.net/Tutorials/HeatDistortionEffect/index3.html

[6]CodePen Demo -- SVG feTurbulence Image Effect:

https://codepen.io/Chokcoco/pen/VwWKxdb

 

責任編輯:姜華 來源: iCSS前端趣聞
相關推薦

2022-11-21 18:01:24

CSSthree.js

2022-04-08 08:32:40

mobx狀態(tài)管理庫redux

2021-05-20 06:57:16

RabbitMQ開源消息

2023-04-20 08:00:00

ES搜索引擎MySQL

2021-08-11 07:02:21

npm包管理器工具

2021-06-16 08:28:25

unary 方法函數(shù)技術

2025-01-17 07:00:00

2022-03-10 08:31:51

REST接口規(guī)范設計Restful架構

2021-05-12 06:18:19

KubeBuilderOperatork8s

2021-05-17 05:51:31

KubeBuilderOperator測試

2021-05-18 05:40:27

kubebuilderwebhook進階

2022-02-24 07:56:42

開發(fā)Viteesbuild

2021-08-23 06:25:57

CSS 技巧animation

2024-05-28 09:21:25

2022-12-20 08:22:42

CommitMuation

2022-02-18 08:54:21

docker操作系統(tǒng)Linux

2022-05-05 07:40:07

maskCSS

2022-01-17 08:56:05

CSS 技巧代碼重構

2022-02-21 09:44:45

Git開源分布式

2023-05-12 08:19:12

Netty程序框架
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久九九九九 | 精品久久成人 | 久久久久成人精品免费播放动漫 | 99在线免费观看视频 | 国产精品成人在线播放 | 仙人掌旅馆在线观看 | 99爱国产 | 国产ts人妖系列高潮 | 欧美福利在线 | 日本高清视频在线播放 | 国产精品69久久久久水密桃 | 在线观看黄视频 | 91在线电影| 久久久精品一区二区三区 | 在线一区视频 | 最新中文字幕在线 | 日韩精品中文字幕在线 | 男女羞羞的网站 | 久久亚洲天堂 | 国产视频一区二区三区四区五区 | 蜜桃一区| 久久久久久a| 一区二区三区精品视频 | 日韩一区不卡 | 欧美日本在线 | 五月激情六月婷婷 | 精品国产成人 | 久久免费精品视频 | 国产精品一区一区 | 欧美日韩中文字幕在线 | 国产高清精品在线 | 中文字幕一区在线观看视频 | 久久久久亚洲精品中文字幕 | 亚洲在线一区二区 | 亚洲午夜久久久 | 免费视频一区 | 欧美午夜精品久久久久久浪潮 | 精品在线观看一区 | 国产精品久久久久久久午夜片 | 黄色毛片一级 | 欧美精品在线播放 |