自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一篇帶你實(shí)現(xiàn)一個(gè)會(huì)動(dòng)的鴻蒙 LOGO

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

[[422184]]

Hello 大家好,我是 Coco。本文將帶大家簡(jiǎn)單實(shí)現(xiàn)一個(gè)會(huì)動(dòng)的鴻蒙 LOGO。

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

鴻蒙的 LOGO 本身是這樣的:

該篇作者最終實(shí)現(xiàn)的是一個(gè)字母 O 的動(dòng)畫(huà)展開(kāi)過(guò)程:

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

實(shí)現(xiàn)主體

首先,我們需要對(duì)該結(jié)構(gòu)進(jìn)行簡(jiǎn)單的一個(gè)拆解,因?yàn)樯舷虏糠值妮^大差異,雖然是一個(gè)圓,但是很明顯需要分成兩塊處理,這部分比較簡(jiǎn)單且不是重點(diǎn),我就略過(guò)分享,直接上代碼。

我們的結(jié)構(gòu)大致如下:

  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.     } 

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

好吧,看著確實(shí)是平平無(wú)奇。

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

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

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

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

emmm,所以步驟是:

  1. 實(shí)現(xiàn)一個(gè) SVG feTurbulence 效果
  2. 加上 SVG animation 動(dòng)畫(huà),
  3. 再通過(guò) CSS Filter 引用至濾鏡到 DOM 結(jié)構(gòu)之上
  1. <!-- HTML 結(jié)構(gòu)下的 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.     // 通過(guò) Filter 引用 SVG 濾鏡到 DOM 結(jié)構(gòu)之上 
  3.     filter: url(#fractal); 

Wow,僅僅是一個(gè)濾鏡的疊加,就瞬間讓動(dòng)畫(huà)高大上了起來(lái)。這也是 SVG feTurbulence 濾鏡的魅力所在,完成了 CSS 一些無(wú)法實(shí)現(xiàn)的功能。

通過(guò)漸變及 MASK 實(shí)現(xiàn)光圈

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

簡(jiǎ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 實(shí)現(xiàn)漸隱的光圈效果,結(jié)果如下:

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

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

腦洞一下

運(yùn)用上述的 SVG feTurbulence 濾鏡,我們能不能再搞點(diǎn)事情呢?

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

又或者是:

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

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

假設(shè)我們有這樣一張圖:

下面,我們就利用 SVG feTurbulence 讓中間的石頭波動(dòng)起來(lái):

  1. 我們讓兩張一模一樣的圖疊加在一起(使用 div 及它的偽元素即可)
  2. 利用 clip-path 將疊在上層的圖中的石頭切割出來(lái)
  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.     } 

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

CodePen Demo -- SVG feTurbulence Image Effect[6]

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

最后

好了,本文到此結(jié)束,希望對(duì)你有幫助 :)

參考資料

[1]產(chǎn)品經(jīng)理:鴻蒙那個(gè)開(kāi)場(chǎng)動(dòng)畫(huà)挺帥的 給咱們頁(yè)面也整一個(gè)唄:

https://juejin.cn/post/6979042510400126983

[2]有意思!強(qiáng)大的 SVG 濾鏡:

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

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

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

[4]CSS 靈感 -- SVG 濾鏡及 filter: blur 實(shí)現(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

 

責(zé)任編輯:姜華 來(lái)源: iCSS前端趣聞
相關(guān)推薦

2022-11-21 18:01:24

CSSthree.js

2022-04-08 08:32:40

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

2021-05-20 06:57:16

RabbitMQ開(kāi)源消息

2023-04-20 08:00:00

ES搜索引擎MySQL

2021-08-11 07:02:21

npm包管理器工具

2021-06-16 08:28:25

unary 方法函數(shù)技術(shù)

2022-03-10 08:31:51

REST接口規(guī)范設(shè)計(jì)Restful架構(gòu)

2021-05-12 06:18:19

KubeBuilderOperatork8s

2021-05-18 05:40:27

kubebuilderwebhook進(jìn)階

2025-01-17 07:00:00

2022-02-24 07:56:42

開(kāi)發(fā)Viteesbuild

2021-05-17 05:51:31

KubeBuilderOperator測(cè)試

2021-08-23 06:25:57

CSS 技巧animation

2024-05-28 09:21:25

2022-01-17 08:56:05

CSS 技巧代碼重構(gòu)

2022-12-20 08:22:42

CommitMuation

2022-05-05 07:40:07

maskCSS

2022-02-18 08:54:21

docker操作系統(tǒng)Linux

2022-02-21 09:44:45

Git開(kāi)源分布式

2023-05-12 08:19:12

Netty程序框架
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)