Heim >Web-Frontend >js-Tutorial >raphael.js绘制中国地图 地图绘制方法_javascript技巧

raphael.js绘制中国地图 地图绘制方法_javascript技巧

WBOY
WBOYOriginal
2016-05-16 17:00:212426Durchsuche

最近的数据统计项目中要用到中国地图,也就是在地图上动态的显示某个时间段某个省份地区的统计数据,我们不需要flash,仅仅依靠raphael.js以及SVG图像就可以完成地图的交互操作。在本文中,我给大家分享如何使用js来完成地图交互。

raphael.js绘制中国地图 地图绘制方法_javascript技巧

先简单介绍下raphael.js,raphael.js是一个很小的javascript库,它可以在网页中实现绘制各种矢量图、各类图表、以及图像裁剪、旋转、运动动画等等功能。此外raphael.js还跨浏览器兼容,而且还兼容老掉牙的IE6啊。raphael.js的官网地址: http://raphaeljs.com/

准备工作

我们需要准备一张矢量地图,可以从网上找一张矢量地图,或者使用illustrator绘制一份矢量地图,然后导出为SVG格式的文件,这个文件可以在浏览器上打开,然后提取里面的path路径信息(M开头的坐标)。并将path路径信息,按照chinamapPath.js的格式准备好地图路径信息。

复制代码 代码如下:

var china = [];

function paintMap(R) {
    var attr = {
        "fill": "#97d6f5",
        "stroke": "#eee",
        "stroke-width": 1,
        "stroke-linejoin": "round"
    };

    china.aomen = {
        name: "澳门",
        path: R.path("M413.032,.........省略若干......... ,414.183z").attr(attr)
    }
    china.hk = {
        //格式同上
    };
}

以上是我们将准备好的地图路径信息封装到()函数中,并保存文件名为chinamapPath.js,供后面调用。

HTML

首先在head部分载入raphael.js库文件和chinamapPath.js路径信息文件。

 

复制代码 代码如下:



然后在body中需要放置地图的位置放置div#map。
 

复制代码 代码如下:


JAVASCRIPT

首先我们在页面中调用地图,方法如下:

复制代码 代码如下:

window.onload = function () {
    //绘制地图
    var R = Raphael("map", 600, 500);//将地图载入到id为map的div中,并设置区域为600x500px大小。
    paintMap(R);
}

这个时候我们用浏览器打开会显示载入后的地图。接下来我们要给地图中的对应的省份区域加上省份名称,以及鼠标滑向每个省份区块时的变色动画效果。

复制代码 代码如下:

window.onload = function () {
    var R = Raphael("map", 600, 500);
    //调用绘制地图方法
    paintMap(R);

    var textAttr = {
        "fill": "#000",
        "font-size": "12px",
        "cursor": "pointer"
    };

           
    for (var state in china) {
        china[state]['path'].color = Raphael.getColor(0.9);

        (function (st, state) {

            //获取当前图形的中心坐标
            var xx = st.getBBox().x + (st.getBBox().width / 2);
            var yy = st.getBBox().y + (st.getBBox().height / 2);

            //写入文字
            china[state]['text'] = R.text(xx, yy, china[state]['name']).attr(textAttr);

            st[0].onmouseover = function () {//鼠标滑向
                st.animate({fill: st.color, stroke: "#eee"}, 500);
                china[state]['text'].toFront();
                R.safari();
            };
            st[0].onmouseout = function () {//鼠标离开
                st.animate({fill: "#97d6f5", stroke: "#eee"}, 500);
                china[state]['text'].toFront();
                R.safari();
            };

         })(china[state]['path'], state);
    }
}

以上代码中运用了raphael提供的方法有:getColor,getBBox,animate,toFront等等,这些可以在raphael文档中找到使用说明,本文不在讲述。
此外由于地图尺寸原因,有些省份名称在地图中的显示位置不恰当,需要修正偏移量,这样看起来舒服点。

复制代码 代码如下:

window.onload = function () {
    var R = Raphael("map", 600, 500);
    ...
    for (var state in china) {
        ...
        (function (st, state) {
            ....
            switch (china[state]['name']) {
                case "江苏":
                    xx += 5;
                    yy -= 10;
                    break;
                case "河北":
                    xx -= 10;
                    yy += 20;
                    break;
                case "天津":
                    xx += 10;
                    yy += 10;
                    break;
                case "上海":
                    xx += 10;
                    break;
                case "广东":
                    yy -= 10;
                    break;
                case "澳门":
                    yy += 10;
                    break;
                case "香港":
                    xx += 20;
                    yy += 5;
                    break;
                case "甘肃":
                    xx -= 40;
                    yy -= 30;
                    break;
                case "陕西":
                    xx += 5;
                    yy += 10;
                    break;
                case "内蒙古":
                    xx -= 15;
                    yy += 65;
                    break;
                default:
            }
            ...
      })(china[state]['path'], state);
   }
}
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn