D3、openlayers的一次尝试
近期尝试了一个webgl相关的内容,有些小激动,及时分享一下我的测试示例,效果如下:

此示例分从业务角度分为两部分,一个部分为d3展示的柱图,另一部分则为用openlayers展示的地图。而其难点却在界面的交互效果。实现内容的翻面。
一、翻面效果的实现
此效果看似神奇,理解清楚原理后也还是很简单的。主要用到css3的backface-visibility属性,他表示元素正面运动到用户不可见的位置时,当前元素是否可见。
<div class="flip-container">
<div class="flip-wrap">
<div class="front">
</div>
<div class="back">
</div>
</div>
</div>
以上是html代码的结构,flip-container作为最外层的包装,在其上面应用了perspective属性(此属性的详细解释可参考此文章),表示视距,他能影响到我们3d变换效果是否更接近真实;flip-wrap作为前、后两个div的父级的参照,在现代浏览上此处可以不加入3d变换属性,而Ie则需要加入。front和back这两个div都是需要加上3d变换效果的。而对front的z-index层级加高,是为了让其默认显示在最前面。back默认让其旋转至-180deg,是为了让其过滤效果更为流畅和平滑。
.flip-container{
-webkit-perspective:;
-moz-perspective:;
perspective:;
width: 600px;
height: 400px;
margin: 0 auto;
}
.flip-wrap{
position: relative;
width: 100%;
height: 100%;
/*transform-style设置在父级,为了兼容IE*/
transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
-ms-transform-style: preserve-3d;
}
.flip-wrap > .front, .flip-wrap >.back{
position: absolute;
left:;
top:;
height: 100%;
width: 100%;
-moz-transition: .6s;
-ms-transition: .6s;
transition: .6s;
transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
-ms-transform-style: preserve-3d;
backface-visibility: hidden; /*动画完成后,没正面面向用户,则隐藏*/
}
.flip-wrap > .front{
background: red;
transform: rotateY(0deg);
z-index:; /*z轴高一点,覆盖back层*/
}
.flip-wrap > .back{
background: green;
transform: rotateY(-180deg);
}
.flip-container:hover .front{
transform: rotateY(180deg);
}
.flip-container:hover .back{
transform: rotateY(0deg);
}
二、JS部分实现
JS代码的结构图:

