亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
我們正在做什么
圖表的基礎(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)我們將鼠標移到其中一種形狀上時,我們希望其他人逐漸消失并移開。

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

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

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

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

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

圖表的基礎(chǔ)

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

鍵入datasetEntry = {
  標簽:字符串;
  值:數(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);
});

坐標系從左上角開始;那就是[0,0]在哪里。我們總是要從左側(cè)繪制矩形??刂扑轿恢玫腦屬性默認為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>

標簽中,我們將形狀作為實際面具。我們還將蒙版屬性應(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標簽一樣,我們可以根據(jù)需要在其中嵌套盡可能多的子元素。實際上,實現(xiàn)我們想要的目標的訣竅是使用兩個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)成功制作了一個由嵌套正方形制成的圖表。它甚至在鼠標懸停上分開。而所需的只是使用元素來繪制每個正方形的切口區(qū)域的SVG。

以上是如何使用口罩創(chuàng)建嵌套正方形的動畫圖表的詳細內(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教程,用于創(chuàng)建加載旋轉(zhuǎn)器和動畫 CSS教程,用于創(chuàng)建加載旋轉(zhuǎn)器和動畫 Jul 07, 2025 am 12:07 AM

創(chuàng)建CSS加載旋轉(zhuǎn)器的方法有三種:1.使用邊框的基本旋轉(zhuǎn)器,通過HTML和CSS實現(xiàn)簡單動畫;2.使用多個點的自定義旋轉(zhuǎn)器,通過不同延遲時間實現(xiàn)跳動效果;3.在按鈕中添加旋轉(zhuǎn)器,通過JavaScript切換類來顯示加載狀態(tài)。每種方法都強調(diào)了設(shè)計細節(jié)如顏色、大小、可訪問性和性能優(yōu)化的重要性,以提升用戶體驗。

解決CSS瀏覽器兼容性問題和前綴 解決CSS瀏覽器兼容性問題和前綴 Jul 07, 2025 am 01:44 AM

處理CSS瀏覽器兼容性和前綴問題需理解瀏覽器支持差異并合理使用廠商前綴。1.了解常見問題如Flexbox、Grid支持不一,position:sticky失效,動畫表現(xiàn)不同;2.查閱CanIuse確認特性支持情況;3.正確使用-webkit-、-moz-、-ms-、-o-等廠商前綴;4.推薦使用Autoprefixer自動添加前綴;5.安裝PostCSS并配置browserslist指定目標瀏覽器;6.構(gòu)建時自動處理兼容性;7.老項目可用Modernizr檢測特性;8.不必追求所有瀏覽器一致,確

造型與CSS不同訪問的鏈接 造型與CSS不同訪問的鏈接 Jul 11, 2025 am 03:26 AM

設(shè)置訪問過鏈接的樣式能提升用戶體驗,尤其在內(nèi)容密集型網(wǎng)站中幫助用戶更好導(dǎo)航。1.使用CSS的:visited偽類可定義已訪問鏈接樣式,如顏色變化;2.注意瀏覽器出于隱私限制僅允許修改部分屬性;3.顏色選擇應(yīng)與整體風(fēng)格協(xié)調(diào),避免突兀;4.移動端可能不顯示該效果,建議結(jié)合其他視覺提示如icon輔助標識。

使用CSS剪輯路徑創(chuàng)建自定義形狀 使用CSS剪輯路徑創(chuàng)建自定義形狀 Jul 09, 2025 am 01:29 AM

使用CSS的clip-path屬性可以裁剪元素為自定義形狀,如三角形、圓形缺口、多邊形等,無需依賴圖片或SVG。其優(yōu)勢包括:1.支持circle、ellipse、polygon等多種基本形狀;2.可響應(yīng)式調(diào)整,適配移動端;3.易于動畫化,可結(jié)合hover或JavaScript實現(xiàn)動態(tài)效果;4.不影響布局流,僅裁剪顯示區(qū)域。常見用法如圓形裁剪clip-path:circle(50pxatcenter)和三角形裁剪clip-path:polygon(50%0%,1000%,00%)。注意

顯示:內(nèi)聯(lián),顯示:塊和顯示:內(nèi)聯(lián)塊之間有什么區(qū)別? 顯示:內(nèi)聯(lián),顯示:塊和顯示:內(nèi)聯(lián)塊之間有什么區(qū)別? Jul 11, 2025 am 03:25 AM

Themaindifferencesbetweendisplay:inline,block,andinline-blockinHTML/CSSarelayoutbehavior,spaceusage,andstylingcontrol.1.Inlineelementsflowwithtext,don’tstartonnewlines,ignorewidth/height,andonlyapplyhorizo??ntalpadding/margins—idealforinlinetextstyling

如何使用CSS創(chuàng)建響應(yīng)式圖像? 如何使用CSS創(chuàng)建響應(yīng)式圖像? Jul 15, 2025 am 01:10 AM

要使用CSS創(chuàng)建響應(yīng)式圖片,主要可通過以下方法實現(xiàn):1.使用max-width:100%和height:auto讓圖片在保持比例的同時自適應(yīng)容器寬度;2.結(jié)合HTML的srcset和sizes屬性智能加載適配不同屏幕的圖片源;3.利用object-fit和object-position控制圖片裁剪與焦點展示。這些方法共同確保圖片在不同設(shè)備上清晰、美觀地呈現(xiàn)。

什么是CSS,它代表什么? 什么是CSS,它代表什么? Jul 03, 2025 am 01:48 AM

CSS,orcascadingstylesheets,isthepartofwevelvermentThatControlsawebpage’svisualAppearance,包括colors,fonts,fonts,spacing,and spacing and layout

CSS繪畫API是什么? CSS繪畫API是什么? Jul 04, 2025 am 02:16 AM

thecsspaintingapienablesdemimageGenerationinCsssingJavascript.1.developersCreateApaintWorkletClassWithaPaint()method.2.theyregisteritviaregisterpaint()。3.thecustompAntFunctionSthenusitySthenusedisthenusedisthenusedIncerspropertieslikeBacknockforg-image-image.thisallows.thisallowsforderforderynamecvis

See all articles