仁王2技能图
来自仁王 wiki
<head>
<meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>svg</title> <link rel="stylesheet/less" type="text/css" href="css/skill.less"/> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
</head> <body>
<svg id="taidao" height="600" width="600" viewbox="0 0 600,600"> <template v-for="item in bigCircleConfig"> <circle :cx="item.cx" :cy="item.cy" :r="item.r" :stroke="item.stroke" stroke-width="1" :fill=item.fill></circle> </template>
<template v-for="(item,index) in lineConfig"> <line :x1="item.x1" :y1="item.y1" :x2="item.x2" :y2="item.y2" style="stroke:rgb(255,0,0);stroke-width:2"/> </template>
<template v-if="isShowBox"> <polyline :points="points" style="fill:none;stroke:black;stroke-width:3" /> </template>
<template v-for="(item,index) in circleConfig"> <circle @mouseover="selectStyle (item) " @mouseout="outStyle(item)" :cx="item.cx" :cy="item.cy" :r="item.r||15" :stroke="item.stroke||'black'" stroke-width="1" :fill=item.fill||'#fff'></circle> </template>
</svg>
<el-select v-model="skillValue" placeholder="请选择技能" @change="skillChange"> <el-option v-for="item in skillOptions" :label="item" :value="item"> </el-option> </el-select> <transition name="el-zoom-in-center">
</transition>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<script src="https://unpkg.com/element-ui/lib/index.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/less.js/3.11.1/less.min.js"></script> <script>
new Vue({ el: '#app', data: function () { var _this = this;
console.log(_this) return { bigCircleConfig: [ { cx: 300, cy: 300, r: 250, stroke: 'black', fill: '#fff' }, { cx: 300, cy: 300, r: 200, stroke: 'black', fill: '#fff' }, { cx: 300, cy: 300, r: 150, stroke: 'black', fill: '#fff' }, { cx: 300, cy: 300, r: 100, stroke: 'black', fill: '#fff' }, { cx: 300, cy: 300, r: 60, stroke: 'black', fill: '#fff' }
],
/*左侧技能圆配置*/ circleConfig: [ /*中心坐标为(300,300)*/ /*cx范围300-r至300+r*/ /*最外边圆r为250,故cx范围50至550*/ /*最外圈技能*/ { cx: 300, cy: _this.calcir(250, 300, false), remark: }, { cx: 180, cy: _this.calcir(250, 180, false), remark: '落饭纲',
}, { cx: 420, cy: _this.calcir(250, 420, false), remark: }, { cx: 120, cy: _this.calcir(250, 120, false), remark: }, { cx: 80, cy: _this.calcir(250, 80, false), remark: }, { cx: 50, cy: _this.calcir(250, 50, false), remark: }, { cx: 550, cy: _this.calcir(250, 550, false), remark: },
{ cx: 450, cy: _this.calcir(250, 450, true), remark: }, { cx: 80, cy: _this.calcir(250, 80, true), remark: }, { cx: 120, cy: _this.calcir(250, 120, true), remark: }, { cx: 180, cy: _this.calcir(250, 180, true), remark: },
/*内圈技能r=200故cx范围100至500*/
{ cx: 260, cy: _this.calcir(200, 260, false), remark: '圆2(x:260)' }, { cx: 210, cy: _this.calcir(200, 210, false), remark: '逆风剑' }, { cx: 160, cy: _this.calcir(200, 160, false), remark: '圆2(x:160)' }, { cx: 100, cy: _this.calcir(200, 100, false), remark: },
{ cx: 100, cy: _this.calcir(200, 100, true), remark: },
{ cx: 108, cy: _this.calcir(200, 108, true), remark: },
{ cx: 125, cy: _this.calcir(200, 125, true), remark: },
{ cx: 155, cy: _this.calcir(200, 155, true), remark: }, { cx: 210, cy: _this.calcir(200, 210, true), remark: }, { cx: 300, cy: _this.calcir(200, 300, true), remark: }, { cx: 365, cy: _this.calcir(200, 365, true), remark: },
{ cx: 420, cy: _this.calcir(200, 420, true), remark: }, { cx: 460, cy: _this.calcir(200, 460, true), remark: }, { cx: 485, cy: _this.calcir(200, 485, true), remark: }, { cx: 500, cy: _this.calcir(200, 500, true), remark: },
{ cx: 485, cy: _this.calcir(200, 485, false), remark: }, { cx: 460, cy: _this.calcir(200, 460, false), remark: }, { cx: 390, cy: _this.calcir(200, 390, false), remark: }, { cx: 340, cy: _this.calcir(200, 340, false), remark: },
/*内圈技能r=150故cx范围150至450*/
{ cx: 240, cy: _this.calcir(150, 240, false), remark: '总卷' }, ],
lineConfig:[
],
skillValue: ,
/*右侧下拉框的配置*/ skillOptions: [ '逆风剑', '落饭纲', '总卷', '夜叉一文字', '圆2(x:260)', '圆2(x:160)', ], /*技能说明配置*/ skillConfig: [ { label: '逆风剑',
value: '
所需要学习的技能点2(合计)
'+ '
技能类型 武技
'+ '
将刀刺进地面,在拔起来的同时向上挑斩
' + '
指令
L1 + 三角 (防御中三角)
L1 + 三角 (防御中三角)
'
}, { label: '落饭纲',
value: '
落饭纲
'
}, { label: '总卷',
value: '
总卷
'
}, { label: '夜叉一文字',
value: '
夜叉一文字
'
}, { label: '圆2(x:260)',
value: '
圆2(x:260)
'
}, { label: '圆2(x:160)',
value: '
圆2(x:160)
'
} ], isShowBox: true, showMsg: , points:
} }, mounted() {
/*连线配置 有层级关系 */ this.lineToCircle('落饭纲','逆风剑') this.lineToCircle('落饭纲','圆2(x:160)') this.lineToCircle('圆2(x:260)','总卷') this.lineToCircle('圆2(x:160)','总卷') this.lineToCircle('逆风剑','总卷')
}, methods: {
/*r为外围圆环半径,x为技能圆 圆心变量坐标,isTrue为处于外围圆环的上边还是下边*/ calcir(r, x, isTrue, a, b) { var a1 = a || 300 var b1 = b || 300 var y = 0; if (isTrue) { y = Math.sqrt(r * r - (x - a1) * (x - a1)) + b1 } else { y = b1 - Math.sqrt(r * r - (x - a1) * (x - a1)) }
console.log(y) return y }, lineToCircle(parent, children) { var x1=0,y1=0,x2=0,y2=0 this.circleConfig.forEach(item => { if(item.remark==parent){ x1=item.cx y1=item.cy }else if(item.remark==children){ x2=item.cx y2=item.cy } })
this.lineConfig.push({ x1:x1, y1:y1, x2:x2, y2:y2,
parent:parent, children:children }) }, skillChange(item) { console.log(item); this.skillConfig.forEach(item1 => { if (item1.label == item) { this.isShowBox = true; this.showMsg = item1.value } }) this.circleConfig.forEach(item1 => { item1.fill = '#ffffff' if (item1.remark == item) { item1.fill = '#ff0000' }
this.$forceUpdate() })
this.points= this.lineSelect(item) },
lineSelect(item){ this.lineConfig.forEach(item1=>{ if(item1.parent==item){ this.points+=item1.x1+','+item1.y1+' '+item1.x2+','+item1.y2+' '
if(item1.children){ this.lineSelect(item1.children) } } }) }, selectStyle(item) { console.log(item)
this.circleConfig.forEach(item1 => { item1.fill = '#ffffff' }) item.fill = '#ff0000' this.isShowBox = true;
this.skillConfig.forEach(item1 => { item1.fill = '#ffffff' if (item1.label == item.remark) {
this.skillValue = item1.label this.showMsg = item1.value } })
this.points= this.lineSelect(item.remark)
this.$forceUpdate() }, outStyle(item) { item.fill = '#ffffff'; this.isShowBox = false; this.skillValue = this.showMsg = this.$forceUpdate() } } })
</script> </body>