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

目次
私たちが作っているもの
チャートの基本
最高値を決定します
長方形の寸法を計算します
DOM要素の作成と挿入
カットアウト長方形
マスキング101
白い塗りつぶし
黒い塗りつぶし
灰色の塗りつぶし
最後のビット
マスクを生成します
最終結(jié)果
ホームページ ウェブフロントエンド CSSチュートリアル マスクを使用してネストされた正方形のアニメーションチャートを作成する方法

マスクを使用してネストされた正方形のアニメーションチャートを作成する方法

Mar 18, 2025 am 11:03 AM

マスクを使用してネストされた正方形のアニメーションチャートを作成する方法

多くの有名なチャートタイプがあります:バー、ドーナツ、ライン、パイ、あなたはそれに名前を付けます。すべての一般的なチャートライブラリはこれらをサポートしています。次に、名前さえ持っていないチャートタイプがあります。相対サイズを視覚化するのに役立つ積み重ねられた(ネストされた)正方形でこの夢のチャートをチェックしてください。

私たちが作っているもの

対話性がなければ、このデザインの作成はかなり簡単です。それを行う1つの方法は、要素(例:SVG 要素、さらにはHTML DIVSなど)をサイズを減らすことです。ここでは、左下角がすべて同じポイントに觸れることです。

しかし、私たちがいくつかのインタラクティブ性を紹介すると、物事はよりトリッキーになります。マウスを形狀の1つに移動すると、他の人がフェードアウトして離れて移動したいと考えています。

これらの不規(guī)則な形狀は、長方形とマスクを使用して作成します。および要素を備えたリテラル。マスクがまったく慣れていない場合は、適切な場所にいます。これは紹介レベルの記事です。あなたがもっと味付けされているなら、おそらくこのカットアウト効果はあなたがあなたと一緒に取ることができるトリックです。

さて、開始する前に、カスタムシェイプを使用するためのSVGのより良い代替手段であるかどうか疑問に思うかもしれません。それは間違いなく可能性です!しかし、で形を描くことは威圧的であるか、亂雑になることさえあります。そのため、「より簡単な」要素を使用して、同じ形と効果を得ています。

たとえば、A

 <svg viewbox="0 0 320 320">
  <path d="M320 0H0V56H264V320H320V0Z" fill="#264653"></path>
</svg>

0H0V56が意味がない場合は、構(gòu)文の徹底的な説明については、「SVG Path Syntax:Illustrated Guide」をチェックしてください。

チャートの基本

このようなデータセットが與えられます:

タイプDataSeTentry = {
  ラベル:文字列;
  値:番號;
};

タイプデータセット= dataSeTentry [];

const rawdataset:dataset = [
  {label: 'bad'、value:1231}、
  {label: 'beginning'、value:6321}、
  {ラベル:「開発」、価値:10028}、
  {ラベル:「完成」、価値:12123}、
  {label: 'exemplary'、value:2120}
];

…私たちはこのようなSVGになりたいです:

 <svg viewbox="0 0 320 320">
  <rect width="320" height="320" y="0" fill="..."> </rect>
  <rect width="264" height="264" y="56" fill="..."> </rect>
  <rect width="167" height="167" y="153" fill="..."> </rect>
  <rect width="56" height="56" y="264" fill="..."> </rect>
  <rect width="32" height="32" y="288" fill="..."> </rect>
</svg>

最高値を決定します

一瞬で、なぜ最高の価値が必要なのかが明らかになります。 Math.max()を使用して取得できます。それは任意の數(shù)の引數(shù)を受け入れ、セットの最高値を返します。

 const dataseTheSteStValue:number = math.max(
  ... rawdataset.map((entr:datasetentry)=> entry.value)
);

小さなデータセットがあるので、12123を取得することを知ることができます。

長方形の寸法を計算します

デザインを見ると、最高値(12123)を表す長方形がチャートの領(lǐng)域全體をカバーします。

SVGディメンションのために320を任意に選びました。長方形は正方形であるため、幅と高さは等しくなります。 12123を320に等しくするにはどうすればよいですか? 「特別な」価値はどうですか? 6321長方形の大きさはどれくらいですか?

