国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
我們正在做什么
圖表的基礎(chǔ)
確定最高價值
計算矩形的尺寸
創(chuàng)建和插入DOM元素
切割矩形
掩蓋101
白色填充
黑色填充
灰色填充
最后一點
生成口罩
最終結(jié)果
首頁 web前端 css教程 如何使用口罩創(chuàng)建嵌套正方形的動畫圖表

如何使用口罩創(chuàng)建嵌套正方形的動畫圖表

Mar 18, 2025 am 11:03 AM

如何使用口罩創(chuàng)建嵌套正方形的動畫圖表

我們有許多眾所周知的圖表類型:酒吧,甜甜圈,線,派,您可以命名。所有流行的圖表庫支持這些。然后有圖表類型甚至沒有名稱。使用堆疊的(嵌套)正方形查看此DreamT-Up圖表,可以幫助可視化相對大小,或者不同的值相互比較:

我們正在做什么

沒有任何互動,創(chuàng)建此設(shè)計非常簡單。一種方法是堆疊元素(例如SVG 元素,甚至是HTML Divs),尺寸的尺寸均勻,其中所有左下角都觸及相同的點。

但是,一旦我們引入了一些互動性,事情就會變得棘手。應(yīng)該這樣做:當(dāng)我們將鼠標(biāo)移到其中一種形狀上時,我們希望其他人逐漸消失并移開。

我們將使用矩形和掩碼創(chuàng)建這些不規(guī)則的形狀 - 具有元素的字面。如果您是面具的新手,那么您就在正確的位置。這是一篇介紹性的文章。如果您的經(jīng)驗豐富,那么也許這種切割效果是您可以帶來的技巧。

現(xiàn)在,在我們開始之前,您可能會想知道是否是使用自定義形狀的更好的SVG替代品。絕對是可能的!但是用繪制形狀可能令人生畏,甚至?xí)兊昧鑱y。因此,我們正在使用“更容易”的元素來獲得相同的形狀和效果。

例如,這是我們必須使用來表示最大的藍色形狀。

 <svg viewbox="“" width="“" height="“">
  
</svg>

如果0H0V56…對您沒有任何意義,請查看“ SVG路徑語法:插圖指南”,以詳細(xì)說明語法。

圖表的基礎(chǔ)

給定這樣的數(shù)據(jù)集:

鍵入datasetEntry = {
  標(biāo)簽:字符串;
  值:數(shù)字;
};

鍵入dataset = datasetEntry [];

const rawdataset:dataset = [
  {label:'bad',值:1231},
  {label:'begint',value:6321},
  {label:'開發(fā)',值:10028},
  {label:'已完成',值:12123},,
  {label:'示例',值:2120}
];

…我們想以這樣的SVG結(jié)束:

 <svg viewbox="“" width="“" height="“">
  <rect width="“" height="“" y="“" fill="“" ...> </rect>
  <rect width="“" height="“" y="“" fill="“" ...> </rect>
  <rect width="“" y="“" fill="“" ...> </rect>
  <rect width="“" y="“" fill="“" ...> </rect>
  <rect width="“" height="“" y="“" fill="“" ...> </rect>
</svg>

確定最高價值

在瞬間,我們需要最高價值會變得很明顯。我們可以使用Math.max()獲取它。它接受任何數(shù)量的參數(shù),并返回集合中的最高值。

 const dataseThighestValue:number = math.max(
  ... RAWDATASET.MAP((輸入:DataSetEntry)=> entry.value)
);

由于我們有一個小數(shù)據(jù)集,因此我們可以說我們將獲得12123。

計算矩形的尺寸

如果我們看設(shè)計,則代表最高值(12123)的矩形覆蓋了圖表的整個區(qū)域。

我們?nèi)我膺x擇320個SVG尺寸。由于我們的矩形是正方形,因此寬度和高度相等。我們?nèi)绾问?2123等于320?較少的“特殊”值怎么樣? 6321矩形有多大?

