Cube
Create cool information object with Metro 4 Cube component.
About
The cube is a visual component to provide the user with discrete information.
To create cube use attribute data-role="cube".
<div data-role="cube"></div>
Setup cells
You can setup cells with two attributes: data-cells and data-margin.
With data-cells you can set how many cells draw on cube side.
With data-margin you can set cells margin.
<div data-role="cube" data-cells="10" data-margin="2"></div>
Cube colors
You can setup cell color with attribute data-color and setup flashing color with attribute data-flash-color.
Value for data-color can be class name or hex color.
Value for data-flash-color must be hex color.
<div data-role="cube"
data-color="bg-cyan bd-darkCyan"
data-flash-color="#aa00ff"></div>
Flashing rules
By default cube has own set of rules for flashing. You can set your own rules set with attribute data-rule.
Value for this attribute must be object name where rules is stored.
<div data-role="cube" data-rules="myDemoRules2"></div>
<script>
var myDemoRules2 = [
{on: {'top': [1, 2, 5], 'left': [9, 13, 14], 'right': [15, 12, 16]}},
{on: {'top': [9, 6, 3], 'left': [5, 10, 15], 'right': [14, 11, 8]}},
{on: {'top': [13, 4], 'left': [1, 16], 'right': [13, 4]}},
{on: {'top': [10, 7], 'left': [6, 11], 'right': [10, 7]}},
{on: {'top': [8, 14], 'left': [2, 12], 'right': [9, 3]}},
{on: {'top': [11], 'left': [7], 'right': [6]}},
{on: {'top': [12, 15], 'left': [3, 8], 'right': [2, 5]}},
{on: {'top': [16], 'left': [4], 'right': [1]}}
];
</script>
To store rules use next format:
var myRules = [
{
on: {
'top': [cell_number, ...],
'left': [cell_number, ...],
'right': [cell_number, ...]
},
off: {
'top': [cell_number, ...],
'left': [cell_number, ...],
'right': [cell_number, ...]
}
},
...
];
On each step you must set cells for flash on and flash off.
Flash step must contain minimum on or off rule.
In example below present default rules set.
default_rules: [
{
on: {'top': [16], 'left': [4], 'right': [1]},
off: {'top': [13, 4], 'left': [1, 16], 'right': [13, 4]}
},
{
on: {'top': [12, 15], 'left': [3, 8], 'right': [2, 5]},
off: {'top': [9, 6, 3], 'left': [5, 10, 15], 'right': [14, 11, 8]}
},
{
on: {'top': [11], 'left': [7], 'right': [6]},
off: {'top': [1, 2, 5], 'left': [9, 13, 14], 'right': [15, 12, 16]}
},
{
on: {'top': [8, 14], 'left': [2, 12], 'right': [9, 3]},
off: {'top': [16], 'left': [4], 'right': [1]}
},
{
on: {'top': [10, 7], 'left': [6, 11], 'right': [10, 7]},
off: {'top': [12, 15], 'left': [3, 8], 'right': [2, 5]}
},
{
on: {'top': [13, 4], 'left': [1, 16], 'right': [13, 4]},
off: {'top': [11], 'left': [7], 'right': [6]}
},
{
on: {'top': [9, 6, 3], 'left': [5, 10, 15], 'right': [14, 11, 8]},
off: {'top': [8, 14], 'left': [2, 12], 'right': [9, 3]}
},
{
on: {'top': [1, 2, 5], 'left': [9, 13, 14], 'right': [15, 12, 16]},
off: {'top': [10, 7], 'left': [6, 11], 'right': [10, 7]}
}
]
Flash interval
To set flash interval use attribute data-flash-interval. By default this attribute has value 1000 ms.
<div data-role="cube" data-flash-interval="1000"></div>
Numbers of cells
When creating rules, it is useful to know the cell numbers and their location on the faces of the cube. Cells placed from left to right from top left side corner.
Axis
You can set visible cube axis. To set axis visible use attribute data-show-axis="true".
<div data-role="cube" data-show-axis="true"></div>
You can change axis color and style with attributes data-cls-axis, data-cls-axis-x, data-cls-axis-y, data-cls-axis-z and data-axis-style.
For attributes data-cls-axis* use custom class.
For data-axis-style use one of next values: arrow, line and no-style.
line
arrow
no-style
<div data-role="cube"
data-show-axis="true"
data-axis-style="line"
data-cls-axis="bg-dark"
data-rules=""></div>
<div data-role="cube"
data-show-axis="true"
data-axis-style="arrow"
data-cls-axis-x="bg-cyan"
data-cls-axis-y="bg-green"
data-cls-axis-z="bg-orange"
data-rules=""></div>
<div data-role="cube"
data-show-axis="true"
data-axis-style="no-style"
data-rules=""></div>
Events
When cube works, it generate the number of events. You can use callbacks for this events to interact with it.
| Event | Data-* | Desc |
|---|---|---|
| onTick(index, element) | data-on-tick |
Fired for each cube flashing step |
| onCubeCreate(element) | data-on-cube-create |
Fired when cube was created |
<div data-role="cube" data-on-tick="console.log(arguments)"></div>
See additional example on Codepen.io.
Cube methods
Cube has the number of methods to interact with it.
| Method | Desc |
|---|---|
start() |
Start flashing |
stop() |
Stop flashing |
rule(r) |
Set rules |
rule() |
Get rules |
axis(show) |
Set axis visibility. If parameter is true - axis is visible |
<div class="text-center">
<button class="button" onclick="setRules(myDemoRules1)">Rule set #1</button>
<button class="button" onclick="setRules(myDemoRules2)">Rule set #2</button>
<button class="button" onclick="setRules(myDemoRules3)">Rule set #3</button>
</div>
<div data-role="cube" id="demo-cube-methods"></div>
<div class="text-center">
<button class="button"
onclick="$('#demo-cube-methods').data('cube').axis(true)">Show axis</button>
<button class="button"
onclick="$('#demo-cube-methods').data('cube').axis(false)">Hide axis</button>
</div>
<script>
function setRules(rules){
$('#demo-cube-methods').data('cube').rule(rules)
}
</script>
My cube - my rules
You can customize cube component. For change cube visual style use attributes:
data-cls-cube,
data-cls-side,
data-cls-cell,
data-cls-side-left,
data-cls-side-right,
data-cls-side-top,
data-cls-axis,
data-cls-axis-x,
data-cls-axis-y,
data-cls-axis-z.
Use these attributes to set additional classes to cube elements.
Also you can set your own function for flashing cells with attribute data-custom. See example on codepen.io.