別の言い方をすれば、1つの範(fàn)囲([0、12123])から別の範(fàn)囲([0、320])に數(shù)値をどのようにマッピングするのでしょうか?または、より數(shù)學(xué)的な用語では、[a、b]の間隔に変數(shù)をどのように拡張しますか?

私たちの目的のために、次のような関數(shù)を?qū)g裝します。

 const remapvalue =(
  値:番號、
  frommin:number、
  frommax:number、
  トミン:番號、
  Tomax:番號
):number => {
  return((value -min) /(frommax -min)) *(Tomax -Tomin)Tomin;
};

RemapValue(1231、0、12123、0、320); // 32
RemapValue(6321、0、12123、0、320); // 167
RemapValue(12123、0、12123、0、320); // 320

値をコード內(nèi)の同じ範(fàn)囲にマッピングするため、最小値と最大値を何度も渡す代わりに、ラッパー関數(shù)を作成できます。

 const valeremapper =(
  frommin:number、
  frommax:number、
  トミン:番號、
  Tomax:番號
)=> {
  return(value:number):number => {
    REMAPVALUE(Value、FromMin、FromMax、Tomin、Tomax);
  };
};

const remapdatasetvaluetosvgdimension = valueremapper(
  0、
  DataSeThighestValue、
  0、
  svgdimension
);

このように使用できます。

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

DOM要素の作成と挿入

DOMの操作と何が関係しているのか。 と5つの要素を作成し、屬性を設(shè)定し、DOMに追加する必要があります?;镜膜蔆reateElementNS、SetAttribute、およびAppendChild関數(shù)でこれをすべて行うことができます。

より一般的なCreateElementの代わりにCreateElementnsを使用していることに注意してください。これは、SVGを使用しているためです。 HTMLとSVG要素には異なる仕様があるため、異なる名前空間URIに該當(dāng)します。 CreateElementがHTMLネームスペースを便利に使用していることがあります!したがって、SVGを作成するには、この冗長でなければなりません。

 document.createElementns( 'http://www.w3.org/2000/svg'、 'svg')svgsvgelement;

確かに、別のヘルパー関數(shù)を作成できます。

 const createsvgnselement =(要素:文字列):svgelement => {
  return document.createElementns( 'http://www.w3.org/2000/svg'、element);
};

長方形をDOMに追加している場合、彼らの注文に注意を払わなければなりません。それ以外の場合は、Zインデックスを明示的に指定する必要があります。最初の長方形は最大でなければならず、最後の長方形は最小でなければなりません。ループの前にデータをソートするのが最善です。

 const data = rawdataset.sort(
  (A:DataSetEntry、B:DataSetEntry)=> B.Value -A.Value
);

