iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >vue echarts怎么实现航班选座
  • 918
分享到

vue echarts怎么实现航班选座

2023-06-30 13:06:48 918人浏览 安东尼
摘要

这篇文章主要介绍了Vue echarts怎么实现航班选座的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue echarts怎么实现航班选座文章都会有所收获,下面我们一起来看看吧。背景最近在

这篇文章主要介绍了Vue echarts怎么实现航班选座的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue echarts怎么实现航班选座文章都会有所收获,下面我们一起来看看吧。

背景

最近在echarts官方看到了一个航班选座的示例,感觉很好,可以扩大,缩小,鼠标放置到座位上可以显示座位号,允许默认选中座位。于是在5.1假期抽了一点点时间,来写一篇文章,深入研究分析一下这个示例,解析一下这个示例的完整代码。首先让我们来看下示例的效果图。

vue echarts怎么实现航班选座

实现思路

代码是使用echarts来实现的,主要用到的是svg和自定义地图的相关知识。
示例的完整代码

vue echarts怎么实现航班选座

在做选座的功能,我们使用div布局加背景图的技术手段也能简单实现,但不支持缩放,在位置比较多,想要看详细的情况下,就需要用到svg,这个可以扩大缩小后不会失真的矢量图形。搭配echarts渲染能力和可扩展性,做出来的功能可以达到很好的用户体验。
这个示例的主要特性大致有以下几点

  • 座位默认三种状态,未选的(白色),自己选的(绿色的),已被别人选的(红色)

  • 可以扩大,缩小,图片不失真,清晰

  • 鼠标放到座位上可以显示座位号

  • 可移植性,换个svg文件,就能改成影院选座,或会议室排座

  • 简单,快捷,代码只有不到100行

代码分析

获取svg

在示例代码中,首先是要获取一个svg文件。

