近期尝试了一个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的一次尝试的更多相关文章

  1. OpenLayers典型部分概述

    中文学习:http://www.openlayers.cn/portal.php 原文地址:https://www.jianshu.com/p/e693711a7008 一 OpenLayers核心职 ...

  2. HTML5 网络拓扑图整合 OpenLayers 实现 GIS 地图应用

    在前面<百度地图.ECharts整合HT for Web网络拓扑图应用>我们有介绍百度地图和 HT for Web 的整合,我们今天来谈谈 OpenLayers 和 HT for Web  ...

  3. HT for Web整合OpenLayers实现GIS地图应用

    HT for Web作为逻辑拓扑图形组件自身没有GIS功能,但可以与各种GIS引擎即其客户端组件进行融合,各取所长实现逻辑拓扑和物理拓扑的无缝融合,本章将具体介绍HT for Web与开发免费的Ope ...

  4. openlayers加载百度地图

    最近在做openlayers添加百度地图的扩展类,经过轮番的尝试,终于将其接入了,但是发现偏差比较大,有根据百度的坐标进行了比对,将切片原点进行了调整,发现OK了.打开百度地图,可以看出切片的路径如: ...

  5. OpenLayers中的Layer概念和实践--Openlayers调用WMS服务

    整理转自:http://hi.baidu.com/lixuweiok/item/c406a4e6a6d390e7fa42ba4b 本章我认为是这本书的真正开端,终于开始讲一些有意思的东西了.. 在这一 ...

  6. 数据可视化的优秀入门书籍有哪些,D3.js 学习资源汇总

    习·D3.js 学习资源汇总 除了D3.js自身以外,许多可视化工具包都是基于D3开发的,所以对D3的学习就显得很重要了,当然如果已经有了Javascript的经验,学起来也会不费力些. Github ...

  7. 【 D3.js 入门系列 — 2 】 绑定数据和选择元素

    1. 如何绑定数据 D3 有一个很独特的功能:能将数据绑定到 DOM 上,也就是绑定到文档上.这么说可能不好理解,例如网页中有段落元素<p>,我们可以将整数 5 与 <p>绑定 ...

  8. 【 D3.js 入门系列 --- 9.6 】 生产的包图

    我的个人博客是:www.ourd3js.com csdn博客为:blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 打包图( Pack ).用于包括与被包括的关系,也表示各个对象的权重, ...

  9. D3.js从入门到“放弃”指南

    前言 近期略有点诸事不顺,趁略有闲余之时,玩起D3.js.之前实际项目中主要是用各种chart如hightchart.echarts等,这些图形库玩起来貌都是完美的,一切皆可配置,但几年前接触了D3之 ...

随机推荐

  1. git使用命令讲解

    1.创建版本库 ①选择一个合适的地方,创建一个空目录   mkdir learngit cd learngit ②通过git init命令把这个目录变成Git可以管理的仓库: git init Git ...

  2. 2018-2019-2 网络对抗技术 20162329 Exp3 免杀原理与实践

    目录 免杀原理与实践 一.基础问题回答 1.杀软是如何检测出恶意代码的? 2.免杀是做什么? 3.免杀的基本方法有哪些? 二.实验内容 1. 正确使用msf编码器 2. msfvenom生成如jar之 ...

  3. ubuntu系统下matplotlib中文乱码问题

    参考 [ubuntu系统下matplotlib中文乱码问题 - CSDN博客](https://blog.csdn.net/jeff_liu_sky_/article/details/54023745 ...

  4. Hibernate HQL ②

    分页查询: - setFirstResult(int firstResult):设定从哪一个对象开始检索,参数 firstResult 表示这个对象在查询结果中的索引位置,索引位置的起始值为零.默认情 ...

  5. teamviewer quicksupport 插件(下载)

    teamviewer quicksupport 插件(下载) teamviewer是一款远程控制软件(免费,比较好的); teamviewer quicksupport是一款支持手机可以被远程控制软件 ...

  6. ORM框架之SQLAchemy

    SQLAchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,即:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果. 1.安装 ...

  7. HTML入门13

    构建表格 使用colspan和rowspan添加无单位的数字值作为属性来实现行合并和列合并: <col>来定义列的样式,每一个<col>都会制定每列的样式,对于不需要指定列的样 ...

  8. Address already in use: make_sock: could not bind to address 0.0.0.0:80

    网上查了很多资料都是要杀进程,但是并没有找到占用的进程. 最后解决的方案是在apache配置文件下,去掉Listen 80 即可

  9. 基于vue-cli配置移动端自适应

    移动端自适应:手淘的 lib-flexible + rem 配置 flexible 安装 lib-flexible 在命令行中运行如下安装: 1 npm i lib-flexible --save 引 ...

  10. Java语法细节 - 可见性

    目录 JAVA访问和修饰符的关系一览表 JAVA访问和修饰符的关系一览表 Modifier Class Package Subclass World public Y Y Y Y protected ...