質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

2826閲覧

Reactで出現させたCanvasにclass要素を追加したい

k10a

総合スコア35

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2018/09/08 17:48

編集2018/09/08 17:48

ReactでCanvasを使っているのですが、Canvasで表示しているテキストにこちらのQiita記事にあるような円形レーダー(https://qiita.com/sjnya/items/c294e5dcbb3ba6f74c94)のようなアニメーションを追加したいと考えているのですが、普通にCanvasの要素にclassNameを追加しただけではアニメーションが付与されません。

React(View部分)

import React, { Component } from 'react'; import { Layer, Text } from 'react-konva'; class TextIcon extends React.Component { export default class Chart extends Component { render() { const { item } = this.props; return ( <Layer> {items.map((item, i) => ( <Text key={i} fill={item.color} className="point" /> ))} </Layer> ); } }

CSS部分

.point { width: 40px; height: 40px; background: rgba(25, 118, 210, 0.4); border-radius: 50%; animation: blink 1s ease-in-out infinite none; } @keyframes blink { 0% { box-shadow: 0 0 0 0 rgba(25, 118, 210, 0.4); } 100% { box-shadow: 0 0 0 8px rgba(187, 222, 251, 0.3); } }

Canvasにクラスを追加させる方法はないのでしょうか。
おたすけください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

ご質問に挙げられているコードにどこまで適用できるかは分かりませんが、react-konvaによって生成される<canvas>にclass属性を追加するサンプルを作成しましたので、参考にして頂ければと思います。

ベースにしたコードは、react-konvaREADMEにある Example です。これによってrenderされる <canvas>に class属性を追加するようにしたものを作成して、以下のレポジトリ

https://github.com/jun68ykt/q145605

に上げました。
<canvas> にclass属性を設定しているのは、以下の App.js です。

JSX

1import React, { Component } from 'react'; 2import { Stage, Layer, Text } from 'react-konva'; 3import ColoredRect from "./ColoredRect"; 4 5class App extends Component { 6 7 stageWrapper = React.createRef(); 8 9 componentDidMount() { 10 const stageWrapperElement = this.stageWrapper.current; 11 const canvasElement = stageWrapperElement.getElementsByTagName('canvas')[0]; 12 canvasElement.className = 'my-canvas'; 13 } 14 15 render() { 16 return ( 17 <section ref={this.stageWrapper}> 18 <Stage width={window.innerWidth} height={window.innerHeight}> 19 <Layer> 20 <Text text="Try click on rect" /> 21 <ColoredRect /> 22 </Layer> 23 </Stage> 24 </section> 25 ); 26 } 27} 28 29export default App;

<canvas>にclassを追加するための要点は、以下の3点です。

  1. <Stage>を何らかの要素で囲む。(上記のソースでは <section> で囲んでいます)
  2. 上記の<Stage>を囲む要素を参照するためのrefを、Appのインスタンスフィールドとして、React.createRef() によって作成(上記のソースでは stageWrapper)
  3. AppcomponentDidMount で、上記のrefを使って <canvas>を取得し、これにクラス名を設定

このサンプル q145605 を動かしてうまくいけば、以下のように <canvas> にclass属性が付加されているのを確認できるかと思います。

イメージ説明

以上、参考になれば幸いです。

投稿2018/09/09 00:50

編集2018/09/09 01:38
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k10a

2018/09/09 15:07

ご丁寧なご回答をいただきまして、誠にありがとうございます。 canvasにclass属性を与えることが参考コードにて確認できました。canvas内のテキストにclass入れるのはまだかかりそうですが、参考にすすめていきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問