$.get(ROOT_PATH + '/data/asset/geo/flight-seats.svg', function (svg) {  // ....})

使用Jquery获取一个svg文件,svg的完整路径是 https://cdn.jsdelivr.net/gh/apache/echarts-WEBsite@asf-site/examples/data/asset/geo/flight-seats.svg
点击可以访问。但显示的是这样的。

vue echarts怎么实现航班选座

只显示个飞机头,这是因为svg太大的原因。要想看完整的,需要使用专门的svg查看软件。
使用jquery获取的svg,是svg文件的编码。我们可以调试,打印一下svg的内容看一下。

vue echarts怎么实现航班选座

这里可以看到是svg的具体内容。

注册自定义地图

echarts是可以搭配地图来实现自定义的位置坐标布局渲染的。但不仅仅局限于百度,高德地图。他还支持将一个符合地图数据的svg注册为一个地图。
下面来看一下echarts的这个注册自定义地图的api

reGISterMap

完整的解释点击此处查看

vue echarts怎么实现航班选座

文档的大致意思就是 你可以配置一个geoJSON的东西,然后echarts可以解析内部的坐标,然后渲染,支持查找。
echarts中geo的相关文档。
Https://echarts.apache.org/zh/option.html#geo
该组件可以配置一些name,颜色,索引,能否被选中,交互后的颜色,hover效果。

这里稍微扩展一下GeoJSON这个东西,我也是第一次接触。它是一种用于编码各种地理数据结构的格式。
一种编程式的地图,用一些特殊的属性来表达地图上的线,面,点,颜色。区域。
以GeoJSON支持以下几何类型:Point,LineString, PolyGon,MultiPoint,MultiLineString,和MultiPolygon。具有其他属性的几何对象是Feature对象。要素集包含在FeatureCollection对象中。
这里说的不对的,欢迎大佬拍砖,传道解惑。
相关文档
这里如果要展开讲的话,以我现在的知识点,肯定讲的不够透彻,如果有感兴趣的同学,可以在评论区留言,下篇文章可以给大家带来有关geojson更详细的解析。

回归主线,那么registerMap这个方法其实就是将svg转化为一个标准的地图坐标系。只不过转化后地图的定位不是根据经纬度,而是因为name。

 echarts.registerMap('flight-seats', { svg: svg });

好了上面这句代码的含义就讲解到这里。其实想想,每一个api的后面都牵扯到一大堆的知识。只要你细心,具有探索精神,那就一定会学的比别人多,学的好。知识是连贯的,不是单独存在的。举一反三,融会贯通方得学道。

geo组件的配置

echarts中有很多很多的组件如brush(区域选择组件),parallel(平行坐标系),timeline,calendar(日历坐标系),其中一个就是geo,地理坐标系组件。
地理坐标系组件用于地图的绘制,支持地理坐标系上绘制散点图,线集。
有关geo组件的所有的配置项都可以在此处查询到详细的解析。
此案例使用的就是该组件,那么下面来看下示例是如何配置的。

geo: {    map: 'flight-seats',    roam: true,    selectedMode: 'multiple',    layoutCenter: ['50%', '50%'],    layoutSize: '95%',    tooltip: {        show: true    },    itemStyle: {        color: '#fff'    },    emphasis: {        itemStyle: {            color: null,            borderColor: 'green',            borderWidth: 2        },        label: {            show: false        }    },    select: {        itemStyle: {            color: 'green'        },        label: {            show: false,            textBorderColor: '#fff',            textBorderWidth: 2        }    },    regions: makeTakenRegions(takenSeatNames)}

以上是示例中有关geo组件的配置,下面让我们仔细分析一下每一个配置项。

map

首先map指向的是我们刚刚注册的一个自定义地图'flight-seats'

map: 'flight-seats',

roam

roam关键字是用于配置是否开启鼠标缩放和平移漫游。默认不开启。如果只想要开启缩放或者平移,可以设置成 ‘scale’ 或者 ‘move’。设置成 true 为都开启

selectedMode

如字面意思selectedMode 字段是用于配置选中模式,表示是否支持多个选中,默认关闭,支持布尔值和字符串,字符串取值可选’single’表示单选,或者’multiple’表示多选。

layoutCenter, layoutSize

用于调整echarts的实例在dom容器中的初始位置。

tooltip

是否开启tooltip效果,开启后,鼠标放到座位上会有文本提示当前座位。

itemStyle

座位的默认样式,配置颜色,字体

emphasis

高亮状态下的多边形和标签样式。

select

选中状态下的多边形和标签样式。

regions

在地图中对特定的区域配置样式。这里传入的是一个数组,被格式化后的已被选的座位信息,
默认已经被选
每一项的数据格式是这样的

{    name: '26E',    silent: true,    itemStyle: {        color: '#bf0e08'    },    emphasis: {        itemStyle: {            borderColor: '#aaa',            borderWidth: 1        }    },    select: {        itemStyle: {            color: '#bf0e08'        }    }}

其中有一个属性叫做 silent 它的作用是图形是否不响应和触发鼠标事件,默认为 false,即响应和触发鼠标事件。

到这里该示例的echarts配置其实已经讲解完了。这里的坐标系不是用经纬度,而是用每个座位的name来查找的。所以在svg中是可以找到对应的name的。name的值必须保证唯一。

vue echarts怎么实现航班选座

该示例中除了核心的配置外,还有二个辅助函数。一起来看一下。

makeTakenRegions函数

这个函数就是将已经定义好的已选座位数据,转化成格式化的座位样式数据。
下面是定义的默认已被选中的座位。

var takenSeatNames = ['26E', '26D', '26C', '25D', '23C', '21A', '20F'];

geoselectchanged

在这个示例的最后,有一个监听函数

myChart.on('geoselectchanged', function (params) {    var selectedNames = params.allSelected[0].name.slice();    // Remove taken seats.    for (var i = selectedNames.length - 1; i >= 0; i--) {        if (takenSeatNames.indexOf(selectedNames[i]) >= 0) {            selectedNames.splice(i, 1);        }    }    console.log('selected', selectedNames);});

这几行代码是干嘛的那?
我们在点击座位的时候,是有一个点击事件,这里就是用于处理点击后的交互的,然后获取当前用户选中的座位。
geoselectchanged 世界是 geo 中地图区域切换选中状态的事件。
用户点击选中会触发该事件。 相关文档

我们可以调试一下该函数看下,params的内容具体是什么

vue echarts怎么实现航班选座

这里是用于处理点击已经被人选中的座位,不进行选中,这段函数的使用场景是用于获取当前用户选中的座位列表,比如用户选完座外要将座位信息发送给后台保存。
主要功能就是判断选的座位是不是已经被别人选中了,如果已被选中就剔除。

举一反三

分析完代码后,了解了每一个配置项的含义,那么我们趁热打铁做一个类似的联系题,以达到举一反三,融会贯通的目的。
需求,定义一个svg文件,有6个方块,使用它做一个选座位的功能。
定义mysvg文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg width="600px" height="600px" version="1.1" xmlns="http://www.w3.org/2000/svg">    <g name="a1">        <rect x="20" y="20" rx="20" ry="20" width="100" fill="#cccccc" stroke="#000000" height="100" />    </g>    <g name="a2">        <rect x="20" y="120" rx="20" ry="20" width="100" fill="#cccccc" stroke="#000000" height="100" />    </g>    <g name="a3">        <rect x="20" y="220" rx="20" ry="20" width="100" fill="#cccccc" stroke="#000000" height="100" />    </g>    <g name="a4">        <rect x="20" y="320" rx="20" ry="20" width="100" fill="#cccccc" stroke="#000000" height="100" />    </g></svg>

html代码

<div id="main" ></div><script src="https://cdn.jsdelivr.net/npm/jquery@2.2.4/dist/jquery.min.js"></script><script src="https://cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js"></script><script>    var chartDom = document.getElementById('main');    var myChart = echarts.init(chartDom);    var option;    $.get('/mysvg.svg', function (svg) {        echarts.registerMap('flight-seats', { svg: svg });        var takenSeatNames = ['a1'];        option = {            tooltip: {            },            geo: {                map: 'flight-seats',                roam: true,                selectedMode: 'multiple',                layoutCenter: ['50%', '50%'],                layoutSize: '95%',                tooltip: {                    show: true                },                itemStyle: {                    color: '#fff'                },                emphasis: {                    itemStyle: {                        color: null,                        borderColor: 'green',                        borderWidth: 2                    },                    label: {                        show: false                    }                },                select: {                    itemStyle: {                        color: 'green'                    },                    label: {                        show: false,                        textBorderColor: '#fff',                        textBorderWidth: 2                    }                },                regions: makeTakenRegions(takenSeatNames)            }        };        function makeTakenRegions(takenSeatNames) {            var regions = [];            for (var i = 0; i < takenSeatNames.length; i++) {                regions.push({                    name: takenSeatNames[i],                    silent: true,                    itemStyle: {                        color: '#bf0e08'                    },                    emphasis: {                        itemStyle: {                            borderColor: '#aaa',                            borderWidth: 1                        }                    },                    select: {                        itemStyle: {                            color: '#bf0e08'                        }                    }                });            }            return regions;        }        myChart.setOption(option);        // Get selected seats.        myChart.on('geoselectchanged', function (params) {            var selectedNames = params.allSelected[0].name.slice();            // Remove taken seats.            for (var i = selectedNames.length - 1; i >= 0; i--) {                if (takenSeatNames.indexOf(selectedNames[i]) >= 0) {                    selectedNames.splice(i, 1);                }            }            console.log('selected', selectedNames);        });    })</script>

效果图

vue echarts怎么实现航班选座

注意点

  • svg文件必须的每一个座位,可点击区域必须要用g标签包裹,且name属性需

  • 定义到g标签上定义geojson时,svg不能指向一个文本 结语

如果掌握了echarts的geo自定义地图,那么你能做出非常多的示例
比如这样的

vue echarts怎么实现航班选座

这样的

vue echarts怎么实现航班选座

还有这样的

vue echarts怎么实现航班选座

只需要一个svg文件,再加几个name,你就可以做成自己想要的地图系图表。

关于“vue echarts怎么实现航班选座”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“vue echarts怎么实现航班选座”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: vue echarts怎么实现航班选座

本文链接: https://www.lsjlt.com/news/329416.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue echarts怎么实现航班选座
    这篇文章主要介绍了vue echarts怎么实现航班选座的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue echarts怎么实现航班选座文章都会有所收获,下面我们一起来看看吧。背景最近在...
    99+
    2023-06-30
  • vue echarts实现航班选座案例分析
    目录背景实现思路代码分析获取svg注册自定义地图geo组件的配置举一反三三效果图注意点背景 最近在echarts官方看到了一个航班选座的示例,感觉很好,可以扩大,缩小,鼠标放置到座位...
    99+
    2024-04-02
  • Vue ECharts怎么实现机舱座位选择展示功能
    这篇文章主要介绍了Vue ECharts怎么实现机舱座位选择展示功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue ECharts怎么实现机舱座位选择展示功能文章都会有所收获,下面我们...
    99+
    2023-06-30
  • Vue ECharts实现机舱座位选择展示功能代码详解
    var ROOT_PATH = 'https://cdn.jsdelivr.net/gh/apache/echarts-website@asf-site/examples';...
    99+
    2024-04-02
  • JS怎么实现电影票选座
    本文小编为大家详细介绍“JS怎么实现电影票选座”,内容详细,步骤清晰,细节处理妥当,希望这篇“JS怎么实现电影票选座”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。简单模拟电影票选座,详细代码如下:利用js实现给l...
    99+
    2023-06-29
  • vue怎么实现导航
    本文小编为大家详细介绍“vue怎么实现导航”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue怎么实现导航”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。使用$route.path设置默认选中的导航,但是设置之后...
    99+
    2023-07-04
  • 怎么用html来实现航班信息的查看
    这篇文章主要介绍了怎么用html来实现航班信息的查看的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用html来实现航班信息的查看文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • 使用jQuery怎么实现一个影院选座订座功能
    本篇文章为大家展示了使用jQuery怎么实现一个影院选座订座功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。<!DOCTYPE html><html><he...
    99+
    2023-06-14
  • vue+echarts怎么实现3D柱形图
    这篇文章主要介绍了vue+echarts怎么实现3D柱形图的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue+echarts怎么实现3D柱形图文章都会有所收获,下面我们一起来看看吧。效果如下:1、安装echa...
    99+
    2023-06-29
  • 小程序电影院选座demo怎么实现
    本文小编为大家详细介绍“小程序电影院选座demo怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“小程序电影院选座demo怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。jscheckseat:&nb...
    99+
    2023-06-26
  • vue怎么使用echarts实现折线图
    这篇文章主要讲解了“vue怎么使用echarts实现折线图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue怎么使用echarts实现折线图”吧!效果图:代码:<template&g...
    99+
    2023-06-29
  • vue怎么实现echarts中的仪表盘
    这篇文章主要介绍“vue怎么实现echarts中的仪表盘”,在日常操作中,相信很多人在vue怎么实现echarts中的仪表盘问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue怎么实现echarts中的仪表盘...
    99+
    2023-06-29
  • 怎么用Vue+Echarts实现简单折线图
    本文小编为大家详细介绍“怎么用Vue+Echarts实现简单折线图”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用Vue+Echarts实现简单折线图”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Vue+E...
    99+
    2023-06-29
  • vue实现选项卡和侧导航栏联动
    随着移动设备和Web应用程序的普及,越来越多的应用程序需要使用选项卡和侧导航栏来帮助用户导航和浏览。Vue框架的出现,极大地简化了开发这样的应用程序的过程,并且使得实现选项卡和侧导航栏联动变得非常方便。在这篇文章中,我们将会看到如何在Vue...
    99+
    2023-05-24
  • vue中怎么实现二级菜单导航点击选中事件
    这篇文章将为大家详细讲解有关vue中怎么实现二级菜单导航点击选中事件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。目标:一级导航点击收缩展开,二级导航点击选...
    99+
    2024-04-02
  • php怎么实现星座查询
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。php怎么实现星座查询?开通星座查询API接口:通过https://www.juhe.cn/docs/api/id/612s=cpphpcn注册及开通接口说明:该接口...
    99+
    2024-04-02
  • vue怎么使用echarts实现立体柱形图
    今天小编给大家分享一下vue怎么使用echarts实现立体柱形图的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。立体柱形图是由...
    99+
    2023-06-29
  • vue中怎么使用echarts和echarts-gl实现3D饼图环形饼图
    今天小编给大家分享一下vue中怎么使用echarts和echarts-gl实现3D饼图环形饼图的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2023-07-05
  • vue+echarts怎么实现条纹柱状横向图
    这篇“vue+echarts怎么实现条纹柱状横向图”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue+echarts怎么实...
    99+
    2023-06-29
  • vue项目怎么实现面包屑导航
    这篇文章主要介绍“vue项目怎么实现面包屑导航”,在日常操作中,相信很多人在vue项目怎么实现面包屑导航问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue项目怎么实现面包屑导航”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作