6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

BlazorAdvent Calendar 2021

Day 4

Blazor with Zeu.js

Last updated at Posted at 2021-12-04

Zeu.jsは様々なデータをビジュアル化し、アニメーションで表示するJavaScriptライブラリです。
今回はBlazor WebAssemblyアプリで、Zeu.jsを動かしてみたいと思います:zap::zap::zap:

Zeu.js

今回はバリバリのJavaScriptライブラリを使って、Blazorアプリケーションを作っていきたいと思います:thumbsup:

Demo

サンプルコード

#canvasの初期化

Zeu.jsはcanvasを使ってますので、それぞれのコントロールを初期化する処理をC#側から呼び出します。

Index.razor
      <div class="col-lg-8">
        <div class="row">
          <div class="col-lg-8">
            <h1>MY COMMAND CENTER</h1>
            <div><a href="https://github.com/shzlw/zeu" style="font-size: 18px;">by Zeu.js</a></div>
            <div style="font-size: 22px; font-weight: bold;">US-EAST-01</div>
          </div>
          <div class="col-lg-4">
            <h2>TIME</h2>
            <canvas id="digital-clock" width="200" height="50"></canvas>
          </div>
        </div>
        
        <canvas id="heartbeat" width="730" height="150"></canvas>  👈ここに配置
      </div>
index.html

    <script>
        window.Init = (_) => {
            /* Heartbeat */
            heartbeat = new zeu.Heartbeat('heartbeat', {
                viewWidth: 730,
                speed: 2,
                fontColor: COLOR.lightGrey,
                maxQueueCapacity: 50
            });
            heartbeat.scaleByHeight(150);
    // 中略
    </script>

canvasの初期化は OnAfterRenderの初回レンダリング時に行うようにします。

Index.razor
@code{
    protected override  void OnAfterRender(bool firstRender)
    {
        if (firstRender)
        {
            JSRuntime.InvokeVoidAsync("Init", new object[] { });
        }
    }
}

#コントロールへ値のセット
コントロールの初期化が行えればあとは簡単です。
injectされたJavaScriptの呼び出し機能を使用して、scriptのファンクションにセットしたい値を渡すだけです。

Index.raozr
    <script>
        window.valueChangeHertbeat = (p1, p2) => {
            heartbeat.beat({
                color: p1,
                space: p2
            });    
        }
    </script>
Index.razor
@code{
    void  OnClick()
    {
        var r = new Random();
        var ret = @"#" + System.Drawing.Color.FromArgb(r.Next(256), r.Next(256), r.Next(256)).Name.Substring(2);

        // Heartbeat
        JSRuntime.InvokeVoidAsync("valueChangeHertbeat", new object[] {ret,r.Next(0,10) });
    }
}

#JavaScriptライブラリを使う
BlazorはJavaScriptを使わずにC#だけでWebアプリケーションをコーディングできるのが大きな特徴でありますが、逆にJavaScriptとの親和性の高さも大きな特徴です。
UIに関してのユーザービリティやビジュアルなギミックは、純粋にBlazorだけで表現するのはまだまだ難しいですね:open_mouth:
いつか、すべてをC#でコーディングできる日がやってくるのでしょうか:rocket:

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?