換句話說,我們?nèi)绾螌⒁粋€數(shù)字從一個范圍([0,12123])映射到另一個范圍([0,320])?或者,用更多的數(shù)學(xué)術(shù)語,我們?nèi)绾螌⒆兞繑U展到[a,b]的間隔?

出于我們的目的,我們將實現(xiàn)這樣的功能:

 const remapvalue =(
  價值:數(shù)字,
  Frommin:數(shù)字,
  Frommax:數(shù)字,
  Tomin:數(shù)字,
  tomax:數(shù)字
):數(shù)字=> {
  返回((value -frommin) /(frommax -frommin)) *(tomax -tomin)tomin;
};

重新值(1231,0,12123,0,320); // 32
重新值(6321,0,12123,0,320); // 167
重新值(12123,0,12123,0,320); // 320

由于我們將值映射到代碼中的相同范圍,而不是一遍又一遍地傳遞最小值和最大值,因此我們可以創(chuàng)建一個包裝函數(shù):

 const valuerMapper =(
  Frommin:數(shù)字,
  Frommax:數(shù)字,
  Tomin:數(shù)字,
  tomax:數(shù)字
)=> {
  返回(值:數(shù)字):number => {
    返回重新值(Value,F(xiàn)rommin,F(xiàn)rommax,Tomin,Tomax);
  };
};

const remapdatasetValuetosvgdimension = valueremapper(
  0,
  DataseThighestValue,
  0,
  svgdimension
);

我們可以這樣使用:

 RemapdatasetValuetosvgdimension(1231); // 32
RemapdatasetValuetosvgdimension(6321); // 167
RemapdatasetValuetosvgdimension(12123); // 320

創(chuàng)建和插入DOM元素

剩下的與DOM操縱有關(guān)。我們必須創(chuàng)建和五個元素,設(shè)置其屬性,然后將它們附加到DOM。我們可以使用基本的createlementn,setAttribute和附錄函數(shù)來完成所有這些。

請注意,我們使用的是CreateElementn,而不是更常見的Createlement。這是因為我們正在使用SVG。 HTML和SVG元素具有不同的規(guī)格,因此它們屬于不同的名稱空間URI。碰巧的是,CreateElement便利地使用HTML名稱空間!因此,要創(chuàng)建一個SVG,我們必須是這個冗長:

 document.createelementns('http://www.w3.org/2000/svg','svg')as svgsvgelement;

當(dāng)然,我們可以創(chuàng)建另一個輔助功能:

 const createsvgnSelement =(element:string):svgelement => {
  返回document.createelementns('http://www.w3.org/2000/svg',element);
};

當(dāng)我們將矩形附加到DOM時,我們必須注意它們的命令。否則,我們必須明確指定z索引。第一個矩形必須是最大的,最后一個矩形必須是最小的。最好在循環(huán)之前對數(shù)據(jù)進行分類。

 const data = rawdataset.sort(
  (a:datasetEntry,b:datasetEntry)=> b.value -a.value
);

data.foreach((D:DATASETENTRY,index:number)=> {
  const rect:svgrectelement = keresvgnSelement('rect')作為svgrectelement;
  const rectdimension:number = remapdatasetValuetosvgdimension(d.Value);

  rect.setAttribute('width',`$ {rectDimension}`);
  rect.setAttribute('height',`$ {rectDimension}`);
  rect.setAttribute('y',`$ {svgdimension -rectDimension}`);

  svg.appendchild(rect);
});

坐標(biāo)系從左上角開始;那就是[0,0]在哪里。我們總是要從左側(cè)繪制矩形。控制水平位置的X屬性默認(rèn)為0,因此我們不必設(shè)置它。 Y屬性控制垂直位置。

