web前端可视化项目

#哪个编程工具让你的工作效率翻倍?#

目录

一、什么是可视化

二、可视化项目的详解

1.可视化项目图片

2.左边部分

1.监控部分

2.点位部分

3.中间部分

1.地图部分

2.统计部分

4.右边部分

1.销售统计

2.折线图部分

3.渠道部分

4.热榜部分


一、什么是可视化

        可视化是利用计算机图形学和 图像处理 技术,将数据转换成图形或图像在屏幕上显示出来,并进行交互处理的理论、方法和技术。

        可视化能够通过图像图像来更好的查看数据。

        可视化项目通常在业务报告,地铁线路图,医院的大屏,气象地图,金融投资等等一些地方可以看到。

二、可视化项目的详解

1.可视化项目图片

        该项目用到了一个ECharts开源可视化库,底层依赖矢量图形库,提供直观,交互丰富,可高度个性化定制的数据可视化图表。

        ECharts教程:快速上手 - 使用手册 - Apache ECharts

<script src="https://cdn.jsdelivr.net/npm/echarts@5.5.1/dist/echarts.min.js"></script>

 还有开源可视化图库网站:https://www.isqqw.com/

这里适配了三种屏幕尺寸:

1024px适配小屏幕

1024px~1920px适配pc端

1920px适配大屏幕

项目的布局分为上下两部分,上为logo标题,下位可视化主体部分

可视化主体部分又分为左中右三部分

2.左边部分

左边部分分为三个盒子,其中重点是监控区域和点位分布图区域

1.监控部分
<style>
    .myfaultlist {
                            margin-left: 1vw;
                            margin-top: -1vw;
                            height: 20vw;
                            overflow: hidden;
                            .faultmar {
                                animation: animat 15s linear infinite;
                                &:hover{
                                    animation-play-state: paused;
                                }
                                
                                .row {
                                    display: flex;
                                    padding: 0.7vw 1vw;

                                    .col {
                                        font-size: 0.08rem;
                                    }
                                }
                            }
                        }
    @keyframes animat {
    0%{
        transform:translateY(0);
    }
    100%{
        transform: translateY(-50%);
    }
}
<style>
<div class="fault">
                    <div class="faultbtn">
                        <a href="javascript:;" class="active">故障设备监控</a>
                        <a href="javascript:;">异常设备监控</a>
                    </div>
                    <div class="faultlist" style="display: block;">
                        <div class="faulttitlebg"></div>
                        <div class="faulttitle">
                            <div class="col">故障时间</div>
                            <div class="col">设备地址</div>
                            <div class="col">异常代码</div>
                        </div>
                        <div class="myfaultlist">
                            <div class="faultmar">
                                <div class="row">
                                    <div class="col">20180701</div>
                                    <div class="col">11北京市昌平西路金燕龙写字楼</div>
                                    <div class="col">1000001</div>
                                </div>
                                <div class="row">
                                    <div class="col">20190601</div>
                                    <div class="col">北京市昌平区城西路金燕龙写字楼</div>
                                    <div class="col">1000002</div>
                                </div>
                                <div class="row">
                                    <div class="col">20190704</div>
                                    <div class="col">北京市昌平区建材城西路金燕龙写字楼</div>
                                    <div class="col">1000003</div>
                                </div>
                                <div class="row">
                                    <div class="col">20180701</div>
                                    <div class="col">北京市昌平区建路金燕龙写字楼</div>
                                    <div class="col">1000004</div>
                                </div>
                                <div class="row">
                                    <div class="col">20190701</div>
                                    <div class="col">北京市昌平区建材城西路金燕龙写字楼</div>
                                    <div class="col">1000005</div>
                                </div>
                                <div class="row">
                                    <div class="col">20190701</div>
                                    <div class="col">北京市昌平区建材城西路金燕龙写字楼</div>
                                    <div class="col">1000006</div>
                                </div>
                                <div class="row">
                                    <div class="col">20180701</div>
                                    <div class="col">北京市昌平区建西路金燕龙写字楼</div>
                                    <div class="col">1000007</div>
                                </div>
                                <div class="row">
                                    <div class="col">20180701</div>
                                    <div class="col">北京市昌平区建材城西路金燕龙写字楼</div>
                                    <div class="col">1000008</div>
                                </div>
                                <div class="row">
                                    <div class="col">20180701</div>
                                    <div class="col">北京市昌平区建材城西路金燕龙写字楼</div>
                                    <div class="col">1000009</div>
                                </div>
                                <div class="row">
                                    <div class="col">20180710</div>
                                    <div class="col">北京市昌平区建材城西路金燕龙写字楼</div>
                                    <div class="col">1000010</div>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="faultlist">
                        <div class="faulttitlebg"></div>
                        <div class="faulttitle">
                            <div class="col">异常时间</div>
                            <div class="col">设备地址</div>
                            <div class="col">异常代码</div>
                        </div>
                        <div class="myfaultlist">
                            <div class="faultmar">
                                <div class="row">
                                    <div class="col">20180701</div>
                                    <div class="col">11北京市昌平西路金燕龙写字楼</div>
                                    <div class="col">1000001</div>
                                </div>
                                <div class="row">
                                    <div class="col">20190601</div>
                                    <div class="col">北京市昌平区城西路金燕龙写字楼</div>
                                    <div class="col">1000002</div>
                                </div>
                                <div class="row">
                                    <div class="col">20190704</div>
                                    <div class="col">北京市昌平区建材城西路金燕龙写字楼</div>
                                    <div class="col">1000003</div>
                                </div>
                                <div class="row">
                                    <div class="col">20180701</div>
                                    <div class="col">北京市昌平区建路金燕龙写字楼</div>
                                    <div class="col">1000004</div>
                                </div>
                                <div class="row">
                                    <div class="col">20190701</div>
                                    <div class="col">北京市昌平区建材城西路金燕龙写字楼</div>
                                    <div class="col">1000005</div>
                                </div>
                                <div class="row">
                                    <div class="col">20190701</div>
                                    <div class="col">北京市昌平区建材城西路金燕龙写字楼</div>
                                    <div class="col">1000006</div>
                                </div>
                                <div class="row">
                                    <div class="col">20180701</div>
                                    <div class="col">北京市昌平区建西路金燕龙写字楼</div>
                                    <div class="col">1000007</div>
                                </div>
                                <div class="row">
                                    <div class="col">20180701</div>
                                    <div class="col">北京市昌平区建材城西路金燕龙写字楼</div>
                                    <div class="col">1000008</div>
                                </div>
                                <div class="row">
                                    <div class="col">20180701</div>
                                    <div class="col">北京市昌平区建材城西路金燕龙写字楼</div>
                                    <div class="col">1000009</div>
                                </div>
                                <div class="row">
                                    <div class="col">20180710</div>
                                    <div class="col">北京市昌平区建材城西路金燕龙写字楼</div>
                                    <div class="col">1000010</div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
