g6/demos/gallery-worldcup-tree.html

290 lines
8.7 KiB
HTML
Raw Normal View History

2018-07-18 10:12:45 +08:00
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>画廊-</title>
</head>
<body>
<style>
#mountNode {
width: 760px;
height: 744px;
background: url(https://gw.alipayobjects.com/zos/rmsportal/OSujrQtOvnOJVzRLmfIP.png);
}
</style>
<div id="mountNode"></div>
<script src="../build/g6.js"></script>
<script src="../build/plugin.edge.polyline.js"></script>
<script>
G6.registerNode('card', {
width: 134,
height: 60,
anchor: {
intersectBox: 'rect',
2018-07-18 12:02:26 +08:00
points(node) {
const hierarchy = node.getHierarchy();
const parent = node.getParent();
2018-07-18 10:12:45 +08:00
if(parent && hierarchy > 2) {
2018-07-18 12:02:26 +08:00
const bbox = node.getBBox();
2018-07-18 10:12:45 +08:00
const parentBBox = parent.getBBox();
if(parentBBox.centerY > bbox.centerY) {
return [
[0, 0.5],
[1, 0.5],
[0.5, 1]
]
} else {
return [
[0, 0.5],
[1, 0.5],
[0.5, 0],
]
}
}
return [
[0, 0.5],
[1, 0.5],
[0.5, 0],
[0.5, 1]
]
}
},
getScoreTextStyle() {
return {
textAlign: 'center',
2018-07-18 12:02:26 +08:00
fontWeight: 900,
fontSize: 14,
fill: '#000'
2018-07-18 10:12:45 +08:00
};
},
getTeamNameTextStyle() {
return {
textAlign: 'center',
fill: 'rgba(0, 0, 0, 0.45)'
};
},
draw(item) {
const group = item.getGraphicGroup();
const model = item.getModel();
const scoreTextStyle = this.getScoreTextStyle(item);
const teamNameTextStyle = this.getTeamNameTextStyle(item);
const width = this.width;
const height = this.height;
const keyShape = group.addShape('rect', {
attrs: {
x: 0,
y: 0,
width,
height,
fill: '#fff',
radius: 4,
}
});
group.addShape('image', {
attrs: {
x: 8,
y: 8,
width: 40,
height: 24,
img: model.flagA
}
});
group.addShape('image', {
attrs: {
x: 86,
y: 8,
width: 40,
height: 24,
img: model.flagB
}
});
group.addShape('text', {
attrs: {
2018-07-18 12:02:26 +08:00
...teamNameTextStyle,
2018-07-18 10:12:45 +08:00
x: 28,
y: 52,
text: model.teamA,
}
});
group.addShape('text', {
attrs: {
2018-07-18 12:02:26 +08:00
...teamNameTextStyle,
2018-07-18 10:12:45 +08:00
x: 106,
y: 52,
text: model.teamB,
}
});
group.addShape('text', {
attrs: {
2018-07-18 12:02:26 +08:00
...scoreTextStyle,
2018-07-18 10:12:45 +08:00
x: 67,
y: 52,
text: model.scoreA + ' : '+ model.scoreB,
}
});
return keyShape;
}
});
const data = {
roots: [{
teamA: '巴西',
flagA: 'https://gw.alipayobjects.com/zos/rmsportal/kPbSJtcjvzRsIKkfRUlf.jpg',
teamB: '法国',
flagB: 'https://gw.alipayobjects.com/zos/rmsportal/yHYaCVIPRwEmmjbNqJjW.jpg',
scoreA: 2,
scoreB: 0,
children: [{
teamA: '巴西',
flagA: 'https://gw.alipayobjects.com/zos/rmsportal/kPbSJtcjvzRsIKkfRUlf.jpg',
teamB: '法国',
flagB: 'https://gw.alipayobjects.com/zos/rmsportal/yHYaCVIPRwEmmjbNqJjW.jpg',
scoreA: 2,
scoreB: 0,
children: [
{
teamA: '巴西',
flagA: 'https://gw.alipayobjects.com/zos/rmsportal/kPbSJtcjvzRsIKkfRUlf.jpg',
teamB: '法国',
flagB: 'https://gw.alipayobjects.com/zos/rmsportal/yHYaCVIPRwEmmjbNqJjW.jpg',
scoreA: 2,
scoreB: 0,
children: [{
teamA: '巴西',
flagA: 'https://gw.alipayobjects.com/zos/rmsportal/kPbSJtcjvzRsIKkfRUlf.jpg',
teamB: '法国',
flagB: 'https://gw.alipayobjects.com/zos/rmsportal/yHYaCVIPRwEmmjbNqJjW.jpg',
scoreA: 2,
scoreB: 0,
}, {
teamA: '巴西',
flagA: 'https://gw.alipayobjects.com/zos/rmsportal/kPbSJtcjvzRsIKkfRUlf.jpg',
teamB: '法国',
flagB: 'https://gw.alipayobjects.com/zos/rmsportal/yHYaCVIPRwEmmjbNqJjW.jpg',
scoreA: 2,
scoreB: 0,
}]
},
{
teamA: '巴西',
flagA: 'https://gw.alipayobjects.com/zos/rmsportal/kPbSJtcjvzRsIKkfRUlf.jpg',
teamB: '法国',
flagB: 'https://gw.alipayobjects.com/zos/rmsportal/yHYaCVIPRwEmmjbNqJjW.jpg',
scoreA: 2,
scoreB: 0,
children: [{
teamA: '巴西',
flagA: 'https://gw.alipayobjects.com/zos/rmsportal/kPbSJtcjvzRsIKkfRUlf.jpg',
teamB: '法国',
flagB: 'https://gw.alipayobjects.com/zos/rmsportal/yHYaCVIPRwEmmjbNqJjW.jpg',
scoreA: 2,
scoreB: 0,
}, {
teamA: '巴西',
flagA: 'https://gw.alipayobjects.com/zos/rmsportal/kPbSJtcjvzRsIKkfRUlf.jpg',
teamB: '法国',
flagB: 'https://gw.alipayobjects.com/zos/rmsportal/yHYaCVIPRwEmmjbNqJjW.jpg',
scoreA: 2,
scoreB: 0,
}]
}
]
}, {
teamA: '巴西',
flagA: 'https://gw.alipayobjects.com/zos/rmsportal/kPbSJtcjvzRsIKkfRUlf.jpg',
teamB: '法国',
flagB: 'https://gw.alipayobjects.com/zos/rmsportal/yHYaCVIPRwEmmjbNqJjW.jpg',
scoreA: 2,
scoreB: 0,
children: [
{
teamA: '巴西',
flagA: 'https://gw.alipayobjects.com/zos/rmsportal/kPbSJtcjvzRsIKkfRUlf.jpg',
teamB: '法国',
flagB: 'https://gw.alipayobjects.com/zos/rmsportal/yHYaCVIPRwEmmjbNqJjW.jpg',
scoreA: 2,
scoreB: 0,
children: [
{
teamA: '巴西',
flagA: 'https://gw.alipayobjects.com/zos/rmsportal/kPbSJtcjvzRsIKkfRUlf.jpg',
teamB: '法国',
flagB: 'https://gw.alipayobjects.com/zos/rmsportal/yHYaCVIPRwEmmjbNqJjW.jpg',
scoreA: 2,
scoreB: 0,
},
{
teamA: '巴西',
flagA: 'https://gw.alipayobjects.com/zos/rmsportal/kPbSJtcjvzRsIKkfRUlf.jpg',
teamB: '法国',
flagB: 'https://gw.alipayobjects.com/zos/rmsportal/yHYaCVIPRwEmmjbNqJjW.jpg',
scoreA: 2,
scoreB: 0,
}
]
},
{
teamA: '巴西',
flagA: 'https://gw.alipayobjects.com/zos/rmsportal/kPbSJtcjvzRsIKkfRUlf.jpg',
teamB: '法国',
flagB: 'https://gw.alipayobjects.com/zos/rmsportal/yHYaCVIPRwEmmjbNqJjW.jpg',
scoreA: 2,
scoreB: 0,
children: [
{
teamA: '巴西',
flagA: 'https://gw.alipayobjects.com/zos/rmsportal/kPbSJtcjvzRsIKkfRUlf.jpg',
teamB: '法国',
flagB: 'https://gw.alipayobjects.com/zos/rmsportal/yHYaCVIPRwEmmjbNqJjW.jpg',
scoreA: 2,
scoreB: 0,
},
{
teamA: '巴西',
flagA: 'https://gw.alipayobjects.com/zos/rmsportal/kPbSJtcjvzRsIKkfRUlf.jpg',
teamB: '法国',
flagB: 'https://gw.alipayobjects.com/zos/rmsportal/yHYaCVIPRwEmmjbNqJjW.jpg',
scoreA: 2,
scoreB: 0,
}
]
}
]
}]
}]
};
const layout = new G6.Layouts.CompactBoxTree({
direction: 'V',
getHGap() {
return 12;
},
getVGap() {
return 16;
}
});
const tree = new G6.Tree({
container: 'mountNode',
width: 760,
height: 744,
layout,
fitView: 'cc'
});
tree.node({
shape: 'card'
});
tree.edge({
shape: 'polyline-round',
style: {
stroke: 'white',
lineWidth: 1,
strokeOpacity: 1
}
});
tree.read(data);
</script>
</body>
</html>