欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue+highcharts實現(xiàn)3D餅圖效果

 更新時間:2022年03月28日 08:40:41   作者:A孫大壯  
這篇文章主要為大家詳細(xì)介紹了vue+highcharts實現(xiàn)3D餅圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了vue+highcharts實現(xiàn)3D餅圖效果的具體代碼,供大家參考,具體內(nèi)容如下

這是最終效果

<template>
<div class="big-box">
? <div class="com-container" ref="container" style="width:380px;height:300px;">
? </div>
? <div class="tulibox">
? ? <div v-for="(item,index) in peiData" :key="index" class="tuliboxitem">
? ? ? <span class="name">{{item.name}}</span> ? <span class="value">{{item.y}}%</span>
? ? </div>
? </div>
</div>
</template>

<script>
import HighCharts from 'highcharts'

export default {
? props: {},
? data () {
? ? return {
? ? ? peiData: [
? ? ? ? { name: '輸電', y: 28, h: 60 },
? ? ? ? { name: '變電', y: 20, h: 20 },
? ? ? ? { name: '配電', y: 10, h: 32 },
? ? ? ? { name: '新業(yè)務(wù)', y: 6, h: 45 }
? ? ? ]
? ? }
? },
? computed: {},
? updated () {},
? created () {},
? mounted () {
? ? this.initChart()
? ? const that = this
? ? window.onresize = function () { that.initChart() }
? },
? methods: {
? ? initChart () {
? ? ? // 修改3d餅圖繪制過程
? ? ? const each = HighCharts.each
? ? ? const round = Math.round
? ? ? const cos = Math.cos
? ? ? const sin = Math.sin
? ? ? const deg2rad = Math.deg2rad
? ? ? HighCharts.wrap(HighCharts.seriesTypes.pie.prototype, 'translate', function (proceed) {
? ? ? ? proceed.apply(this, [].slice.call(arguments, 1))
? ? ? ? // Do not do this if the chart is not 3D
? ? ? ? if (!this.chart.is3d()) {
? ? ? ? ? return
? ? ? ? }
? ? ? ? const series = this
? ? ? ? const chart = series.chart
? ? ? ? const options = chart.options
? ? ? ? const seriesOptions = series.options
? ? ? ? const depth = seriesOptions.depth || 0
? ? ? ? const options3d = options.chart.options3d
? ? ? ? const alpha = options3d.alpha
? ? ? ? const beta = options3d.beta
? ? ? ? var z = seriesOptions.stacking ? (seriesOptions.stack || 0) * depth : series._i * depth
? ? ? ? z += depth / 2
? ? ? ? if (seriesOptions.grouping !== false) {
? ? ? ? ? z = 0
? ? ? ? }
? ? ? ? each(series.data, function (point) {
? ? ? ? ? const shapeArgs = point.shapeArgs
? ? ? ? ? var angle
? ? ? ? ? point.shapeType = 'arc3d'
? ? ? ? ? var ran = point.options.h
? ? ? ? ? shapeArgs.z = z
? ? ? ? ? shapeArgs.depth = depth * 0.75 + ran
? ? ? ? ? shapeArgs.alpha = alpha
? ? ? ? ? shapeArgs.beta = beta
? ? ? ? ? shapeArgs.center = series.center
? ? ? ? ? shapeArgs.ran = ran
? ? ? ? ? angle = (shapeArgs.end + shapeArgs.start) / 2
? ? ? ? ? point.slicedTranslation = {
? ? ? ? ? ? translateX: round(cos(angle) * seriesOptions.slicedOffset * cos(alpha * deg2rad)),
? ? ? ? ? ? translateY: round(sin(angle) * seriesOptions.slicedOffset * cos(alpha * deg2rad))
? ? ? ? ? }
? ? ? ? })
? ? ? });
? ? ? (function (H) {
? ? ? ? H.wrap(HighCharts.SVGRenderer.prototype, 'arc3dPath', function (proceed) {
? ? ? ? // Run original proceed method
? ? ? ? ? const ret = proceed.apply(this, [].slice.call(arguments, 1))
? ? ? ? ? ret.zTop = (ret.zOut + 0.5) / 100
? ? ? ? ? return ret
? ? ? ? })
? ? ? }(HighCharts))
? ? ? // 生成不同高度的3d餅圖
? ? ? const highEcharts = this.$refs.container
? ? ? HighCharts.chart(highEcharts, {
? ? ? ? chart: {
? ? ? ? ? type: 'pie',
? ? ? ? ? animation: false,
? ? ? ? ? backgroundColor: 'rgba(0,0,0,0)',

? ? ? ? ? events: {
? ? ? ? ? ? load: function () {
? ? ? ? ? ? ? const each = HighCharts.each
? ? ? ? ? ? ? const points = this.series[0].points
? ? ? ? ? ? ? each(points, function (p, i) {
? ? ? ? ? ? ? ? p.graphic.attr({
? ? ? ? ? ? ? ? ? translateY: -p.shapeArgs.ran
? ? ? ? ? ? ? ? })
? ? ? ? ? ? ? ? p.graphic.side1.attr({
? ? ? ? ? ? ? ? ? translateY: -p.shapeArgs.ran
? ? ? ? ? ? ? ? })
? ? ? ? ? ? ? ? p.graphic.side2.attr({
? ? ? ? ? ? ? ? ? translateY: -p.shapeArgs.ran
? ? ? ? ? ? ? ? })
? ? ? ? ? ? ? })
? ? ? ? ? ? }
? ? ? ? ? },
? ? ? ? ? options3d: {
? ? ? ? ? ? enabled: true,
? ? ? ? ? ? alpha: 65
? ? ? ? ? }
? ? ? ? },
? ? ? ? title: {
? ? ? ? ? show: 'false',
? ? ? ? ? text: null
? ? ? ? },
? ? ? ? subtitle: {
? ? ? ? ? text: null
? ? ? ? },
? ? ? ? credits: {
? ? ? ? ? enabled: false
? ? ? ? },
? ? ? ? legend: { // 【圖例】位置樣式
? ? ? ? ? backgroundColor: 'rgba(0,0,0,0)',
? ? ? ? ? shadow: false,
? ? ? ? ? layout: 'vertical',
? ? ? ? ? align: 'right', // 水平方向位置
? ? ? ? ? verticalAlign: 'top', // 垂直方向位置
? ? ? ? ? x: 0, // 距離x軸的距離
? ? ? ? ? y: 100, // 距離Y軸的距離
? ? ? ? ? symbolPadding: 10,
? ? ? ? ? symbolHeight: 14,
? ? ? ? ? itemStyle: {
? ? ? ? ? ? lineHeight: '24px',
? ? ? ? ? ? fontSize: '16px',
? ? ? ? ? ? color: '#fff'
? ? ? ? ? },
? ? ? ? ? labelFormatter: function () {
? ? ? ? ? ? /*
? ? ? ? ? ? * ?格式化函數(shù)可用的變量:this, 可以用 console.log(this) 來查看包含的詳細(xì)信息
? ? ? ? ? ? * ?this 代表當(dāng)前數(shù)據(jù)列對象,所以默認(rèn)的實現(xiàn)是 return this.name
? ? ? ? ? ? */
? ? ? ? ? ? return this.name + this.h + '%'
? ? ? ? ? }
? ? ? ? },
? ? ? ? plotOptions: {
? ? ? ? ? pie: {
? ? ? ? ? ? allowPointSelect: true,
? ? ? ? ? ? cursor: 'pointer',
? ? ? ? ? ? depth: 35,
? ? ? ? ? ? innerSize: 180,
? ? ? ? ? ? dataLabels: {
? ? ? ? ? ? ? enabled: false
? ? ? ? ? ? },
? ? ? ? ? ? // 顯示圖例
? ? ? ? ? ? showInLegend: false
? ? ? ? ? }
? ? ? ? },
? ? ? ? series: [{
? ? ? ? ? type: 'pie',
? ? ? ? ? name: '占比',
? ? ? ? ? // h 是高度 ?y是占的圓環(huán)長度
? ? ? ? ? colorByPoint: true,
? ? ? ? ? colors: [
? ? ? ? ? ? { // 注意?。?!如果是柱狀圖請使用color,如果是面積圖請使用fillColor
? ? ? ? ? ? ? linearGradient: {
? ? ? ? ? ? ? ? x1: 0,
? ? ? ? ? ? ? ? y1: 1,
? ? ? ? ? ? ? ? x2: 1,
? ? ? ? ? ? ? ? y2: 0
? ? ? ? ? ? ? },
? ? ? ? ? ? ? stops: [
? ? ? ? ? ? ? ? [0, '#19596d'],
? ? ? ? ? ? ? ? [1, '#2ea1b2']
? ? ? ? ? ? ? ]
? ? ? ? ? ? }, { // 注意!?。∪绻侵鶢顖D請使用color,如果是面積圖請使用fillColor
? ? ? ? ? ? ? linearGradient: {
? ? ? ? ? ? ? ? x1: 0,
? ? ? ? ? ? ? ? y1: 1,
? ? ? ? ? ? ? ? x2: 1,
? ? ? ? ? ? ? ? y2: 0
? ? ? ? ? ? ? },
? ? ? ? ? ? ? stops: [
? ? ? ? ? ? ? ? [0, '#ee7529'],
? ? ? ? ? ? ? ? [1, '#f5a86c']
? ? ? ? ? ? ? ]
? ? ? ? ? ? }, { // 注意?。?!如果是柱狀圖請使用color,如果是面積圖請使用fillColor
? ? ? ? ? ? ? linearGradient: {
? ? ? ? ? ? ? ? x1: 0,
? ? ? ? ? ? ? ? y1: 1,
? ? ? ? ? ? ? ? x2: 1,
? ? ? ? ? ? ? ? y2: 0
? ? ? ? ? ? ? },
? ? ? ? ? ? ? stops: [
? ? ? ? ? ? ? ? [0, '#f5c055'],
? ? ? ? ? ? ? ? [1, '#967b3d']
? ? ? ? ? ? ? ]
? ? ? ? ? ? }, { // 注意?。。∪绻侵鶢顖D請使用color,如果是面積圖請使用fillColor
? ? ? ? ? ? ? linearGradient: {
? ? ? ? ? ? ? ? x1: 0,
? ? ? ? ? ? ? ? y1: 1,
? ? ? ? ? ? ? ? x2: 1,
? ? ? ? ? ? ? ? y2: 0
? ? ? ? ? ? ? },
? ? ? ? ? ? ? stops: [
? ? ? ? ? ? ? ? [0, '#2d7bb5'],
? ? ? ? ? ? ? ? [1, '#1a5784']
? ? ? ? ? ? ? ]
? ? ? ? ? ? }],
? ? ? ? ? data: this.peiData
? ? ? ? }]
? ? ? })
? ? }
? },
? components: {}
}
</script>

<style scoped lang="less">
.com-container{
? ? width: 380px;
? ? height: 300px;
? ? padding-right: 20px;
}
.big-box{
? ? display: flex;
? ? background-image: url('../img/dizuo.png');
? ? background-repeat: no-repeat;
? ? background-position: 25px 144px;
? ? padding-top: 20px;
}
.tulibox{
? padding-top: 65px;
? .tuliboxitem{
? ? position: relative;
? ? margin: 10px 0;
? ? .name{
? ? ? font-size: 18px;
? ? ? color: #FEFEFF;
? ? ? padding-right: 20px;
? ? }
? ? .value{
? ? ? font-size: 22px;
? ? ? color: #0CD2EA;
? ? }
? }
? .tuliboxitem::before{
? ? ?content: "";
? ? ?position: absolute;
? ? ?width: 16px;
? ? height: 16px;
? ? top: 7px;
? ? border-radius: 50%;
? ? left: -33px;
? }
? .tuliboxitem:nth-child(1)::before{
? ? ? background-color: #fff600;
? }
? .tuliboxitem:nth-child(2)::before{
? ? ? background-color: #209FED;
? }
? .tuliboxitem:nth-child(3)::before{
? ? ? background-color: #808EC7;
? }
? .tuliboxitem:nth-child(4)::before{
? ? ? background-color: #EE6B26;
? }
}
</style>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue3+element-plus?Dialog對話框的使用與setup?寫法的用法

    vue3+element-plus?Dialog對話框的使用與setup?寫法的用法

    這篇文章主要介紹了vue3+element-plus?Dialog對話框的使用?與?setup?寫法的使用,本文通過兩種方式結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • Vue或者React項目配置@路徑別名及智能提示方案

    Vue或者React項目配置@路徑別名及智能提示方案

    這篇文章主要介紹了Vue或者React項目配置@路徑別名及智能提示方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue 項目軟鍵盤回車觸發(fā)搜索事件

    vue 項目軟鍵盤回車觸發(fā)搜索事件

    這篇文章主要介紹了vue 項目軟鍵盤回車觸發(fā)搜索事件,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 在Vue中實現(xiàn)網(wǎng)頁截圖與截屏功能詳解

    在Vue中實現(xiàn)網(wǎng)頁截圖與截屏功能詳解

    在Web開發(fā)中,有時候需要對網(wǎng)頁進(jìn)行截圖或截屏,Vue作為一個流行的JavaScript框架,提供了一些工具和庫,可以方便地實現(xiàn)網(wǎng)頁截圖和截屏功能,本文將介紹如何在Vue中進(jìn)行網(wǎng)頁截圖和截屏,需要的朋友可以參考下
    2023-06-06
  • 淺談vue-router路由切換 組件重用挖下的坑

    淺談vue-router路由切換 組件重用挖下的坑

    今天小編就為大家分享一篇淺談vue-router路由切換 組件重用挖下的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 詳解用webpack2.0構(gòu)建vue2.0超詳細(xì)精簡版

    詳解用webpack2.0構(gòu)建vue2.0超詳細(xì)精簡版

    本篇文章主要介紹了詳解用webpack2.0構(gòu)建vue2.0超詳細(xì)精簡版,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • vue實現(xiàn)物流時間軸效果

    vue實現(xiàn)物流時間軸效果

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)物流時間軸效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • vue?實現(xiàn)滑動塊解鎖示例詳解

    vue?實現(xiàn)滑動塊解鎖示例詳解

    這篇文章主要為大家介紹了vue?實現(xiàn)滑動塊解鎖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • vue中解決微信html5原生ios虛擬鍵返回不刷新問題

    vue中解決微信html5原生ios虛擬鍵返回不刷新問題

    這篇文章主要介紹了vue中解決微信html5原生ios虛擬鍵返回不刷新問題,本文給大家分享解決方法,通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • 在Vue3中使用vue-qrcode庫實現(xiàn)二維碼生成的方法

    在Vue3中使用vue-qrcode庫實現(xiàn)二維碼生成的方法

    在Vue3中實現(xiàn)二維碼生成需要使用第三方庫來處理生成二維碼的邏輯,常用的庫有 qrcode和 vue-qrcode,這篇文章主要介紹了在Vue3中使用vue-qrcode庫實現(xiàn)二維碼生成,需要的朋友可以參考下
    2023-12-12

最新評論