The Web Components radial gauge component provides a number of visual elements, like a needle, tick marks, ranges, and labels, in order to create a predefined shape and scale. The IgcRadialGaugeComponent also has built-in support for animated transitions. This animation is easily customizable by setting the transitionDuration property.
Web Components Radial Gauge Example
The following sample demonstrates how setting multiple properties on the same IgcRadialGaugeComponent can transform it to completely different radial gauge.
The radial gauge component comes with a backing shape drawn behind the scale that acts as a background for the radial gauge.
The backing element represents background and border of the radial gauge component. It is always the first element rendered and all the rest of elements such as needle, labels, and tick marks are overlay on top of it.
The backing can be circular or fitted. A circular shape creates a 360 degree circle gauge while a fitted shape creates a filled arc segment encompassing the scaleStartAngle and scaleEndAngle properties. This can be set by setting the backingShape property.
<!DOCTYPE html><html><head><title>RadialGaugeBacking</title><metacharset="UTF-8" /><linkrel="shortcut icon"href="https://static.infragistics.com/xplatform/images/browsers/wc.png" ><linkrel="stylesheet"href="https://fonts.googleapis.com/icon?family=Material+Icons" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Kanit&display=swap" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Titillium Web" /><linkrel="stylesheet"href="https://static.infragistics.com/xplatform/css/samples/shared.v8.css"type="text/css" /></head><body><divid="root"><divclass="container sample center"><igc-radial-gaugebacking-shape="Fitted"backing-brush="#fcfcfc"backing-outline="DodgerBlue"backing-oversweep="5"backing-corner-radius="10"backing-stroke-thickness="5"backing-outer-extent="0.8"backing-inner-extent="0.15"scale-start-angle="135"scale-end-angle="45"scale-brush="#dddddd"height="100%"width="100%"minimum-value="0"value="50"maximum-value="80"interval="10" /></div></div><!-- This script is needed only for parcel and it will be excluded for webpack -->
<% if (false) { %><scriptsrc="src/index.ts"></script><% } %>
</body></html>html
/* shared styles are loaded from: *//* https://static.infragistics.com/xplatform/css/samples */css
Scale
The scale is visual element that highlights full range of values in the gauge which can be created by supplying minimumValue and maximumValue values. Together with backing, it defines overall shape of gauge. The scaleStartAngle and scaleEndAngle properties define bounds of arc of the scale. While, the scaleSweepDirection property specifies whether the scale sweeps in clockwise or counter-clockwise direction. You can customize appearance of the scale by setting scaleBrush, scaleStartExtent, and scaleEndExtent properties.
<!DOCTYPE html><html><head><title>RadialGaugeScale</title><metacharset="UTF-8" /><linkrel="shortcut icon"href="https://static.infragistics.com/xplatform/images/browsers/wc.png" ><linkrel="stylesheet"href="https://fonts.googleapis.com/icon?family=Material+Icons" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Kanit&display=swap" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Titillium Web" /><linkrel="stylesheet"href="https://static.infragistics.com/xplatform/css/samples/shared.v8.css"type="text/css" /></head><body><divid="root"><divclass="container sample center"><igc-radial-gaugescale-start-angle="135"scale-end-angle="45"scale-brush="DodgerBlue"scale-sweep-direction="Clockwise"scale-oversweep="1"scale-oversweep-shape="Fitted"scale-start-extent="0.45"scale-end-extent="0.575"height="100%"width="100%"minimum-value="0"value="50"maximum-value="80"interval="10" ></igc-radial-gauge></div></div><!-- This script is needed only for parcel and it will be excluded for webpack -->
<% if (false) { %><scriptsrc="src/index.ts"></script><% } %>
</body></html>html
/* shared styles are loaded from: *//* https://static.infragistics.com/xplatform/css/samples */css
Labels and Titles
The radial gauge labels are visual elements displaying numeric values at a specified interval between values of the minimumValue and maximumValue properties. You can position labels by setting the labelExtent property to a fraction, where 0 represents center of gauge and 1 represents outer extent of the gauge backing. Also, you can customize labels setting various styling properties such as fontBrush and font.
Each of these labels for the needle have various styling attributes you can apply to change the font, angle, brush and distance from the center of the gauge such as titleExtent, titleAngle, SubtitleFontSize, highlightLabelBrush.
<!DOCTYPE html><html><head><title>RadialGaugeLabels</title><metacharset="UTF-8" /><linkrel="shortcut icon"href="https://static.infragistics.com/xplatform/images/browsers/wc.png" ><linkrel="stylesheet"href="https://fonts.googleapis.com/icon?family=Material+Icons" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Kanit&display=swap" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Titillium Web" /><linkrel="stylesheet"href="https://static.infragistics.com/xplatform/css/samples/shared.v8.css"type="text/css" /></head><body><divid="root"><divclass="container sample center"><igc-radial-gaugeid="gauge"font-brush="DodgerBlue"font="20px Verdana"label-interval="10"label-extent="0.65"labels-pre-terminal="0"labels-post-initial="0"title-displays-value=truesubtitle-text="MPH"height="100%"width="100%"minimum-value="0"value="50"maximum-value="80"interval="10" ></igc-radial-gauge></div></div><!-- This script is needed only for parcel and it will be excluded for webpack -->
<% if (false) { %><scriptsrc="src/index.ts"></script><% } %>
</body></html>html
/* shared styles are loaded from: *//* https://static.infragistics.com/xplatform/css/samples */css
Title & Subtitle
titleText and subtitleText properties are available and can both be used to display custom text for the needle. Alternatively, titleDisplaysValue and subtitleDisplaysValue, when set to true, will let display the needle's value and override titleText and subtitleText. So you can occupy custom text for the title but show the value via the subtitle and vice versa.
If the highlight needle is shown, as explained below, then custom text can be shown via highlightLabelText, otherwise highlightLabelDisplaysValue can be enabled and display it's value.
The radial gauge's labels and titles can change it's scaling. To enable this, first set opticalScalingEnabled to true. Then you can set opticalScalingSize which manages the size at which labels have 100% optical scaling. Labels will have larger fonts when gauge's size is larger. For example, labels will have a 200% larger font size when this property is set to 500 and the gauge px size is doubled to eg. 1000.
EXAMPLE
TS
HTML
CSS
import { IgcRadialGaugeModule } from'igniteui-webcomponents-gauges';
import { IgcRadialGaugeComponent } from'igniteui-webcomponents-gauges';
import { ModuleManager } from'igniteui-webcomponents-core';
ModuleManager.register(IgcRadialGaugeModule);
exportclassRadialGaugeOpticalScaling{
private gauge: IgcRadialGaugeComponent;
constructor() {
this.onGaugeSizeChanged = this.onGaugeSizeChanged.bind(this);
this.gauge = document.getElementById('gauge') as IgcRadialGaugeComponent;
let checkbox1 = document.getElementById('checkbox1');
checkbox1!.addEventListener('change', this.onOpticalScalingChanged);
let slider1 = document.getElementById('slider') as HTMLInputElement;
slider1!.addEventListener('change', this.onGaugeSizeChanged);
}
public onOpticalScalingChanged = (e: any) => {
const isEnabled = e.target.checked;
this.gauge.opticalScalingEnabled = isEnabled;
if (isEnabled) {
this.gauge.opticalScalingEnabled = true;
}
else {
this.gauge.opticalScalingEnabled = false;
}
}
public onGaugeSizeChanged = (e: any) => {
let num: number = parseInt(e.target.value);
this.gauge.width = num.toString() + "%";
this.gauge.height = num.toString() + "%";
}
}
new RadialGaugeOpticalScaling();
ts
<!DOCTYPE html><html><head><title>RadialGaugeOpticalScaling</title><metacharset="UTF-8" /><linkrel="shortcut icon"href="https://static.infragistics.com/xplatform/images/browsers/wc.png" ><linkrel="stylesheet"href="https://fonts.googleapis.com/icon?family=Material+Icons" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Kanit&display=swap" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Titillium Web" /><linkrel="stylesheet"href="https://static.infragistics.com/xplatform/css/samples/shared.v8.css"type="text/css" /></head><body><divid="root"><divclass="container sample center"><divclass="options horizontal"><labelclass="options-label">Optical Scaling: </label><labelclass="options-label"><inputtype="checkbox"id="checkbox1"checked="true"></input> Resize Gauge: </label><inputclass="options-slider"id="slider"type="range"min="20"max="100"step="10"value="100"></input></div><igc-radial-gaugeid="gauge"height="100%"width="100%"title-displays-value="true"subtitle-text="MPH"minimum-value="0"value="50"maximum-value="80"interval="10"title-extent="0.5"subtitle-extent="0.65"optical-scaling-enabled="true"optical-scaling-size="500"></igc-radial-gauge></div></div><!-- This script is needed only for parcel and it will be excluded for webpack -->
<% if (false) { %><scriptsrc="src/index.ts"></script><% } %>
</body></html>html
/* shared styles are loaded from: *//* https://static.infragistics.com/xplatform/css/samples */css
Tick Marks
Tick marks are thin lines radiating from the center of the radial gauge. There are two types of tick marks: major and minor. Major tick marks are displayed at the interval between the minimumValue and maximumValue properties. Use the minorTickCount property to specify the number of minor tick marks displayed between each major tick mark. You can control the length of tick marks by setting a fraction (between 0 and 1) to tickStartExtent, tickEndExtent, minorTickStartExtent, and minorTickEndExtent properties.
<!DOCTYPE html><html><head><title>RadialGaugeTickmarks</title><metacharset="UTF-8" /><linkrel="shortcut icon"href="https://static.infragistics.com/xplatform/images/browsers/wc.png" ><linkrel="stylesheet"href="https://fonts.googleapis.com/icon?family=Material+Icons" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Kanit&display=swap" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Titillium Web" /><linkrel="stylesheet"href="https://static.infragistics.com/xplatform/css/samples/shared.v8.css"type="text/css" /></head><body><divid="root"><divclass="container sample center"><igc-radial-gaugeid="gauge"height="100%"width="100%"minimum-vue="0"value="50"maximum-value="80"interval="10"tick-start-extent="0.5"tick-end-extent="0.57"tick-stroke-thickness="2"tick-brush="DodgerBlue"minor-tick-count="4"minor-tick-end-extent="0.520"minor-tick-start-extent="0.57"minor-tick-stroke-thickness="1"minor-tick-brush="DarkViolet" ></igc-radial-gauge></div></div><!-- This script is needed only for parcel and it will be excluded for webpack -->
<% if (false) { %><scriptsrc="src/index.ts"></script><% } %>
</body></html>html
/* shared styles are loaded from: *//* https://static.infragistics.com/xplatform/css/samples */css
Ranges
A range highlights a set of continuous values bound by a specified minimumValue and maximumValue properties. You can add multiple ranges to the radial gauge by specifying their starting and ending values. Each range has a few customization properties such as brush and outline. Alternatively, you can set rangeBrushes and rangeOutlines properties to a list of colors for the ranges.
<!DOCTYPE html><html><head><title>RadialGaugeRanges</title><metacharset="UTF-8" /><linkrel="shortcut icon"href="https://static.infragistics.com/xplatform/images/browsers/wc.png" ><linkrel="stylesheet"href="https://fonts.googleapis.com/icon?family=Material+Icons" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Kanit&display=swap" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Titillium Web" /><linkrel="stylesheet"href="https://static.infragistics.com/xplatform/css/samples/shared.v8.css"type="text/css" /></head><body><divid="root"><divclass="container sample center"><igc-radial-gaugeheight="100%"width="100%"minimum-value="0"value="50"maximum-value="80"interval="10"range-brushes ="#a4bd29, #F86232"range-outlines="#a4bd29, #F86232" ><igc-radial-gauge-rangename="range1"start-value="10"end-value="25"inner-start-extent="0.50"inner-end-extent="0.50"outer-start-extent="0.57"outer-end-extent="0.57" ></igc-radial-gauge-range><igc-radial-gauge-rangename="range2"start-value="25"end-value="40"inner-start-extent="0.50"inner-end-extent="0.50"outer-start-extent="0.57"outer-end-extent="0.57" ></igc-radial-gauge-range></igc-radial-gauge></div></div><!-- This script is needed only for parcel and it will be excluded for webpack -->
<% if (false) { %><scriptsrc="src/index.ts"></script><% } %>
</body></html>html
/* shared styles are loaded from: *//* https://static.infragistics.com/xplatform/css/samples */css
Needle
Radial gauge needles are visual elements used to signify a gauge set value. Needles are available in one of the several predefined shapes. The needle can have a pivot shape, which is placed in the center of the gauge. The pivot shape also takes one of the predefined shapes. Pivot shapes that include an overlay or an underlay can have a separate pivot brush applied to the shape.
You can enable an interactive mode of the gauge (using isNeedleDraggingEnabled property) and the end-user will be able to change value by dragging the needle between values of minimumValue and maximumValue properties.
<!DOCTYPE html><html><head><title>RadialGaugeNeedle</title><metacharset="UTF-8" /><linkrel="shortcut icon"href="https://static.infragistics.com/xplatform/images/browsers/wc.png" ><linkrel="stylesheet"href="https://fonts.googleapis.com/icon?family=Material+Icons" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Kanit&display=swap" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Titillium Web" /><linkrel="stylesheet"href="https://static.infragistics.com/xplatform/css/samples/shared.v8.css"type="text/css" /></head><body><divid="root"><divclass="container sample center"><igc-radial-gaugeheight="100%"width="100%"is-needle-dragging-enabled="true"is-needle-dragging-constrained="true"needle-shape="NeedleWithBulb"needle-brush="DodgerBlue"needle-outline="DodgerBlue"needle-end-extent="0.475"needle-stroke-thickness="1"needle-pivot-shape="CircleOverlay"needle-pivot-brush="#9f9fa0"needle-pivot-outline="#9f9fa0"needle-pivot-width-ratio="0.2"needle-pivot-stroke-thickness="1"value="50"minimum-value="0"maximum=value="80"interval="10" ></igc-radial-gauge></div></div><!-- This script is needed only for parcel and it will be excluded for webpack -->
<% if (false) { %><scriptsrc="src/index.ts"></script><% } %>
</body></html>html
/* shared styles are loaded from: *//* https://static.infragistics.com/xplatform/css/samples */css
Highlight Needle
The radial gauge can be modified to show a second needle. This will make the main needle's value appear with a lower opacity. To enable this first set highlightValueDisplayMode to Overlay and then apply a highlightValue.
<!DOCTYPE html><html><head><title>RadialGaugeHighlightNeedle</title><metacharset="UTF-8" /><linkrel="shortcut icon"href="https://static.infragistics.com/xplatform/images/browsers/wc.png" ><linkrel="stylesheet"href="https://fonts.googleapis.com/icon?family=Material+Icons" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Kanit&display=swap" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Titillium Web" /><linkrel="stylesheet"href="https://static.infragistics.com/xplatform/css/samples/shared.v8.css"type="text/css" /></head><body><divid="root"><divclass="container sample center"><igc-radial-gaugeid="gauge"highlight-value="50"highlight-value-display-mode="Overlay"highlight-label-displays-value="true"highlight-label-snaps-to-needle-pivot="true"is-highlight-needle-dragging-enabled="true"label-interval="10"label-extent="0.65"height="100%"width="100%"minimum-value="0"value="30"maximum-value="100"interval="10" ></igc-radial-gauge></div></div><!-- This script is needed only for parcel and it will be excluded for webpack -->
<% if (false) { %><scriptsrc="src/index.ts"></script><% } %>
</body></html>html
/* shared styles are loaded from: *//* https://static.infragistics.com/xplatform/css/samples */css
Summary
For your convenience, all above code snippets are combined into one code block below that you can easily copy to your project and see the radial gauge with all features and visuals enabled.