<script>
$(function () {
    $(".fault .faultbtn").on("click", "a", function () {
        $(this).addClass("active").siblings("a").removeClass("active");
        console.log($(this).index());
        // 选取对应索引号的faultlist
        console.log($(".faultlist").index());
        $(".faultlist").eq($(this).index()).show().siblings(".faultlist").hide();
    });
    $(".faultmar").each(function () {
        console.log($(this));
        var rows = $(this).children().clone();
        $(this).append(rows);
    });
    
})
</script>
2.点位部分
$(function () {
    var myChart = echarts.init(document.querySelector('.distributionimg'))
    // 2. 指定配置项和数据
    var option = {
        tooltip: {
            // trigger 触发方式。 非轴图形,使用item的意思是放到数据对应图形上触发提示
            trigger: 'item',
            // 格式化提示内容:
            // a 代表series系列图表名称
            // b 代表series数据名称 data 里面的name
            // c 代表series数据值 data 里面的value
            // d代表 当前数据/总数据的比例
            formatter: '{a} <br/>{b} : {c} ({d}%)'
        },
        // 注意颜色写的位置
        color: [
            '#006cff',
            '#60cda0',
            '#ed8884',
            '#ff9f7f',
            '#0096ff',
            '#9fe6b8',
            '#32c5e9',
            '#1d9dff'
        ],
        series: [
            {
                // 图表名称
                name: '点位统计',
                // 图表类型
                type: 'pie',
                // 南丁格尔玫瑰图 有两个圆 内圆半径10% 外圆半径70%
                // 饼形图半径。 可以是像素。也可以是百分比( 基于DOM容器大小)第一项是内半径,第二项是外半径(通过它可以实现饼形图大小)
                // 如果radius是百分比则必须加引号
                radius: ['10%', '70%'],
                // 图表中心位置 left 50% top 50% 距离图表DOM容器
                center: ['50%', '50%'],
                // radius 半径模式,另外一种是 area 面积模式
                roseType: 'radius',
                // 数据集 value 数据的值 name 数据的名称
                data: [
                    { value: 20, name: '云南' },
                    { value: 26, name: '北京' },
                    { value: 24, name: '山东' },
                    { value: 25, name: '河北' },
                    { value: 20, name: '江苏' },
                    { value: 25, name: '浙江' },
                    { value: 30, name: '四川' },
                    { value: 42, name: '湖北' }
                ],
                // 修饰饼形图文字相关的样式 label对象
                label: {
                    fontSize: 10
                },
                // 修饰引导线样式
                labelLine: {
                    // 连接到图形的线长度
                    length: 6,
                    // 连接到文字的线长度
                    length2: 8
                }
            }
        ]
    }
    // 3. 配置项和数据给我们的实例化对象
    myChart.setOption(option)
    // 4. 当我们浏览器缩放的时候,图表也等比例缩放
    window.addEventListener('resize', function () {
        // 让我们的图表调用 resize这个方法
        myChart.resize()
    })
})
3.中间部分

中间部分分为地图部分和统计部分。

中间部分的中国地图还要用到一个插件:https://www.isqqw.com/dep/echarts/map/js/china.js