data.foreach((d:datasetentry、index:number)=> {
  const rect:svgrectelement = createSvgnselement( 'rect')as svgreectelement;
  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屬性はデフォルトであるため、設(shè)定する必要はありません。 y屬性は垂直位置を制御します。

すべての長方形が左の角に觸れるのと同じポイントから生まれているという視覚的な印象を與えるために、いわば長方形を押し下げなければなりません。いくらですか?長方形が埋められない正確な量。そして、その値は、チャートの次元と特定の長方形の違いです。すべてのビットをまとめると、これに終わります。

CSSを使用して、このデモにアニメーションのコードをすでに追加しました。

カットアウト長方形

長方形を不規(guī)則な形に変える必要があります。そのようなものは7番のように見えます。

「不足している部品」に焦點を合わせると、すでに取り組んでいるのと同じ長方形の切り欠きがわかります。

私たちはそれらの切り抜きを隠したいです。それが、私たちが望むL字型で終わる方法です。

マスキング101

マスクはあなたが定義し、後で要素に適用するものです。通常、マスクは屬する要素にインラリングされています。そして、一般的に、マスクを要素に適用するためにそれを參照する必要があるため、一意のIDが必要です。

 <svg>
  
    
  
</svg>

タグでは、実際のマスクとして機能する形狀を配置します。また、要素にマスク屬性を適用します。

 <svg>
  
    
  
  <rect mask="url(#mycleverlynamedmask)"> </rect>
</svg>

マスクを定義または適用する唯一の方法ではありませんが、このデモにとって最も簡単な方法です。マスクを生成するためにコードを作成する前に、少し実験をしましょう。

既存の長方形のサイズに合った切り抜き領(lǐng)域をカバーしたいと言いました。最大の要素を取得し、以前の長方形をマスクとして適用すると、このコードになります。

 <svg viewbox="0 0 320 320">
  
    <rect width="264" height="264" y="56" fill=""> </rect>
  
  <rect width="320" height="320" y="0" fill="#264653" mask="url(#themask)"> </rect>
</svg>

マスク內(nèi)の要素には充填値が必要です。それはどうあるべきですか?選択した充填値(色)に基づいて、まったく異なる結(jié)果が表示されます。

白い塗りつぶし

塗りつぶしに白い値を使用する場合、これを取得します。

さて、私たちの大きな長方形は、マスキング長方形と同じ次元です。私たちが望んでいたものではありません。

黒い塗りつぶし

代わりに黒い値を使用する場合、次のように見えます。

何も見えません。それは、黒で満たされているものが目に見えないものだからです。白と黒の詰め物を使用してマスクの可視性を制御します。破線は、目に見えない領(lǐng)域の寸法を參照するための視覚援助としてあります。

灰色の塗りつぶし

ここで、白と黒の中にあるものを使ってみましょう。

完全に不透明でも固體でもありません。それは透明です。そのため、ここでは、バックポケットに保管するための良いトリックである白と黒の値とは異なるものを使用することで、ここで「可視性の程度」を制御できることがわかりました。

最後のビット

これが私たちがこれまでにマスクについてカバーし、學(xué)んだことです:

  • 內(nèi)部の要素は、マスクされた領(lǐng)域の寸法を制御します。
  • マスクされた領(lǐng)域の內(nèi)容物を見える、見えない、または透明にすることができます。

マスクには1つの形狀しか使用していませんが、汎用HTMLタグと同様に、必要なだけ多くの子供の要素をネストすることができます。実際、私たちが望むものを達(dá)成するためのトリックは、2つのSVG 要素を使用することです。私たちはそれらを他方の上に積み重ねなければなりません:

 <svg viewbox="0 0 320 320">
  
    <rect width="320" height="320" y="0" fill="???"> </rect>
    <rect width="264" height="264" y="56" fill="???"> </rect>
  
  <rect width="320" height="320" y="0" fill="#264653" mask="url(#maskw320)"> </rect>
</svg>

マスキングの長方形の1つは白で満たされています。もう1つは黒で満たされています。ルールを知っていても、可能性を試してみましょう。

 
  <rect width="320" height="320" y="0" fill="black"> </rect>
  <rect width="264" height="264" y="56" fill="white"> </rect>

は最大の要素の寸法であり、最大の要素は黒で満たされています。それは、その地域のすべてのものが目に見えないことを意味します。そして、より小さな長方形の下のすべてが見えます。

さて、黒い長方形が上にある場所をひっくり返しましょう:

 
  <rect width="320" height="320" y="0" fill="white"> </rect>
  <rect width="264" height="264" y="56" fill="black"> </rect>

これが私たちが望むものです!

最大の白で満たされた長方形のすべてのものが見えますが、小さな黒い長方形がその上にあり(Z軸上の私たちに近い)、その部分を隠しています。

マスクを生成します

私たちは何をしなければならないかを知ったので、比較的簡単にマスクを作成できます。そもそも色付きの長方形を生成した方法に似ています。マスクと2つの長方形を作成するセカンダリループを作成します。

今回は、rectsを直接SVGに追加する代わりに、マスクに追加します。

 data.foreach((d:datasetentry、index:number)=> {
  const mask:svgmaskelement = createsvgnelement( 'mask')as svgmaskelement;

  const rectdimension:number = remapdatasetvaluetosvgdimension(d.value);
  const rect:svgrectelement = createSvgnselement( 'rect')as svgreectelement;

  rect.setattribute( 'width'、 `$ {rectdimension}`);
  // ...殘りの屬性を設(shè)定します...

  mask.setattribute( 'id'、 `maskw $ {rectdimension.tofixed()}`);

  mask.appendChild(rect);

  // ...より小さな長方形の屬性の作成と設(shè)定...

  svg.appendchild(マスク);
});

data.foreach((d:datasetentry、index:number)=> {
    // ...色付きの長方形を生成するためのコード...
});

インデックスをマスクのIDとして使用できますが、これは少なくとも私にとっては読みやすいオプションのようです。

 mask.setattribute( 'id'、 `maskw $ {rectdimension.tofixed()}`); // maskw320、masw240、...

マスクに小さな長方形を追加することに関して、長方形の値を以前に最高から最低まで注文したため、必要な値に簡単にアクセスできます。つまり、ループの次の要素は、長方形が小さいことを意味します。これは參照する必要があります。そして、私たちはそのインデックスによってそれを行うことができます。

 // ...マスクと長方形を作成した前の部分...

const smallerectindex = index 1;

//私たちが最小にいるときに次のものはありません
if(data [smallerrectindex]!== undefined){
  const smallerrectdimension:number = remapdatasetvaluetosvgdimension(
    データ[SmallerrectIndex] .Value
  );
  const smallerrect:svgrectelement = createSvgnselement(
    「長方」
  )svgreectelementとして。

  // ...長方形の屬性の設(shè)定...

  Mask.AppendChild(Smallerrect);
}

svg.appendchild(マスク);

殘っているのは、元のループの色付き長方形にマスク屬性を追加することです。選択した形式と一致するはずです。

 rect.setattribute( 'mask'、 `url(#maskw $ {rectdimension.tofixed()})`); // maskw320、maskw240、...

最終結(jié)果

そして、私たちは終わりました!ネストされた正方形で作られたチャートを正常に作成しました。マウスホバーでもバラバラになります。そして、それがかかったのは、各正方形の切り抜き領(lǐng)域を描くために要素を使用したSVGだけでした。

以上がマスクを使用してネストされた正方形のアニメーションチャートを作成する方法の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Autoprefixerとは何ですか?それはどのように機能しますか? Autoprefixerとは何ですか?それはどのように機能しますか? Jul 02, 2025 am 01:15 AM

Autoprefixerは、ターゲットブラウザスコープに基づいてCSS屬性にベンダープレフィックスを自動的に追加するツールです。 1.エラーで接頭辭を手動で維持する問題を解決します。 2. PostCSSプラグインフォーム、CSSを解析し、プレフィックスする必要がある屬性を分析し、構(gòu)成に従ってコードを生成する屬性を分析します。 3.使用手順には、プラグインのインストール、ブラウザーリストの設(shè)定、ビルドプロセスでそれらを有効にすることが含まれます。 4。メモには、接頭辭を手動で追加しない、構(gòu)成の更新を保持すること、すべての屬性ではなくプレフィックスを維持することが含まれ、プリ??プロセッサでそれらを使用することをお勧めします。

粘著性ヘッダーまたはフッターを作成するためのCSSチュートリアル 粘著性ヘッダーまたはフッターを作成するためのCSSチュートリアル Jul 02, 2025 am 01:04 AM

to CreateStickyheadersandfooterswithcss、使用ポジション:Stickyforheaderswithtopvalueandz-index、ParentContainersdon’trestrictit.1.forstickyheaders:Setposition:Sticky、Top:0、Z-Index、およびBackgroundColor.2

ロードスピナーとアニメーションを作成するためのCSSチュートリアル ロードスピナーとアニメーションを作成するためのCSSチュートリアル Jul 07, 2025 am 12:07 AM

CSSロード回転子を作成するには3つの方法があります。1。境界の基本回転子を使用して、HTMLとCSSを介してシンプルなアニメーションを?qū)g現(xiàn)します。 2。複數(shù)のポイントのカスタム回転子を使用して、異なる遅延時間を経てジャンプ効果を?qū)g現(xiàn)します。 3.ボタンに回転子を追加し、JavaScriptを介してクラスを切り替えて、読み込みステータスを表示します。各アプローチは、ユーザーエクスペリエンスを向上させるために、色、サイズ、アクセシビリティ、パフォーマンスの最適化などのデザインの詳細(xì)の重要性を強調(diào)しています。