為了給人以視覺印象:所有矩形都源于觸摸其左下角的同一點,我們必須將矩形向下推下。多少錢?矩形不填充的確切量。該值是圖表的維度和特定矩形之間的差異。如果我們將所有位放在一起,我們最終都會得到這樣做:

我們已經(jīng)使用CSS添加了該動畫的代碼。

切割矩形

我們必須將矩形變成不規(guī)則的形狀,看起來像是第七名,或者字母L旋轉(zhuǎn)180度。

如果我們專注于“丟失的零件”,那么我們可以看到它們切入了我們已經(jīng)與之合作的相同矩形。

我們想隱藏那些切口。這就是我們最終要獲得想要的L形狀的方式。

掩蓋101

掩模是您定義的東西,然后應(yīng)用于元素。通常,掩碼在其屬于的元素中夾住。而且,通常,它應(yīng)該具有唯一的ID,因為我們必須將其引用才能將掩碼應(yīng)用于元素。

 <svg>
  <mask>
    
  </mask>
</svg>

標(biāo)簽中,我們將形狀作為實際面具。我們還將蒙版屬性應(yīng)用于元素。

 <svg>
  <mask>
    
  </mask>
  <rect mask="“" url> </rect>
</svg>

這不是定義或涂上口罩的唯一方法,但這是該演示的最直接方法。讓我們在編寫任何代碼以生成口罩之前進行一些實驗。

我們說,我們想覆蓋與現(xiàn)有矩形大小相匹配的切口區(qū)域。如果我們采用最大的元素,并且將先前的矩形應(yīng)用于掩模,我們最終以此代碼:

 <svg viewbox="“" width="“" height="“">
  <mask>
    <rect width="“" height="“" y="“" fill="“”"> </rect>
  </mask>
  <rect width="“" height="“" y="“" fill="“#264653”" mask="“" url> </rect>
</svg>

蒙版內(nèi)的元素需要一個填充值。那應(yīng)該是什么?我們會根據(jù)選擇的填充值(顏色)看到完全不同的結(jié)果。

白色填充

如果我們?yōu)樘畛涫褂冒咨?,那么我們就會得到?/p>

現(xiàn)在,我們的大矩形與掩蔽矩形相同。不完全是我們想要的。

黑色填充

如果我們使用黑色值,則看起來像這樣:

我們什么都沒有。那是因為充滿黑色的東西變得不可見。我們使用白色和黑色填充物控制面具的可見性。虛線作為視覺輔助,以引用無形區(qū)域的尺寸。

灰色填充

現(xiàn)在,讓我們使用白色和黑色之間的東西,說格雷:

它既不是完全不透明的也不是堅固的;這是透明的。因此,現(xiàn)在我們知道我們可以使用與白色和黑色值不同的東西來控制這里的“可見度”,這是一個很好的技巧,可以保留在我們的后口袋中。

最后一點

到目前為止,這是我們涵蓋和了解的有關(guān)面具的知識:

  • 內(nèi)部的元素控制蒙版區(qū)域的尺寸。
  • 我們可以使蒙版區(qū)域的內(nèi)容可見,看不見或透明。

我們只為掩模使用了一種形狀,但是與任何通用HTML標(biāo)簽一樣,我們可以根據(jù)需要在其中嵌套盡可能多的子元素。實際上,實現(xiàn)我們想要的目標(biāo)的訣竅是使用兩個SVG 元素。我們必須將它們堆放在另一個上方:

 <svg viewbox="“" width="“" height="“">
  <mask>
    <rect width="“" height="“" y="“" fill="“"> </rect>
    <rect width="“" height="“" y="“" fill="“"> </rect>
  </mask>
  <rect width="“" height="“" y="“" fill="“#264653”" mask="“" url> </rect>
</svg>

我們的掩蔽矩形之一充滿了白色。另一個充滿黑色。即使我們知道規(guī)則,也要嘗試一下可能性。

 <mask>
  <rect width="“" height="“" y="“" fill="“" black> </rect>
  <rect width="“" height="“" y="“" fill="“" white> </rect>
