官方网址:http://raphaeljs.com/

Raphaël is a small JavaScript library that should simplify your work with vector graphics on the web. If you want to create your own specific chart or image crop and rotate widget, for example, you can achieve it simply and easily with this library.

Raphaël ['ræfeɪəl] uses the SVG W3C Recommendation and VML as a base for creating graphics. This means every graphical object you create is also a DOM object, so you can attach JavaScript event handlers or modify them later. Raphaël’s goal is to provide an adapter that will make drawing vector art compatible cross-browser and easy.

Raphaël currently supports Firefox 3.0+, Safari 3.0+, Chrome 5.0+, Opera 9.5+ and Internet Explorer 6.0+.

最近在做一个关于客户与品牌,客户与代理关系的展示,由于用二维表展示不是很直观,所以就想做个比较直观的,在网上搜到了Raphael,就小试了一下,感觉不错;

下面是试用结果截图:

源码如下:

var data = {"customer": "方正电子","brands":[{ "brand": "经略广告" },{ "brand": "文韬采编" },{ "brand": "飞腾创艺" },{ "brand": "畅享全媒体" }]};var r = Raphael("holder", 500, 500);angle = 0;var interval = 36;if (data != null && data.brands.length > 0) {if (data.brands.length < 13) {interval = 360 / data.brands.length;}}var centerX = 250;var centerY = 250;var mc = Raphael.getColor();mc = Raphael.getColor();// mc = Raphael.getColor();var index = 0;while (angle < 360) {var color = Raphael.getColor();(function (t, c) {r.circle(centerX, 400, 50).attr({ stroke: c, fill: c, transform: t, "fill-opacity": .4 }).click(function () {}).mouseover(function () {this.animate({ "fill-opacity": .95 }, 500);}).mouseout(function () {this.animate({ "fill-opacity": .4 }, 500);});})("r" + angle + " " + centerX + " " + centerY + "", color);var path_transform = "r" + angle + " " + centerX + " " + centerY + "";r.path("M" + centerX + "," + centerY + "L" + centerX + ",350z").attr({ stroke: mc, fill: mc, transform: path_transform + "," + mc, "fill-opacity": .4 });var brandName = r.text(centerX, 400, data.brands[index].brand).attr({font: '16px Arial',fill: '#000',transform: path_transform + "," + mc}).toFront();brandName.rotate(0 - angle, brandName.x, brandName.y);index++;angle += interval;}var s = r.set();s.push(r.circle(centerX, centerY, 60));s.attr({ stroke: mc, fill: mc }).mouseover(function () {this.animate({ "fill-opacity": 1.75 }, 500);}).mouseout(function () {this.animate({ "fill-opacity": 1 }, 500);});s.push(r.text(centerX, centerY, data.customer).attr({ font: '16px Arial', fill: '#fff' }));
var data = {"customer": "联想集团","agents":[{ "agent": "中关村在线" },{ "agent": "苏宁电器" },{ "agent": "国美电器" },{ "agent": "京东商城" },{ "agent": "淘宝商城" }]};var containerW = 500;var containerH = 500;var r = Raphael("holder", containerW, containerH);var boxW = 70; //方框宽度var boxH = 30;  //方框高度var subBoxY = 150; //代理框的y坐标var paddingY = 10; //图的内边距 var angle = 0;var interval = 10;if (data != null && data.agents.length > 0) {if ((parseInt(boxW, 10) * data.agents.length) < containerW) {//间隔=(containerW-代理个数*boxW)/代理个数+1)interval = ((parseInt(containerW, 10) - (parseInt(boxW, 10) * data.agents.length)) / (data.agents.length + 1));}}var mainColor = Raphael.getColor();mainColor = Raphael.getColor();//画当前客户框var mainBoxX = ((parseInt(containerW, 10) - parseInt(boxW, 10)) / 2);var mainBox = r.rect(mainBoxX, paddingY, boxW, boxH).attr({ stroke: mainColor, fill: mainColor, "fill-opacity": .4 }).mouseover(function () {this.animate({ "fill-opacity": .95 }, 500);}).mouseout(function () {this.animate({ "fill-opacity": .4 }, 500);});//写客户名称r.text(mainBoxX+(boxW/2), paddingY+(boxH/2), data.customer).attr({ font: '12px Arial', fill: '#fff' })//画中间横线var mX = (interval + ((parseInt(boxW, 10) / 2)));var mY = ((parseInt(subBoxY, 10) - parseInt(paddingY, 10) - parseInt(boxH, 10)) / 2) + parseInt(paddingY, 10) + parseInt(boxH, 10);r.path(Raphael.format("M{0},{1}L{2},{3}z",mX,mY,(containerW - mX),mY));//画当前客户和横线的连接线r.path(Raphael.format("M{0},{1}L{2},{3}z",(parseInt(containerW, 10)/2),mY,(parseInt(containerW, 10) / 2),parseInt(paddingY, 10) + parseInt(boxH, 10)));angle = interval;$.each(data.agents, function (i) {//生成多个代理框var color = Raphael.getColor();var box1 = r.rect(angle, subBoxY, boxW, boxH).attr({ stroke: color, fill: color, "fill-opacity": .4 }).click(function () {}).mouseover(function () {this.animate({ "fill-opacity": .95 }, 500);}).mouseout(function () {this.animate({ "fill-opacity": .4 }, 500);});//画线r.path(Raphael.format("M{0},{1}L{2},{3}z",(angle+(boxW/2)),subBoxY,(angle+(boxW/2)),mY));//写代理名称r.text(angle + (boxW / 2), subBoxY + (boxH / 2), data.agents[i].agent).attr({ font: '12px Arial', fill: '#fff' })angle += parseInt(boxW, 10) + interval;});

转载于:https://www.cnblogs.com/HeroBeast/archive/2011/12/20/2295021.html

js矢量图类库:Raphaël—JavaScript Library相关推荐

  1. d3.js折线图_学习使用D3.js创建折线图

    d3.js折线图 by Sohaib Nehal 通过Sohaib Nehal 学习使用D3.js创建折线图 (Learn to create a line chart using D3.js) 使用 ...

  2. 《JavaScript高效图形编程(修订版)》——6.2 位图、矢量图,或两者兼而有之?...

    本节书摘来自异步社区<JavaScript高效图形编程(修订版)>一书中的第6章,第6.2节,作者:[美]Raffaele Cecco著,更多章节内容可以访问云栖社区"异步社区& ...

  3. java矢量图_你见过js画出这样的矢量图以及动画特效吗?

    js 画出几十种矢量图 raphaeljs 超炫丽的动画效果 3.动态曲线图 ---- js 画图 raphaeljs   demo http://raphaeljs.com/analytics.ht ...

  4. 百度离线地图示例之三:矢量图

    前言介绍: 主要是基于v3.0的API版本进行的离线,纯内网可操作,基本上实现了现有90%以上的功能点,能兼容jpg和png格式的瓦片图层,实现了原生和基于Vue两个版本(包含常用的55个示例),文末 ...

  5. python绘制三维矢量图_开源图形库 c语言-图形图像库 集合

    Google三维API O3DO3D 是一个开源的 Web API 用来在浏览器上创建界面丰富的交互式的 3D 应用程序.这是一种基于网页的可控3D标准.此格式期望真正的基于浏览器,独立于操作系统之外 ...

  6. python画矢量图_使用基于matplotlib的SciencePlots绘制精美图表

    开源项目地址:https://github.com/garrettj403/SciencePlots 安装这个包,需要输入魔法: pip install SciencePlots 例如绘制如下函数,导 ...

  7. html矢量图 SVG VML 介绍

    观看者:想了解html矢量图知识的同学 目标:了解html矢量图知识,svg和vml 兼容方案. 实现方式:代码及相关文字解释. 最近web项目需要一些流程图的支持,于是研究了一下这部分东西,觉得很好 ...

  8. matlab箱形图_使用javascript可视化世界幸福来构建箱形图

    matlab箱形图 Data visualization is an important and sometimes undervalued tool in a data scientist's to ...

  9. Raphael Js矢量库API简介:

    Raphael Js矢量库API简介: Raphael Javascript 是一个 Javascript的矢量库. 2010年6月15日,著名的JavaScript库ExtJS与触摸屏代码库项目jQ ...

最新文章

  1. Spring AOP 源码分析 - 拦截器链的执行过程
  2. Zabbix字符集乱码及Centos7补全设置
  3. python pycharm 增量选择 ctrl+w
  4. [Android 插件化(一)] DynamicLoadApk的用法
  5. asp.net Urlrewriter在虚拟主机上的使用方法
  6. science图表_Science:组合图表绘制
  7. LINUX REDHAT第十单元文档
  8. 生命游戏c语言代码,c++生命游戏源码
  9. ActiveReports 9实战教程(2): 准备数据源(设计时、运行时)
  10. php中几个操作函数参数的函数func_num_args() func_get_args() func_get_arg($i)php
  11. HTC扣动板机出现射线。获得射线与VR中物体的交点并用linerender表示出来
  12. 移动通信学习笔记03_蜂窝原理
  13. Mac m1 max 工具安装及简介
  14. opencv的下载报错解决
  15. githut iOS 开源项目
  16. 3个传教士与3个野人,哥带你们过河去
  17. 冰冻三尺,非一日之寒!
  18. 零基础带你Ubuntu20.04安装Rosbridge并操作测试小乌龟,手把手教学【超级详细】
  19. Jetson tx2 使用 jetpack 4.3刷机全过程
  20. 词根:lun = moon, 表示“月亮”

热门文章

  1. Android | Sqlite3
  2. React 相关资料
  3. 澳元兑美元震荡整理,后市可否追高
  4. HTML5游戏引擎Playcraft将于近日正式启动
  5. WEBSERVICE 之WSDL
  6. idea中删除java类并提交_IDEA 删除java类的3种提示
  7. php中for循环流程图,PHP for循环
  8. 2019年7月前CSDN最新排名
  9. MSSQL优化之————探索MSSQL执行计划
  10. 小程序怎么打出横线效果_成都小程序开发:哪些因素会影响小程序的运营效果?...