1.地图部分
$(function () {
    var myChart = echarts.init(document.querySelector('.map'))
    const planePath = 'path://M1705.06,1318.313v-89.254l-319.9-221.799l0.073-208.063c0.521-84.662-26.629-121.796-63.961-121.491c-37.332-0.305-64.482,36.829-63.961,121.491l0.073,208.063l-319.9,221.799v89.254l330.343-157.288l12.238,241.308l-134.449,92.931l0.531,42.034l175.125-42.917l175.125,42.917l0.531-42.034l-134.449-92.931l12.238-241.308L1705.06,1318.313z';
    const points = [
        { value: [116.405285, 39.904989], itemStyle: { color: '#46BEE9' } },//北京
        { value: [113.54909, 23.198951], itemStyle: { color: '#FFA022' } },//广东
        { value: [91.132212, 29.660361], itemStyle: { color: '#A6C84C' } },//西藏
        { value: [126.642464, 45.756967], itemStyle: { color: '#46BEE9' } },//黑龙江
        { value: [120.617733, 31.792818], itemStyle: { color: '#FFA022' } },//上海
        { value: [101.617733, 35.792818], itemStyle: { color: '#A6C84C' } },//青海
        { value: [106.317733, 37.792818], itemStyle: { color: '#FFA022' } },//宁夏
        { value: [108.317733, 33.792818], itemStyle: { color: '#FFA022' } },//陕西
        { value: [119.317733, 36.792818], itemStyle: { color: '#46BEE9' } },//山东
    ]
    option = {
        geo: {
            map: 'china',
            roam: true, // 是否开启放大缩小/拖拽功能
            zoom: 1.2, // 缩放比列
            layoutCenter: ['50%', '50%'], // 地图中心点位置
            layoutSize: '100%',
            label: {
                show: true,
                color: '#fff'
            },
            itemStyle: {
                areaColor: '#12235c',
                borderColor: '#2ab8ff',
                borderWidth: .5,
                shadowColor: 'rgba(0,54,255, 0.4)',
                shadowBlur: 100
            },
            emphasis: { //区域激活时的样式
                itemStyle: {
                    areaColor: '#02102b',
                },
                label: {
                    color: "#fff"
                }
            }
        },
        series: [ // 添加迁移线数据
            {
                type: 'lines',
                data: [ // 配置多个点的数据
                    {
                        coords: [
                            [106.317733, 37.792818],
                            [116.405285, 39.904989]
                        ]
                    },
                    {
                        coords: [
                            [108.317733, 33.792818],
                            [113.54909, 23.198951]
                        ]
                    },
                    {
                        coords: [
                            [108.317733, 33.792818],
                            [120.617733, 31.792818]
                        ]
                    },
                    {
                        coords: [
                            [108.317733, 33.792818],
                            [101.617733, 35.792818]
                        ]
                    },
                    {
                        coords: [
                            [108.317733, 33.792818],
                            [91.132212, 29.660361]
                        ]
                    },
                    {
                        coords: [
                            [108.317733, 33.792818],
                            [116.405285, 39.904989]
                        ]
                    },
                    {
                        coords: [
                            [91.132212, 29.660361],
                            [126.642464, 45.756967]
                        ]
                    },
                    {
                        coords: [
                            [91.132212, 29.660361],
                            [101.617733, 35.792818]
                        ]
                    },
                    {
                        coords: [
                            [91.132212, 29.660361],
                            [119.317733, 36.792818]
                        ]
                    },
                    {
                        coords: [
                            [101.617733, 35.792818],
                            [116.405285, 39.904989]
                        ]
                    },
                    {
                        coords: [
                            [101.617733, 35.792818],
                            [106.317733, 37.792818]
                        ]
                    },
                    {
                        coords: [
                            [101.617733, 35.792818],
                            [120.617733, 31.792818]
                        ]
                    },
                    {
                        coords: [
                            [101.617733, 35.792818],
                            [113.54909, 23.198951]
                        ]
                    },
                    {
                        coords: [
                            [101.617733, 35.792818],
                            [108.317733, 33.792818]
                        ]
                    }
                ],
                effect: {
                    show: true,
                    period: 5, //箭头指向速度,值越小速度越快
                    trailLength: 0, //特效尾迹长度[0,1]值越大,尾迹越长重
                    // symbol: 'arrow', //箭头图标
                    symbol: planePath,
                    // 'image://data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjg5NzY1NjcyMTMyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjU0MTkiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PHBhdGggZD0iTTE4NC4yMTU1MzggNjc5LjEzNTg4NGwxNjEuNDM1OTAyIDE2MC42MzY0MDNjOC43OTA0MzEgOC43OTA0MzEgMjQuNzc0MzI0IDEzNS44NjIwNzkgMTUuOTgzODkzIDE0NC42NTI1MWwtMzEuOTY3Nzg2IDMxLjk2Nzc4N2MtOC43OTA0MzEgOC43OTA0MzEtMjMuMTc3MzU2IDguNzkwNDMxLTMxLjk2Nzc4NyAwbC0xNi43ODMzOTMtMTYuNzgzMzkyLTEyNy44NjkxMTctMTI3Ljg2OTExOGMtNTEuOTQ3MTQ2LTUxLjk0NzE0Ni0xMDQuNjkzNzkxLTEwMy44OTQyOTItMTI5LjQ2ODExNi0xMjkuNDY4MTE2bC0xNS45ODM4OTMtMTUuOTgzODkzYy04Ljc5MDQzMS04Ljc5MDQzMS04Ljc5MDQzMS0yMy4xNzczNTYgMC0zMS45Njc3ODdsMzEuOTY3Nzg3LTMxLjk2Nzc4NmM4Ljc5MDQzMS04Ljc5MDQzMSAxMzUuODYwMDUgNy45OTI5NjEgMTQ0LjY1MjUxIDE2Ljc4MzM5MnoiIGZpbGw9IiNEOERCREIiIHAtaWQ9IjU0MjAiPjwvcGF0aD48cGF0aCBkPSJNMjQ0LjE1MzYxNiA5Ni41MzAzNzhjLTIzLjk3NDgyNSAwLTQzLjk1NjIxNCAxOS45NzkzNTktNDMuOTU2MjE0IDQzLjk1NjIxNHMxOS45NzkzNTkgNDMuOTU2MjE0IDQzLjk1NjIxNCA0My45NTYyMTQgNDMuOTU2MjE0LTE5Ljk3OTM1OSA0My45NTYyMTQtNDMuOTU2MjE0LTE5Ljk4MTM4OS00My45NTYyMTQtNDMuOTU2MjE0LTQzLjk1NjIxNHogbTEzNS44NjIwNzggNDcuOTQ5NjUxYy0yMy45NzQ4MjUgMC00My45NTYyMTQgMTkuOTc5MzU5LTQzLjk1NjIxNCA0My45NTYyMTRzMTkuOTc5MzU5IDQzLjk1NjIxNCA0My45NTYyMTQgNDMuOTU2MjE0IDQzLjk1NjIxNC0xOS45NzkzNTkgNDMuOTU2MjE0LTQzLjk1NjIxNC0xOS45ODEzODktNDMuOTU2MjE0LTQzLjk1NjIxNC00My45NTYyMTR6IG00OTkuNDkyMTAyIDQ5MS41MDExNjljMC0yMy45NzQ4MjUtMTkuOTc5MzU5LTQzLjk1NjIxNC00My45NTYyMTQtNDMuOTU2MjE0cy00My45NTYyMTQgMTkuOTc5MzU5LTQzLjk1NjIxNCA0My45NTYyMTRjMCAyMy45NzQ4MjUgMTkuOTc5MzU5IDQzLjk1NjIxNCA0My45NTYyMTQgNDMuOTU2MjE0czQzLjk1NjIxNC0xOS4xODE4OSA0My45NTYyMTQtNDMuOTU2MjE0eiBtMy45OTU0NjYgOTEuOTA1ODY1Yy0yMy45NzQ4MjUgMC00My45NTYyMTQgMTkuOTc5MzU5LTQzLjk1NjIxNCA0My45NTYyMTQgMCAyMy45NzQ4MjUgMTkuOTc5MzU5IDQzLjk1NjIxNCA0My45NTYyMTQgNDMuOTU2MjE0IDIzLjk3NDgyNSAwIDQzLjk1NjIxNC0xOS45NzkzNTkgNDMuOTU2MjE0LTQzLjk1NjIxNC0wLjAwMjAyOS0yMy45NzY4NTUtMTkuOTgxMzg5LTQzLjk1NjIxNC00My45NTYyMTQtNDMuOTU2MjE0eiIgZmlsbD0iIzY3Njc2NyIgcC1pZD0iNTQyMSI+PC9wYXRoPjxwYXRoIGQ9Ik01OTguOTkzMjA3IDI2Ny41NTYyMTFsMTU4LjIzOTkzNSAxNTguMjM5OTM1YzE3LjU4Mjg5MSAxNy41ODI4OTEgMTkxLjgwNDY5MSA1MDQuMjg3MDY2IDE3NC4yMjE4IDUyMS44Njk5NThsLTYzLjEzNjA3NSA2My4xMzYwNzRjLTE3LjU4Mjg5MSAxNy41ODI4OTEtNDUuNTUzMTgzIDE3LjU4Mjg5MS02My4xMzYwNzQgMEw0NTUuOTM3NjY2IDU2Ny4yNTA2NiAxMy4xODc2NzYgMjE5LjYwNDUzMWMtMTcuNTgyODkxLTE3LjU4Mjg5MS0xNy41ODI4OTEtNDUuNTUzMTgzIDAtNjMuMTM2MDc1bDYzLjEzNjA3NC02My4xMzYwNzRjMTcuNTgyODkxLTE3LjU4MDg2MiA1MDUuMDg2NTY1IDE1Ni42NDA5MzcgNTIyLjY2OTQ1NyAxNzQuMjIzODI5eiIgZmlsbD0iI0Q4REJEQiIgcC1pZD0iNTQyMiI+PC9wYXRoPjxwYXRoIGQ9Ik0xMDA0Ljk4MDQ0NSAxOS44MDY4NzljNDMuOTU2MjE0IDQzLjk1NjIxNCA0Ljc5NDk2NSAxNTMuNDQyOTQxLTQ3LjE1MjE4MSAyMDYuMTg5NTg2bC01NzEuNDE4NjA2IDU3MC42MTkxMDdjLTUyLjc0NjY0NSA1Mi43NDY2NDUtMjQxLjM1NTM2OSAxNzEuMDI1ODMyLTI4NS4zMDk1NTQgMTI3LjA3MTY0OHM3NC4zMjUwMDMtMjMyLjU2MjkwOSAxMjcuMDcxNjQ4LTI4NS4zMDk1NTRsNTcwLjYxOTEwNy01NzEuNDE4NjA2Qzg1MS41MzU0NzUgMTQuMjEyNDE0IDk2MS4wMjQyMzEtMjQuMTQ3MzA2IDEwMDQuOTgwNDQ1IDE5LjgwNjg3OXoiIGZpbGw9IiNFNEU3RTciIHAtaWQ9IjU0MjMiPjwvcGF0aD48cGF0aCBkPSJNMjY3LjMzMDk3MSA2NzYuNzM5NDE2TDgzNy45NTAwNzkgMTA2LjEyMDMwOGM0NC43NTM2ODQtNDQuNzUzNjg0IDEzMC4yNjc2MTUtNzkuMTE5OTY4IDE4MS40MTUyNjItNjIuMzM2NTc1LTMuMTk1OTY3LTkuNTg5OTMtNy45OTA5MzItMTcuNTgyODkxLTE0LjM4NDg5Ni0yNC43NzQzMjQtNDMuOTU2MjE0LTQzLjk1NjIxNC0xNTMuNDQ0OTctNC43OTY5OTQtMjA2LjE5MTYxNSA0Ny45NDk2NTFMMjI4LjE2OTcyMiA2MzcuNTc4MTY3QzE3NS40MjMwNzcgNjkwLjMyNDgxMiA1Ny45NDMzODkgODc4LjkzMTUwNyAxMDEuMDk4MDc1IDkyMi44ODc3MjFjNi4zOTM5NjMgNi4zOTM5NjMgMTYuNzgzMzkyIDkuNTg5OTMgMjkuNTY5Mjg5IDkuNTg5OTMgMC44MDE1MjgtNjguNzI4NTA5IDkxLjkwNzg5NC0yMTAuOTg0NTUxIDEzNi42NjM2MDctMjU1LjczODIzNXoiIGZpbGw9IiNEREUwRTAiIHAtaWQ9IjU0MjQiPjwvcGF0aD48cGF0aCBkPSJNMjgwLjExNjg2OCA0MjguOTkyMTEzbDkwLjMwODg5NiA3MC4zMjc1MDcgMjMwLjk2NTk0LTIzMC45NjU5MzktMi4zOTg0OTctMi4zOTg0OTdjLTQuNzk0OTY1LTQuNzk0OTY1LTQ5LjU0ODY0OS0yMy4xNzczNTYtMTEwLjI4ODI1NS00Ni4zNTI2ODJMMjgwLjExNjg2OCA0MjguOTkyMTEzeiIgZmlsbD0iI0M3Q0FDQSIgcC1pZD0iNTQyNSI+PC9wYXRoPjxwYXRoIGQ9Ik01MjYuMjY3MjAyIDY1Ni43NjAwNTdsMjc4LjExNjA5MiAzNTQuMDQwMDkyYzE1Ljk4Mzg5MyAxNS45ODM4OTMgNDEuNTU3NzE3IDE2Ljc4MzM5MiA1OS4xNDA2MDggMy4xOTU5NjdMNTU2LjYzNTk5MSA2MjYuMzkxMjY4bC0zMC4zNjg3ODkgMzAuMzY4Nzg5eiBtLTEyNy44NzExNDYtMTg4LjYwODcyNEw4LjM5MjcxMSAxNjIuODYyNDJjLTExLjk4ODQyNyAxNy41ODI4OTEtMTAuMzg5NDI5IDQxLjU1NzcxNyA0Ljc5NDk2NSA1Ni43NDIxMTFsMzU0LjgzOTU5MSAyNzguMTE2MDkxIDMwLjM2ODc4OS0yOS41NjkyODl6IiBmaWxsPSIjM0RCMzlFIiBwLWlkPSI1NDI2Ij48L3BhdGg+PHBhdGggZD0iTTM2OC4wMjcyNjcgNDk3LjcyMDYyMmwzMC4zNjg3ODktMjkuNTY5Mjg5LTg3LjkxMDM5OS02OC43MzA1MzktMzAuMzY4Nzg5IDI5LjU2OTI5IDg3LjkxMDM5OSA2OC43MzA1Mzh6IiBmaWxsPSIjMzhBNTkyIiBwLWlkPSI1NDI3Ij48L3BhdGg+PC9zdmc+',
                    symbolSize: 15, //图标大小
                },
                lineStyle: {
                    color: '#00eaff',
                    width: 1, //尾迹线条宽度
                    opacity: .7, //尾迹线条透明度
                    curveness: .3, //尾迹线条曲直度
                },
            },
            { // 带有涟漪特效动画的散点(气泡)图
                type: 'effectScatter',
                coordinateSystem: 'geo',
                showEffectOn: 'render',
                zlevel: 1,
                rippleEffect: {
                    number: 3, // 波纹的数量。
                    period: 5, // 动画的周期,秒数。
                    scale: 17, // 动画中波纹的最大缩放比例。
                    brushType: 'fill', // 波纹的绘制方式,可选 'stroke' 和 'fill'。
                },
                symbolSize: 2,
                data: points,
            }
        ]
    };
    myChart.setOption(option)
})
2.统计部分
$(function () {
    // 1. 实例化对象
    var myChart = echarts.init(document.querySelector(".Charts"));
    // 2. 指定配置和数据
    var item = {
        name: '',
        value: 1200,
        // 柱子颜色
        itemStyle: {
            color: '#254065'
        },
        // 鼠标经过柱子颜色
        emphasis: {
            itemStyle: {
                color: '#254065'
            }
        },
        // 工具提示隐藏
        tooltip: {
            extraCssText: 'opacity:0'
        },
    }
    var option = {
        // 工具提示
        tooltip: {
            // 触发类型 经过轴触发axis 经过轴触发item
            trigger: 'axis',
            // 轴触发提示才有效
            axisPointer: {
                // 默认为直线,可选为:'line' 线效果 | 'shadow' 阴影效果
                type: 'shadow'
            }
        },
        color: new echarts.graphic.LinearGradient(
            // (x1,y2) 点到点 (x2,y2) 之间进行渐变
            0, 0, 0, 1,
            [
                { offset: 0, color: '#00fffb' }, // 0 起始颜色
                { offset: 1, color: '#0061ce' } // 1 结束颜色
            ]
        ),
        // 修改线性渐变色方式 2
        color: {
            type: 'linear',
            x: 0,
            y: 0,
            x2: 0,
            y2: 1,
            colorStops: [{
                offset: 0, color: 'red' // 0% 处的颜色
            }, {
                offset: 1, color: 'blue' // 100% 处的颜色
            }],
            globalCoord: false // 缺省为 false
        },
        tooltip: {
            trigger: 'item',
            // axisPointer: { // 坐标轴指示器,坐标轴触发有效 这个模块我们此时不需要删掉即可
            // type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
            // }
        },
        // 图表边界控制
        grid: {
            top: '3%',
            right: '3%',
            bottom: '3%',
            left: '0%',
            // 图表位置紧贴画布边缘是否显示刻度以及label文字 防止坐标轴标签溢出跟grid 区域有关系
            containLabel: true,
            // 是否显示直角坐标系网格
            show: true,
            //grid 四条边框的颜色
            borderColor: 'rgba(0, 240, 255, 0.3)'
        },
        // 控制x轴
        xAxis: [
            {
                // 使用类目,必须有data属性
                type: 'category',
                // 使用 data 中的数据设为刻度文字
                data: ['上海', '广州', '北京', '深圳', '合肥', '', '......', '', '杭州', '厦门', '济南', '成都', '重庆'],
                // 刻度设置
                axisTick: {
                    // true意思:图形和刻度居中中间
                    // false意思:图形在刻度之间
                    alignWithLabel: false,
                    // 不显示刻度
                    show: false
                },
                // x坐标轴文字标签样式设置
                axisLabel: {
                    color: '#4c9bfd'
                },
                // x坐标轴颜色设置
                axisLine: {
                    lineStyle: {
                        color: 'rgba(0, 240, 255, 0.3)'
                        // width:8, x轴线的粗细
                        // opcity: 0, 如果不想显示x轴线 则改为 0
                    }
                }
            }
        ],
        // 控制y轴
        yAxis: [
            {
                type: "value",
                axisTick: {
                    alignWithLabel: false,
                    // 把y轴的刻度隐藏起来
                    show: false
                },
                axisLabel: {
                    color: "#4c9bfd"
                },
                // y轴这条线的颜色样式
                axisLine: {
                    lineStyle: {
                        color: "rgba(0, 240, 255, 0.3)"
                        // width: 3
                    }
                },
                // y轴分割线的颜色样式
                splitLine: {
                    lineStyle: {
                        color: "rgba(0, 240, 255, 0.3)"
                    }
                }
            }
        ],
        // 控制x轴
        series: [
            {
                // 图表数据名称
                name: '用户统计',
                // 图表类型
                type: 'bar',
                // 柱子宽度
                barWidth: '60%',
                // 数据
                data: [2100, 1900, 1700, 1560, 1400, item, item, item, 900, 750, 600, 480, 240],
            }
        ]
    };
    window.addEventListener("resize", function () {
        // 让我们的图表调用 resize这个方法
        myChart.resize();
    });
    // 3. 把配置给实例对象
    myChart.setOption(option);
})
4.右边部分

右边部分分为四个盒子,其中分别是销售统计部分,折线图部分,渠道部分和热榜部分

1.销售统计
<div class="mylines order">
                    <div class="days">
                        <a href="#" class="active" data-key="day365">365天</a><span>|</span>
                        <a href="#" data-key="day90">90天</a><span>|</span>
                        <a href="#" data-key="day30">30天</a><span>|</span>
                        <a href="#" data-key="day1">1天</a>
                    </div>
                    <div class="data">
                        <div class="item">
                            <h4 class="h4">20,301,987</h4>
                            <span>
                                <i class="icon-dot" style="color: #ed3f35;"></i>
                                订单量
                            </span>
                        </div>
                        <div class="item">
                            <h4 class="h4">99834</h4>
                            <span>
                                <i class="icon-dot" style="color: #eacf19;"></i>
                                销售额(万元)
                            </span>
                        </div>
                    </div>
                </div>
<script>
    $(function () {
    // 1. 准备数据
    var data = {
        day365: { orders: '20,301,987', amount: '99834' },
        day90: { orders: '301,987', amount: '9834' },
        day30: { orders: '1,987', amount: '3834' },
        day1: { orders: '987', amount: '834' }
    }
    // 获取显示 订单数量 容器
    var $h4Orders = $('.order h4:eq(0)')
    // 获取显示 金额数量 容器
    var $h4Amount = $('.order h4:eq(1)')
    $('.order').on('click', '.days a', function () {
        // 2. 点击切换激活样式
        $(this).addClass('active').siblings().removeClass('active')
        // 3. 点击切换数据
        var currdata = data[this.dataset.key]
        $h4Orders.html(currdata.orders)
        $h4Amount.html(currdata.amount)
    })
    // 4. 开启定时器切换数据
    var index = 0
    var $allTab = $('.order .days a')
    setInterval(function () {
        index++
        if (index >= 4) index = 0
        $allTab.eq(index).click()
    }, 5000)
})
</script>
2.折线图部分
$(function () {
    // 1. 实例化对象
    var myChart = echarts.init(document.querySelector(".saleimg"));
    // 2. 指定配置和数据
    var data = {
        year: [
            [24, 40, 101, 134, 90, 230, 210, 230, 120, 230, 210, 120],
            [40, 64, 191, 324, 290, 330, 310, 213, 180, 200, 180, 79]
        ],
        quarter: [
            [23, 75, 12, 97, 21, 67, 98, 21, 43, 64, 76, 38],
            [43, 31, 65, 23, 78, 21, 82, 64, 43, 60, 19, 34]
        ],
        month: [
            [34, 87, 32, 76, 98, 12, 32, 87, 39, 36, 29, 36],
            [56, 43, 98, 21, 56, 87, 43, 12, 43, 54, 12, 98]
        ],
        week: [
            [43, 73, 62, 54, 91, 54, 84, 43, 86, 43, 54, 53],
            [32, 54, 34, 87, 32, 45, 62, 68, 93, 54, 54, 24]
        ]
    }
    var option = {
        tooltip: {
            trigger: "axis"
        },
        legend: {
            textStyle: {
                color: '#4c9bfd' // 图例文字颜色
            },
            right: '10%' // 距离右边10%
        },
        grid: {
            top: '20%',
            left: '3%',
            right: '4%',
            bottom: '3%',
            show: true,// 显示边框
            borderColor: '#012f4a',// 边框颜色
            containLabel: true // 包含刻度文字在内
        },
        xAxis: {
            type: 'category',
            data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月',
                '11月', '12月'],
            axisTick: {
                show: false // 去除刻度线
            },
            axisLabel: {
                color: '#4c9bfd' // 文本颜色
            },
            axisLine: {
                show: false // 去除轴线
            },
            boundaryGap: false // 去除轴内间距
        },
        yAxis: {
            type: 'value',
            axisTick: {
                show: false // 去除刻度
            },
            axisLabel: {
                color: '#4c9bfd' // 文字颜色
            },
            splitLine: {
                lineStyle: {
                    color: '#012f4a' // 分割线颜色
                }
            }
        },
        color: ['#00f2f1', '#ed3f35'],
        series: [{
            name: '预期销售额',
            data: data.year[0],
            type: 'line',
            smooth: true,
            itemStyle: {
                color: '#00f2f1'
            }
        }, {
            name: '实际销售额',
            data: data.year[1],
            type: 'line',
            smooth: true,
            itemStyle: {
                color: '#ed3f35'
            }
        }]
    }
    // 3. 把配置和数据给实例对象
    myChart.setOption(option);
    $('.sales').on('click', '.salecaption a', function () {
        // 样式
        $(this).addClass('active').siblings().removeClass('active')
        // currData 当前对应的数据
        // this.dataset.type 标签上的data-type属性值,对应data中的属性
        var currData = data[this.dataset.type]
        // 修改图表1的数据
        option.series[0].data = currData[0]
        // 修改图表2的数据
        option.series[1].data = currData[1]
        // 重新设置数据 让图标重新渲染
        myChart.setOption(option)
    })
    var as = $(".sales .salecaption a");
    var index = 0;
    var timer = setInterval(function () {
        index++;
        if (index >= 4) index = 0;
        as.eq(index).click();
    }, 1000);
    // 鼠标经过sales,关闭定时器,离开开启定时器
    $(".sales").hover(
        function () {
            clearInterval(timer);
        },
        function () {
            clearInterval(timer);
            timer = setInterval(function () {
                index++;
                if (index >= 4) index = 0;
                as.eq(index).click();
            }, 1000);
        }
    );
    window.addEventListener("resize", function () {
        // 让我们的图表调用 resize这个方法
        myChart.resize();
    });
})
3.渠道部分