モバイルファーストデザインに焦點を當(dāng)てたCSSチュートリアル モバイルファーストデザインに焦點を當(dāng)てたCSSチュートリアル Jul 02, 2025 am 12:52 AM

Mobile-firstcsssdesignRequiresTtingtheviewportatatag、使用、stylumsmallscreensup、optimingTouchTargets.first.second、cecond、em、orreminsteadofpixelseders.ths.thsthird、writebasethirdird、addtocontrolscaling.second、addtocontrolscaling.second

本質(zhì)的にレスポンシブなグリッドレイアウトを作成する方法は? 本質(zhì)的にレスポンシブなグリッドレイアウトを作成する方法は? Jul 02, 2025 am 01:19 AM

本質(zhì)的な応答性のあるグリッドレイアウトを作成するために、COREメソッドはCSSGridのRepeat(auto-fit、minmax())モードを使用することです。 1.グリッドテンプレートコラムの設(shè)定:繰り返し(Auto-Fit、MinMax(200PX、1FR))繰り返して、ブラウザが列の數(shù)を自動的に調(diào)整し、各列の最小幅と最大幅を制限します。 2。ギャップを使用してグリッド間隔を制御します。 3.コンテナは、幅などの相対ユニットに設(shè)定する必要があります。100%、およびボックスサイズを使用してください。幅の計算エラーを回避し、マージンで中央に配置する必要があります。 4.オプションで、行の高さとコンテンツのアライメントを設(shè)定して、行などの視覚的な一貫性を向上させます

