• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >html5 > 基于HTML5制作在线上海地铁图

基于HTML5制作在线上海地铁图

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-03

本文主要包含HTML5教程,HTML5中国,基于HTML5制作在线上海地铁图,html5cn,html5资料,html5文章,htm等相关知识,匿名希望在学习及工作中可以帮助到您
某市政项目要用到地铁图,展示上海地铁站点以及相关信息流,尝试使用HTML5技术来实现,自己折腾有点慢,找到一个HTML5的图形组件-Qunee for HTML5,简单学习一下,就可以很好的解决这类需求,做出优美的展现,下面以上海2012地铁图为例,效果如下:


示例讲解

首先需要解决数据问题,可以从维基百科或者上海地铁官网中获取,不过也免不了人工,要达到良好的显示效果,需要不只要记录站点的位置,还需要设置文本标签的理想位置,有时为了避免文字叠加,需要设置旋转角度……总之事在人为,想想办法,最终解决了数据问题,再加上Qunee图形组件的强大展示效果,做出来可以交互的在线地铁图

数据格式

采用JSON格式数据,分三种类型:文本标签、站点、地铁线

总的结构如下:

  • "labels" : [ ... ],
  • "stations" : [ ... ],
  • "lines" : [ ... ]
  • }
  • 复制代码
    文本标签数据

    包含坐标和文字信息,如果文字需要旋转,则会增加”rotate”属性,下面是“莘庄”文本标签信息
  • "text" : "莘庄",
  • "x" : 883.591,
  • "y" : 1625.695
  • }
  • 复制代码
    文字与节点旋转效果


    站点数据

    包含坐标、旋转角度以及编号信息,下面是“莘庄”站的信息

  • "id" : 5,
  • "x" : 869.8513512641732,
  • "y" : 1597.6559686949402,
  • "rotate" : 0.7853981633974483
  • }
  • 复制代码
    地铁线数据

    包含名称,颜色,以及经过的站点编号

  • "name" : "1",
  • "color" : "#e52035",
  • "stations" : [64, 70, 67, 71, 72, 65, 69, 73, 66, 68, 63, 62, 22, 61, 60, {"id": 21, "yOffset": 0.5}, 59, {"id": 18, "yOffset": -0.5}, 17, 58, 14, 7, 57, 6,
  • 56, 44, 47, 5]
  • }
  • 复制代码
    对于特殊情况,比如两条地铁线共用一条线路的情况,会出现两条线重合,为了避免这种情况,还可以指定站点横向偏移量,比如上面一号线中的如下数据

    因为上海地铁三号线与四号线共用线路较多,所以这种处理更加明显

    三号线数据

  • "name" : "3",
  • "color" : "#f9d300",
  • "stations" : [6, 95, 96, 97, {"id":12,"yOffset":0.5}, {"id":11,"yOffset":0.5}, {"id":8,"yOffset":0.5}, {"id":9,"yOffset":0.5},
  • {"id":10,"yOffset":0.5}, {"id":25,"yOffset":0.5}, {"id":26,"yOffset":0.5}, {"id":238,"yOffset":0.5}, {"id":22,"yOffset":-0.5}, {"id":27,"yOffset":-0.5},
  • 98, 99, 100, 101, 104, 105, 107, 108, 109, 106, 110, 111]
  • }
  • 复制代码
    地铁共线效果

    创建图元

    数据需要转换成qunee图元对象,三种类型分别对应三个创建函数

    创建文本标签
  • var text = graph.createNode(name, x, y);
  • if(rotate){
  • text.rotate = rotate;
  • }
  • text.zIndex = 20;
  • text.image = null;
  • text.setStyle(Q.Styles.BACKGROUND_COLOR, Q.toColor(0x88FFFFFF));
  • text.setStyle(Q.Styles.LABEL_ANCHOR_POSITION, Q.Position.LEFT_BOTTOM);
  • text.setStyle(Q.Styles.LABEL_POSITION, Q.Position.CENTER_MIDDLE);
  • text.setStyle(Q.Styles.LABEL_PADDING, PADDING);
  • return text;
  • }
  • 复制代码
    创建站点

  • var node = graph.createNode(null/**station.name*/, station.x, station.y);
  • node.stationId = station.id;
  • node.setStyle(Q.Styles.LABEL_FONT_SIZE, 10);
  • node.setStyle(Q.Styles.LABEL_ANCHOR_POSITION, Q.Position.CENTER_MIDDLE);
  • node.setStyle(Q.Styles.LABEL_POSITION, Q.Position.CENTER_MIDDLE);
  • node.zIndex = 10;
  • if(station.rotate){
  • node.image = roundRect;
  • node.rotate = station.rotate;
  • }else{
  • node.image = circle;
  • }
  • node.setStyle(Q.Styles.SHAPE_FILL_COLOR, "#FFF");
  • node.setStyle(Q.Styles.SHAPE_STROKE_STYLE, "#000");
  • return node;
  • }
  • 复制代码
    创建地铁线

    createLine(…)函数用于创建地铁线,使用了节点类型图元,并设置节点主体为路径,函数updateLine(…)用于从站点信息自动生成线路路径

  • var stations = line.stations;

  • var node = graph.createNode(line.name);
  • node.stations = stations;
  • node.movable = false;
  • node.setStyle(Q.Styles.LABEL_FONT_SIZE, 50);
  • node.setStyle(Q.Styles.LABEL_COLOR, line.color);
  • node.setStyle(Q.Styles.LABEL_ANCHOR_POSITION, Q.Position.LEFT_BOTTOM);
  • node.setStyle(Q.Styles.LABEL_POSITION, Q.Position.LEFT_TOP);
  • node.setStyle(Q.Styles.LAYOUT_BY_PATH, true);
  • node.anchorPosition = null;
  • node.setStyle(Q.Styles.SHAPE_STROKE, size);
  • node.setStyle(Q.Styles.SHAPE_STROKE_STYLE, line.color);

  • updateLine(node, true);
  • return node;
  • }
  • 复制代码
  • var path = new Q.Path();
  • line.image = path;

  • var stations = line.stations;
  • var first = true;
  • Q.forEach(stations, function(s){
  • var station = getStation(s.id || s);
  • if(!station){
  • return;
  • }
  • if(addListener){
  • addLocationChangeListener(station.stationId, line);
  • }
  • var location = station.location;
  • var x = location.x, y = location.y;
  • if(s.yOffset){
  • var offset = s.yOffset * size;
  • var rotate = station.rotate || 0;
  • var sin = Math.sin(rotate);
  • var cos = Math.cos(rotate);
  • x += cos * offset;
  • y += sin * offset;
  • }
  • if(first){
  • first = false;
  • path.moveTo(x, y);
  • }else{
  • path.lineTo(x, y);
  • }
  • })
  • }
  • 复制代码
    交互处理

    增加交互处理,监听站点拖动事件,保持地铁路线跟随站点位置变化

  • if(evt.kind != Q.InteractionEvent.ELEMENT_MOVING){
  • return;
  • }
  • var datas = evt.datas;

  • Q.forEach(datas, function(data){
  • if(!data.stationId){
  • return;
  • }
  • var listeners = stationLocationChangeListeners[data.stationId];
  • if(listeners){
  • for(var l in listeners){
  • updateLine(listeners[l]);
  • }
  • 您可能想查找下面的文章:

    • 一款利用html5和css3动画排列人物头像的实例演示
    • html5教程调用绘图api画简单的圆形代码分享
    • html5教程画矩形代码分享
    • html5教程制作简单画板代码分享
    • html5基础教程常用技巧整理
    • html5教程-Canvas入门
    • html5教程画矩形代码分享
    • HTML5晃动DeviceMotionEvent事件
    • HTML5教程之html 5 本地数据库(Web Sql Database)
    • HTML5中对contenteditable属性的解释与规定

    相关文章

    • 2018-12-03自定义HTML5 Progress的样式的图文代码详解
    • 2018-12-03简单做出HTML5翻页效果文字特效
    • 2018-12-03用html5的canvas画布绘制贝塞尔曲线完整代码_html5教程技巧
    • 2018-12-03Canvas中beginPath()和closePath()的分析总结(附示例)
    • 2018-12-03H5小游戏如何应用到广告中?什么场景使用效果最好?
    • 2017-08-06HTML5如何为形状图上颜色怎么绘制具有颜色和透明度的矩形
    • 2018-12-03h5 video标签用法的实例代码
    • 2018-12-03详解HTML5中rel属性的prefetch预加载功能使用_html5教程技巧
    • 2018-12-03用CSS制作立体导航栏的方法
    • 2018-12-03关于FileAPI的详细介绍

    文章分类

    • html/xhtml
    • html5
    • CSS
    • XML/XSLT
    • Dreamweaver教程
    • Frontpage教程
    • 心得技巧
    • bootstrap
    • vue
    • AngularJS
    • HBuilder教程
    • css3
    • 浏览器兼容
    • div/css
    • 网页编辑器
    • axure

    最近更新的内容

      • H5编辑器核心思想的实例分析
      • html5 touch事件实现触屏页面上下滑动(二)
      • 浅谈HTML5 & CSS3的新交互特性
      • 全面解析HTML5中的标准属性与自定义属性_html5教程技巧
      • 开发人员所需要知道的HTML5性能分析面面观_html5教程技巧
      • HTML5—新语义元素使用及兼容
      • 使用HTML5的Notification API制作web通知的教程
      • 用html5的63行代码实现贪吃蛇游戏
      • HTML5学习笔记之html5与传统html区别
      • 用仿ActionScript的语法来编写html5——第五篇,Graphics绘图

    关于我们 - 联系我们 - 免责声明 - 网站地图

    ©2020-2025 All Rights Reserved. linkedu.com 版权所有