</mask>

是最大元素的維度,最大元素充滿了黑色。這意味著該區(qū)域下的一切都是看不見的。較小的矩形下的一切都是可見的。

現(xiàn)在讓我們對黑色矩形頂部的東西進行翻轉(zhuǎn):

 <mask>
  <rect width="“" height="“" y="“" fill="“" white> </rect>
  <rect width="“" height="“" y="“" fill="“" black> </rect>
</mask>

這就是我們想要的!

最大的白色矩形下的所有內(nèi)容都是可見的,但是較小的黑色矩形在其頂部(在Z軸上更靠近我們),掩蓋了這一部分。

生成口罩

現(xiàn)在我們知道了我們必須做什么,我們可以相對輕松地創(chuàng)建口罩。這類似于我們首先生成彩色矩形的方式 - 我們創(chuàng)建了一個輔助環(huán),在其中創(chuàng)建掩碼和兩個矩形。

這次,我們沒有將矩形直接附加到SVG上,而是將其附加到蒙版:

 data.foreach((D:DATASETENTRY,index:number)=> {
  constmask:svgMaskElement = svgmaskelement; createSvgnSelement('mask');

  const rectdimension:number = remapdatasetValuetosvgdimension(d.Value);
  const rect:svgrectelement = keresvgnSelement('rect')作為svgrectelement;

  rect.setAttribute('width',`$ {rectDimension}`);
  // ...設(shè)置其余屬性...

  mask.setAttribute('id',`maskw $ {rectDimension.tofixed()}`);

  mask.appendchild(rect);

  // ...創(chuàng)建和設(shè)置較小矩形的屬性...

  svg.appendchild(蒙版);
});

data.foreach((D:DATASETENTRY,index:number)=> {
    // ...我們的代碼生成彩色矩形...
});

我們可以將索引用作面具的ID,但這似乎是一個更可讀的選擇,至少對我而言:

 mask.setAttribute('id',`maskw $ {rectDimension.tofixed()}`); // MaskW320,MASW240,...

至于在面罩中添加較小的矩形,我們可以輕松訪問所需的值,因為我們以前訂購了從最高到最低的矩形值。這意味著循環(huán)中的下一個元素是較小的矩形,我們應(yīng)該引用一個元素。我們可以通過其索引來做到這一點。

 // ...上一部分我們創(chuàng)建了蒙版和矩形...

const smalleRectIndex =索引1;

//當(dāng)我們處于最小時,沒有下一個
if(data [smalleRectIndex]!== undefined){
  const smalleRectDimension:number = remapdatasetValuetosvgdimension(
    數(shù)據(jù)[SmalleRectIndex]
  );
  const smallErcret:svgrectelement = createSvgnSelement(
    'rect'
  )作為svgrectement;

  // ...設(shè)置矩形屬性...

  mask.AppendChild(SmallerRect);
}

svg.appendchild(蒙版);

剩下的就是將蒙版屬性添加到我們原始循環(huán)中的彩色矩形中。它應(yīng)該匹配我們選擇的格式:

 rect.setAttribute('mask',`url(#baskw $ {rectdimension.tofixed()})`); // maskW320,maskW240,...

最終結(jié)果

我們完成了!我們已經(jīng)成功制作了一個由嵌套正方形制成的圖表。它甚至在鼠標(biāo)懸停上分開。而所需的只是使用元素來繪制每個正方形的切口區(qū)域的SVG。

以上是如何使用口罩創(chuàng)建嵌套正方形的動畫圖表的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

如何僅在某些頁面上包括CSS? 如何僅在某些頁面上包括CSS? Jun 11, 2025 am 12:01 AM

