ゲージ
Framework7にはゲージコンポーネントが付属しています。これは、見栄えの良い、完全にレスポンシブなSVGゲージを生成します。
ゲージのレイアウト
ゲージのSVGはJavaScriptによって生成されるため、そのHTMLレイアウトは可能な限りシンプルです
<!-- Gauge element -->
<div class="gauge"></div>
ゲージのアプリメソッド
次に、ゲージを作成/初期化する必要があります。ゲージを操作するための関連するアプリメソッドを見てみましょう
app.gauge.create(parameters)- ゲージインスタンスを作成する
- parameters - object。ゲージパラメーターを含むオブジェクト
メソッドは、作成されたゲージのインスタンスを返します
app.gauge.destroy(el)- ゲージインスタンスを破棄する
- el - HTMLElement または string (CSSセレクター付き) または object。破棄するゲージ要素またはゲージインスタンス。
app.gauge.get(el)- HTML要素でゲージインスタンスを取得する
- el - HTMLElement または string (CSSセレクター付き)。ゲージ要素。
メソッドはゲージのインスタンスを返します
app.gauge.update(parameters)- 渡されたパラメーターに従ってゲージSVGを更新/再描画する
- parameters - object。ゲージパラメーターを含むオブジェクト
メソッドはゲージ値を返します
ゲージのパラメーター
ゲージを作成するために必要な使用可能なパラメーターのリストを見てみましょう
パラメーター | 型 | デフォルト | 説明 |
---|---|---|---|
el | HTMLElement string | ゲージ要素。HTMLElementまたはゲージ要素のCSSセレクター付きの文字列。生成されたSVGはこの要素に挿入されます | |
type | string | circle | ゲージタイプ。circle またはsemicircle にできます |
value | number | 0 | ゲージ値/パーセンテージ。0 から1 の間の数値である必要があります |
size | number | 200 | 数値 |
bgColor | string | transparent | ゲージの背景色。#ff00ff 、rgb(0,0,255) などの有効な色の文字列にできます。 |
borderBgColor | string | #eeeeee | メインの境界線/ストロークの背景色 |
borderColor | string | #000000 | メインの境界線/ストロークの色 |
borderWidth | string | 10 | メインの境界線/ストロークの幅 |
valueText | string | null | ゲージの値テキスト(ゲージの中央にある大きなテキスト) |
valueTextColor | string | #000000 | 値のテキストの色 |
valueFontSize | string | 31 | 値のテキストのフォントサイズ |
valueFontWeight | string | 500 | 値のテキストのフォントウェイト |
labelText | string | null | ゲージの追加ラベルテキスト |
labelTextColor | string | #888888 | ラベルテキストの色 |
labelFontSize | string | 14 | ラベルテキストのフォントサイズ |
labelFontWeight | string | 400 | ラベルテキストのフォントウェイト |
on | object | イベントハンドラーを持つオブジェクト。例:
|
ゲージのメソッドとプロパティ
ゲージを作成するには、次の呼び出しが必要です
var gauge = app.gauge.create({ /* parameters */ })
その後、便利なメソッドとプロパティを持つ、初期化されたインスタンス(上記の例のgauge
変数など)があります
プロパティ | |
---|---|
gauge.app | グローバルアプリインスタンスへのリンク |
gauge.el | ゲージのHTML要素 |
gauge.$el | ゲージのHTML要素を持つDom7インスタンス |
gauge.svgEl | ゲージで生成されたSVG HTML要素 |
gauge.$svgEl | 生成されたSVG HTML要素を持つDom7インスタンス |
gauge.params | ゲージのパラメーター |
メソッド | |
gauge.update(parameters) | 渡されたパラメーターに従って、ゲージのSVG要素を更新/再描画します。ゲージの初期化に必要な同じパラメーターを持つオブジェクトを受け入れます。更新する必要のあるパラメーターのみを渡すことができます。例:
|
gauge.destroy() | ゲージインスタンスを破棄します |
gauge.on(event, handler) | イベントハンドラーを追加します |
gauge.once(event, handler) | 発生後に削除されるイベントハンドラーを追加します |
gauge.off(event, handler) | イベントハンドラーを削除します |
gauge.off(event) | 指定されたイベントのすべてのハンドラーを削除します |
gauge.emit(event, ...args) | インスタンスでイベントを発生させます |
ゲージのイベント
ゲージは、ゲージ要素で次のDOMイベントと、アプリおよびゲージインスタンスでのイベントを発生させます
DOMイベント
イベント | ターゲット | 説明 |
---|---|---|
gauge:beforedestroy | ゲージ要素<div class="gauge"> | イベントは、ゲージインスタンスが破棄される直前にトリガーされます |
アプリとゲージインスタンスのイベント
ゲージインスタンスは、自身のインスタンスとアプリインスタンスの両方でイベントを発生させます。アプリインスタンスのイベントには、gauge
がプレフィックスとして付いた同じ名前があります。
イベント | 引数 | ターゲット | 説明 |
---|---|---|---|
beforeDestroy | (gauge) | gauge | イベントは、ゲージインスタンスが破棄される直前にトリガーされます。引数として、イベントハンドラーはゲージインスタンスを受け取ります |
gaugeBeforeDestroy | (gauge) | app |
ゲージの自動初期化
ゲージAPIを使用する必要がなく、ゲージがページの内部にあり、ページ初期化時にDOMに存在する場合は、追加のgauge-init
クラスを追加し、data-
属性ですべてのパラメーターを指定するだけで自動的に初期化できます
<!-- Add gauge-init class, and specify parameters in data- attributes -->
<div
class="gauge gauge-init my-gauge"
data-type="circle"
data-value="0.44"
data-value-text="44%"
data-value-text-color="#ff9800"
data-border-color="#ff9800"
></div>
この場合、自動的に作成されたゲージインスタンスにアクセスする必要がある場合は、app.gauge.get
アプリメソッドを使用できます
var gauge = app.gauge.get('.my-gauge');
gauge.update({
value: 0.9,
});
例
<template>
<div class="page">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner sliding">
<div class="title">Gauge</div>
</div>
</div>
<div class="page-content">
<div class="block block-strong-ios block-outline-ios">
<p>Framework7 comes with Gauge component. It produces nice looking fully responsive SVG gauges.</p>
</div>
<div class="block block-strong-ios block-outline-ios text-align-center">
<div class="gauge demo-gauge"></div>
<p class="segmented segmented-raised">
<a class="button ${gaugeValue === 0 ? 'button-active' : ''}" @click=${()=> setGaugeValue(0)}>0%</a>
<a class="button ${gaugeValue === 25 ? 'button-active' : ''}" @click=${()=>
setGaugeValue(25)}>25%</a>
<a class="button ${gaugeValue === 50 ? 'button-active' : ''}" @click=${()=>
setGaugeValue(50)}>50%</a>
<a class="button ${gaugeValue === 75 ? 'button-active' : ''}" @click=${()=>
setGaugeValue(75)}>75%</a>
<a class="button ${gaugeValue === 100 ? 'button-active' : ''}" @click=${()=>
setGaugeValue(100)}>100%</a>
</p>
</div>
<div class="block-title">Circle Gauges</div>
<div class="block block-strong-ios block-outline-ios">
<div class="grid grid-cols-2 grid-gap">
<div class="text-align-center">
<div class="gauge gauge-init" data-type="circle" data-value="0.44" data-value-text="44%"
data-value-text-color="#ff9800" data-border-color="#ff9800"></div>
</div>
<div class="text-align-center">
<div class="gauge gauge-init" data-type="circle" data-value="0.12" data-value-text="$120"
data-value-text-color="#4caf50" data-border-color="#4caf50" data-label-text="of $1000 budget"
data-label-text-color="#f44336" data-label-font-weight="700"></div>
</div>
</div>
</div>
<div class="block-title">Semicircle Gauges</div>
<div class="block block-strong-ios block-outline-ios">
<div class="grid grid-cols-2 grid-gap">
<div class="text-align-center">
<div class="gauge gauge-init" data-type="semicircle" data-value="0.3" data-value-text="30%"
data-value-text-color="#f44336" data-border-color="#f44336"></div>
</div>
<div class="text-align-center">
<div class="gauge gauge-init" data-type="semicircle" data-value="0.5" data-value-text="30kg"
data-value-text-color="#e91e63" data-border-color="#e91e63" data-label-text="of 60kg total"
data-label-text-color="#333"></div>
</div>
</div>
</div>
<div class="block-title">Customization</div>
<div class="block block-strong-ios block-outline-ios">
<div class="grid grid-cols-2 grid-gap">
<div class="text-align-center">
<div class="gauge gauge-init" data-type="circle" data-value="0.35" data-value-text="35%"
data-value-text-color="#4caf50" data-value-font-size="51" data-value-font-weight="700"
data-border-width="20" data-border-color="#4caf50" data-border-bg-color="#ffeb3b" data-bg-color="#ffeb3b">
</div>
</div>
<div class="text-align-center">
<div class="gauge gauge-init" data-type="circle" data-value="0.67" data-value-text="$670"
data-value-text-color="#000" data-border-color="#ff9800" data-label-text="of $1000 spent"
data-label-text-color="#4caf50" data-label-font-weight="800" data-label-font-size="12"
data-border-width="30"></div>
</div>
</div>
<br />
<div class="grid grid-cols-2 grid-gap">
<div class="text-align-center">
<div class="gauge gauge-init" data-type="semicircle" data-value="0.5" data-value-text="50%"
data-value-text-color="#ffeb3b" data-value-font-size="41" data-value-font-weight="700"
data-border-width="10" data-border-color="#ffeb3b" data-border-bg-color="transparent"></div>
</div>
<div class="text-align-center">
<div class="gauge gauge-init" data-type="semicircle" data-value="0.77" data-border-color="#ff9800"
data-label-text="$770 spent so far" data-label-text-color="#ff9800" data-label-font-weight="800"
data-label-font-size="12" data-border-width="10"></div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default (props, { $f7, $onMounted, $onBeforeUnmount, $update }) => {
let gaugeValue = 50;
let demoGauge;
$onMounted(() => {
demoGauge = $f7.gauge.create({
el: '.demo-gauge',
type: 'circle',
value: 0.5,
size: 250,
borderColor: '#2196f3',
borderWidth: 10,
valueText: '50%',
valueFontSize: 41,
valueTextColor: '#2196f3',
labelText: 'amount of something',
});
})
$onBeforeUnmount(() => {
demoGauge.destroy();
})
function setGaugeValue(value) {
gaugeValue = value;
demoGauge.update({
value: value / 100,
valueText: value + '%',
});
$update();
}
return $render;
}
</script>