渠道部分分两个小盒子,分别是渠道部分和进度部分

渠道部分:

$(function () {
    // 1. 实例化对象
    var myChart = echarts.init(document.querySelector(".rader"));
    // 2.指定配置
    var option = {
        tooltip: {
            show: true,
            // 控制提示框组件的显示位置
            position: ["60%", "10%"]
        },
        radar: {
            indicator: [
                { name: "机场", max: 100 },
                { name: "商场", max: 100 },
                { name: "火车站", max: 100 },
                { name: "汽车站", max: 100 },
                { name: "地铁", max: 100 }
            ],
            // 修改雷达图的大小
            radius: "65%",
            shape: "circle",
            // 分割的圆圈个数
            splitNumber: 4,
            name: {
                // 修饰雷达图文字的颜色
                textStyle: {
                    color: "#4c9bfd"
                }
            },
            // 分割的圆圈线条的样式
            splitLine: {
                lineStyle: {
                    color: "rgba(255,255,255, 0.5)"
                }
            },
            splitArea: {
                show: false
            },
            // 坐标轴的线修改为白色半透明
            axisLine: {
                lineStyle: {
                    color: "rgba(255, 255, 255, 0.5)"
                }
            }
        },
        series: [
            {
                name: "北京",
                type: "radar",
                // 填充区域的线条颜色
                lineStyle: {
                    normal: {
                        color: "#fff",
                        width: 1,
                        opacity: 0.5
                    }
                },
                data: [[90, 19, 56, 11, 34]],
                // 设置图形标记 (拐点)
                symbol: "circle",
                // 这个是设置小圆点大小
                symbolSize: 5,
                // 设置小圆点颜色
                itemStyle: {
                    color: "#fff"
                },
                // 让小圆点显示数据
                label: {
                    show: true,
                    fontSize: 10
                },
                // 修饰我们区域填充的背景颜色
                areaStyle: {
                    color: "rgba(238, 197, 102, 0.6)"
                }
            }
        ]
    };
    // 3.把配置和数据给对象
    myChart.setOption(option);
    // 当我们浏览器缩放的时候,图表也等比例缩放
    window.addEventListener("resize", function () {
        // 让我们的图表调用 resize这个方法
        myChart.resize();
    });
})