flip.js:为此组件 入口
flip.ol.js:openlayer的具体实现
flip.d3.js:d3绘制柱图的具体实现
flip.store.js:数据接口,用于返回从后台接口获取到的数据
city.js:城市名称数据字典
adapter/d3.js:用于将后台数据转换为d3可用的数据格式
adapter/ol.js:用于将后台数据转换为openlayers可用的数据格式
adapter/provider.js:转换器工厂入口
本示例主要以flip.js为主,在组合d3和ol相关功能。
class Flip {
constructor(options){
this.options = _.assign(Flip.Default, options);
this.d3 = new d3(this.options);
this.ol = new ol(this.options);
this.store = new store();
this.adapterProvider = new AdapterProvider();
}
/**
* 组件的渲染
*/
render (){
//这里发送数据到内部进行渲染
var promise = this.store.getData();//这里应该是个异步
//还需要一个数据转换工厂,实现数据=>d3,或者数据=>ol的转换
promise.then((data)=>{
var d3Data = this.adapterProvider.convert(data, AdapterProvider.type.d3); //同步
var olData = this.adapterProvider.convert(data, AdapterProvider.type.ol);
this.d3.render(d3Data);
this.ol.render(olData);
});
}
}
在构造函数中对存储器、转换器、d3和ol进行实例化,然后提供render方法进行数据的获取和绘制,具体细节下载代码查看。
D3、openlayers的一次尝试的更多相关文章
- OpenLayers典型部分概述
中文学习:http://www.openlayers.cn/portal.php 原文地址:https://www.jianshu.com/p/e693711a7008 一 OpenLayers核心职 ...
- HTML5 网络拓扑图整合 OpenLayers 实现 GIS 地图应用
在前面<百度地图.ECharts整合HT for Web网络拓扑图应用>我们有介绍百度地图和 HT for Web 的整合,我们今天来谈谈 OpenLayers 和 HT for Web ...
- HT for Web整合OpenLayers实现GIS地图应用
HT for Web作为逻辑拓扑图形组件自身没有GIS功能,但可以与各种GIS引擎即其客户端组件进行融合,各取所长实现逻辑拓扑和物理拓扑的无缝融合,本章将具体介绍HT for Web与开发免费的Ope ...
- openlayers加载百度地图
最近在做openlayers添加百度地图的扩展类,经过轮番的尝试,终于将其接入了,但是发现偏差比较大,有根据百度的坐标进行了比对,将切片原点进行了调整,发现OK了.打开百度地图,可以看出切片的路径如: ...
- OpenLayers中的Layer概念和实践--Openlayers调用WMS服务
整理转自:http://hi.baidu.com/lixuweiok/item/c406a4e6a6d390e7fa42ba4b 本章我认为是这本书的真正开端,终于开始讲一些有意思的东西了.. 在这一 ...
- 数据可视化的优秀入门书籍有哪些,D3.js 学习资源汇总
习·D3.js 学习资源汇总 除了D3.js自身以外,许多可视化工具包都是基于D3开发的,所以对D3的学习就显得很重要了,当然如果已经有了Javascript的经验,学起来也会不费力些. Github ...
- 【 D3.js 入门系列 — 2 】 绑定数据和选择元素
1. 如何绑定数据 D3 有一个很独特的功能:能将数据绑定到 DOM 上,也就是绑定到文档上.这么说可能不好理解,例如网页中有段落元素<p>,我们可以将整数 5 与 <p>绑定 ...
- 【 D3.js 入门系列 --- 9.6 】 生产的包图
我的个人博客是:www.ourd3js.com csdn博客为:blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 打包图( Pack ).用于包括与被包括的关系,也表示各个对象的权重, ...
- D3.js从入门到“放弃”指南
前言 近期略有点诸事不顺,趁略有闲余之时,玩起D3.js.之前实际项目中主要是用各种chart如hightchart.echarts等,这些图形库玩起来貌都是完美的,一切皆可配置,但几年前接触了D3之 ...
随机推荐
- linux上部署JMeter
export JAVA_HOME=/opt/jdk1.8.0_171 export PATH=$PATH:$JAVA_HOME/bin 让环境变量生效 vi /etc/profile 添加下述两行: ...
- 安装pwntools
使用手册 http://pwntools.readthedocs.io/en/stable/ 环境 全新的ubuntu 14.04 64位 py2.7 实测ubuntu 18.04 64位同样适用 过 ...
- 20175305张天钰《java程序设计》第五周学习总结
<java程序设计>第五周学习总结 接口与实现 知识小点: (1)用Arrays.sort方法对所有实现Comparable接口的对象进行排序 (2)接口体现了has-a关系,继承体现了i ...
- Metasploit中aggregator插件无法使用
Metasploit中aggregator插件无法使用 aggregator是Metasploit自带的一个插件,用来管理会话Session.该插件使用metasploit-aggreator库. ...
- JavaScript处理null、undefined和空值
最近一直在写前端,在使用jquery的ajax请求然后处理返回值的时候,经常会遇到返回值为undefined或者"null"的情况,很是头疼,而返回接口是来自于其他公司的,所以这种 ...
- 使用ACR122U NFC读卡器对M1卡进行读写操作(可以读写中文)
因为项目需要,第一次接触到了ACR122U NFC读卡器(非接触式)和M1卡,首先介绍一下想要读写应该知道的基本知识. 我就根据我的理解先叙述一下: ACR122U 是一款连机非接触式智能卡读写器,可 ...
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第6章编程练习8
#include <iostream> #include <fstream> #include <cstdlib> const int SIZE=20; using ...
- IIS 接口访问404
IIS->网站->ASP->启用父路径(true)
- 快递100码json
{ "AOL澳通速递": "aolau", "A2U速递": "a2u", "AAE快递": &qu ...
- 201771010126 王燕《面向对象程序设计(Java)》第九周学习总结
实验九 异常.断言与日志 实验时间 2018-10-25 1.实验目的与要求 (1) 掌握java异常处理技术: 异常积极处理方法:使用try子句捕获异常 异常小计处理方法:抛出throw异常类 (2 ...