選擇性包含CSS在特定頁面上的方法有三種:1.內(nèi)聯(lián)CSS,適用于不常訪問或需要獨特樣式的頁面;2.使用JavaScript條件加載外部CSS文件,適合需要靈活性的情況;3.服務(wù)器端包含,適用于使用服務(wù)器端語言的場景。這種方法可以優(yōu)化網(wǎng)站性能和可維護性,但需平衡模塊化與性能。

Flexbox與網(wǎng)格:了解CSS布局的關(guān)鍵差異 Flexbox與網(wǎng)格:了解CSS布局的關(guān)鍵差異 Jun 10, 2025 am 12:03 AM

flexboxisidealforone-dimensionAllayouts,while gridsuitStwo,complex layouts.useflexboxforaligningItemsinasingLeaxisAndGridForRidForPreciseconcontroloverroverroverroverroverroverroverrowsandsininintricatientricatedesigns。

使用HTML彈出案創(chuàng)建自動關(guān)閉通知 使用HTML彈出案創(chuàng)建自動關(guān)閉通知 Jun 10, 2025 am 09:45 AM

HTML彈出屬性將元素轉(zhuǎn)換為頂層元素,可以使用按鈕或JavaScript打開和關(guān)閉??梢詫棾霭格g回多種方式,但是沒有選擇自動關(guān)閉它們。 preethi有一種技術(shù),你可以

什么是'渲染障礙CSS”? 什么是'渲染障礙CSS”? Jun 24, 2025 am 12:42 AM

CSS會阻塞頁面渲染是因為瀏覽器默認(rèn)將內(nèi)聯(lián)和外部CSS視為關(guān)鍵資源,尤其是使用引入的樣式表、頭部大量內(nèi)聯(lián)CSS以及未優(yōu)化的媒體查詢樣式。1.提取關(guān)鍵CSS并內(nèi)嵌至HTML;2.延遲加載非關(guān)鍵CSS通過JavaScript;3.使用media屬性優(yōu)化加載如打印樣式;4.壓縮合并CSS減少請求。建議使用工具提取關(guān)鍵CSS,結(jié)合rel="preload"異步加載,合理使用media延遲加載,避免過度拆分與復(fù)雜腳本控制。

如何在無花果中使用Lotties 如何在無花果中使用Lotties Jun 14, 2025 am 10:17 AM

在接下來的教程中,我將向您展示如何在無花果中創(chuàng)建Lottie動畫。我們將使用兩種彩色設(shè)計來超越如何在無花果上進行動畫,然后向您展示如何從Figma到Lottie動畫。您只需要免費無花果

打破邊界:用(s)CSS構(gòu)建湯姆拼圖 打破邊界:用(s)CSS構(gòu)建湯姆拼圖 Jun 13, 2025 am 11:33 AM

我們對其進行了測試,事實證明,至少在低級邏輯和拼圖行為時,Sass可以替換JavaScript。除了地圖,混音,功能和大量數(shù)學(xué)外,我們都設(shè)法使我們的Tangram難題栩栩如生,沒有J

外部與內(nèi)部CSS:最好的方法是什么? 外部與內(nèi)部CSS:最好的方法是什么? Jun 20, 2025 am 12:45 AM

thebestapphachforcssdepprodsontheproject'sspefificneeds.forlargerprojects,externalcsSissBetterDuoSmaintoMaintainability andReusability; forsMallerProjectsorsingle-pageApplications,InternaltCsmightBemoresobleable.InternalCsmightBemorese.it.it'sclucialtobalancepopryseceneceenceprodrenceprodrenceNeed

我的CSS必須在較低的情況下嗎? 我的CSS必須在較低的情況下嗎? Jun 19, 2025 am 12:29 AM

否,CSSDOESNOTHAVETOBEINLOWERCASE.CHOMENDENS,使用flowercaseisrecommondendendending:1)一致性和可讀性,2)避免使用促進性技術(shù),3)潛在的Performent FormanceBenefits,以及4)RightCollaboraboraboraboraboraboraboraboraboraboraboraboraboraboraboraboraborationWithInteams。

See all articles