进度部分:

$(function () {
    // 1. 实例化对象
    var myChart = echarts.init(document.querySelector(".gauge"));
    // 2. 指定数据和配置
    var option = {
        series: [
            {
                type: 'pie',
                // 放大图形
                radius: ['130%', '150%'],
                // 移动下位置 套住50%文字
                center: ['48%', '80%'],
                label: {
                    normal: {
                        show: false
                    }
                },
                // 起始角度,支持范围[0, 360]
                startAngle: 180,
                hoverOffset: 0,
                data: [
                    {
                        value: 100,
                        itemStyle: {
                            color: new echarts.graphic.LinearGradient(
                                // (x1,y2) 点到点 (x2,y2) 之间进行渐变
                                0,
                                0,
                                0,
                                1,
                                [
                                    { offset: 0, color: '#00B9DB' }, // 0 开始颜色
                                    { offset: 1, color: '#005fc1' } // 1 结束颜色
                                ]
                            )
                        }
                    },
                    { value: 100, itemStyle: { color: '#12274d' } },
                    { value: 200, itemStyle: { color: 'transparent' } } // 透明隐藏第三块区域
                ]
            }
        ],
    }
    // 3. 把数据和配置给实例对象
    myChart.setOption(option);
})
4.热榜部分
<div class="tophot panel">
                    <div class="hotlist">
                        <div class="lefthot">
                            <h4 class="h4">全国热榜</h4>
                            <ul>
                                <li>
                                    <i class="icon-cup1"
                                        style="color: #d93f36; font-size: 0.25rem; padding: 0 0.5vw;"></i>
                                    可爱多
                                </li>
                                <li>
                                    <i class="icon-cup2"
                                        style="color: #68d8fe; font-size: 0.25rem; padding: 0 0.5vw;"></i>
                                    哇哈哈
                                </li>
                                <li>
                                    <i class="icon-cup3"
                                        style="color: #4c9bfd; font-size: 0.25rem; padding: 0 0.5vw;"></i>
                                    喜之郎
                                </li>
                            </ul>
                        </div>
                        <div class="province">
                            <h4 class="h4">各省热销<i class="days">// 近30日 //</i></h4>
                            <div class="data">
                                <ul class="sup">
                                    <li class="active">
                                        <span class="city">北京</span>
                                        <span>25,179<s class="icon-up"></s></span>
                                    </li>
                                    <li>
                                        <span class="city">河北</span>
                                        <span>23,252<s class="icon-down"></s></span>
                                    </li>
                                    <li>
                                        <span class="city">上海</span>
                                        <span>20,760<s class="icon-up"></s></span>
                                    </li>
                                    <li>
                                        <span class="city">江苏</span>
                                        <span>23,252<s class="icon-down"></s></span>
                                    </li>
                                    <li>
                                        <span class="city">山东</span>
                                        <span>20,760<s class="icon-up"></s></span>
                                    </li>
                                </ul>
                                <ul class="sub">

                                </ul>
                            </div>
                        </div>
                    </div>
                </div>