ビューポート內(nèi)でグリッド全體を中央に配置する方法は? ビューポート內(nèi)でグリッド全體を中央に配置する方法は? Jul 02, 2025 am 12:53 AM

グリッドレイアウト全體をビューポートの中心にするには、次の方法で実現(xiàn)できます。1。マージンを使用して水平センタリングを?qū)g現(xiàn)し、固定レイアウトに適した固定幅を設(shè)定するためにコンテナを設(shè)定する必要があります。 2。FlexBoxを使用して、外側(cè)の容器內(nèi)のJustify-ContentおよびAlign-Itemsプロパティを設(shè)定し、Min-Height:100VHを組み合わせて、フルスクリーンディスプレイシナリオに適した垂直および水平センタリングを?qū)g現(xiàn)します。 3. CSSGridのPlace-ITEMSプロパティを使用して、親コンテナをすばやく中央に集中させます。これは、シンプルで最新のブラウザからの適切なサポートがあり、同時に、親コンテナが十分な高さを確保する必要があります。各方法には、適用されるシナリオと制限があります。実際のニーズに応じて適切なソリューションを選択するだけです。

@supportsを使用したCSSの機能検出とは何ですか? @supportsを使用したCSSの機能検出とは何ですか? Jul 02, 2025 am 01:14 AM

featuredEtectionincssusing@supportscheckcksifabrowssaspificfeatureforeapplyingStyles.1.itusesconditionalcssalcssbasedsbasedonproperty-valuepairsなど、supports(display:grid).2.thismethodensuresuresuresuresuresurecompativitionivitionivitionaindavoidavoidsrioushsriasiondrell

CSSブラウザの互換性の問題とプレフィックスに対処します CSSブラウザの互換性の問題とプレフィックスに対処します Jul 07, 2025 am 01:44 AM

CSSブラウザの互換性とプレフィックスの問題に対処するには、ブラウザサポートの違いを理解し、ベンダーのプレフィックスを合理的に使用する必要があります。 1. FlexBoxやグリッドのサポート、位置:粘著性の無効、アニメーションのパフォーマンスなどの一般的な問題を理解することは異なります。 2. CANIUSE確認(rèn)機能サポートステータスを確認(rèn)します。 3. -webkit-、-moz-、-ms-、-o-およびその他のメーカーのプレフィックスを正しく使用します。 4.自動的にプレフィックスを追加するためにAutoprefixerを使用することをお勧めします。 5. PostCSSをインストールし、ターゲットブラウザを指定するようにBrowserSlistを構(gòu)成します。 6.建設(shè)中の互換性を自動的に処理します。 7. Modernizr検出機能は、古いプロジェクトに使用できます。 8.すべてのブラウザの一貫性を追求する必要はありません、

See all articles