<script>
        
        var hotData = [
            {
                city: '北京', // 城市
                sales: '25, 179', // 销售额
                flag: true, // 上升还是下降
                brands: [ // 品牌种类数据
                    { name: '可爱多', num: '9,086', flag: true },
                    { name: '娃哈哈', num: '8,341', flag: true },
                    { name: '喜之郎', num: '7,407', flag: false },
                    { name: '八喜', num: '6,080', flag: false },
                    { name: '小洋人', num: '6,724', flag: false },
                    { name: '好多鱼', num: '2,170', flag: true },
                ]
            },
            {
                city: '河北',
                sales: '23,252',
                flag: false,
                brands: [
                    { name: '可爱多', num: '3,457', flag: false },
                    { name: '娃哈哈', num: '2,124', flag: true },
                    { name: '喜之郎', num: '8,907', flag: false },
                    { name: '八喜', num: '6,080', flag: true },
                    { name: '小洋人', num: '1,724', flag: false },
                    { name: '好多鱼', num: '1,170', flag: false },
                ]
            },
            {
                city: '上海',
                sales: '20,760',
                flag: true,
                brands: [
                    { name: '可爱多', num: '2,345', flag: true },
                    { name: '娃哈哈', num: '7,109', flag: true },
                    { name: '喜之郎', num: '3,701', flag: false },
                    { name: '八喜', num: '6,080', flag: false },
                    { name: '小洋人', num: '2,724', flag: false },
                    { name: '好多鱼', num: '2,998', flag: true },
                ]
            },
            {
                city: '江苏',
                sales: '23,252',
                flag: false,
                brands: [
                    { name: '可爱多', num: '2,156', flag: false },
                    { name: '娃哈哈', num: '2,456', flag: true },
                    { name: '喜之郎', num: '9,737', flag: true },
                    { name: '八喜', num: '2,080', flag: true },
                    { name: '小洋人', num: '8,724', flag: true },
                    { name: '好多鱼', num: '1,770', flag: false },
                ]
            },
            {
                city: '山东',
                sales: '20,760',
                flag: true,
                brands: [
                    { name: '可爱多', num: '9,567', flag: true },
                    { name: '娃哈哈', num: '2,345', flag: false },
                    { name: '喜之郎', num: '9,037', flag: false },
                    { name: '八喜', num: '1,080', flag: true },
                    { name: '小洋人', num: '4,724', flag: false },
                    { name: '好多鱼', num: '9,999', flag: true },
                ]
            }
        ]
        var supHTML = "";
        $.each(hotData, function (index, item) {
            // console.log(item);
            supHTML += `<li><span>${item.city}</span><span class='rightlist'> ${item.sales} <s class=${item.flag ? "icon-up" : "icon-down"}></s></span></li>`;
        });
        $(".sup").html(supHTML);
        $('.province .sup').on('mouseenter', 'li', function () {
            index = $(this).index()
            render($(this))
        })
        function render(currentEle) {
            currentEle
                .addClass("active")
                .siblings()
                .removeClass();
            // 拿到当前城市的品牌对象
            // console.log($(this).index());
            // 可以通过hotData[$(this).index()] 得到当前的城市
            // console.log(hotData[$(this).index()]);
            // 我们可以通过hotData[$(this).index()].brands 拿到的是城市对象的品牌种类
            // console.log(hotData[$(this).index()].brands);
            // 开始遍历品牌数组
            var subHTML = "";
            $.each(hotData[currentEle.index()].brands, function (index, item) {
                // 是对应城市的每一个品牌对象
                // console.log(item);
                subHTML += `<li><span>${item.name}</span><span class='rightlist'> ${item.num}<s class=${item.flag ? "icon-up" : "icon-down"}></s></span></li>`;
            });
            // 把生成的6个小li字符串给 sub dom盒子
            $(".sub").html(subHTML);
        }
        var $lis = $('.province .sup li')
        // 第一个默认激活
        $lis.eq(0).mouseenter()
        var index = 0;
        var timer = setInterval(function () {
            index++;
            if (index >= 5) index = 0;
            // lis.eq(index).mouseenter();
            render($lis.eq(index));
        }, 2000);
        $(".province .sup").hover(
            // 鼠标经过事件
            function () {
                clearInterval(timer);
            },
            // 鼠标离开事件
            function () {
                clearInterval(timer);
                timer = setInterval(function () {
                    index++;
                    if (index >= 5) index = 0;
                    // lis.eq(index).mouseenter();
                    render(lis.eq(index));
                }, 2000);
            }
        );
    </script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值