在一个WebGIS系统中往往要实现图形的切换,比如业务图层的切换,以及底图的切换等等,可以通过控制图层的可见性来实现。比如通过设置图层的opacity 、visible来控制,前几天有网友聊天的时候提了一个这样的需求如果在地图切换的时候添加一个过渡效果,以至于变化的效果不显得生硬。写面说一下我的实现思路。
    先看一下效果吧   Demo链接

  如果这个功能在普通的Web开发中,果要对两个html元素 比如div实现渐变性的切换的效果,我们首先会想到使用Jquery或者dojo等框架来解决,这些框架中都有一些动画的方式来实现,可以尝试将这种思想用在地图上。
首先应该知道,地图中的图片都是通过html元素来承载的。每个图层都被一个div包裹着,通过开发者工具查看 Map的组成如下。
  通过上图可以看到每个图层都被一个div包裹着,如果设置最外层div的透明度,里面包括的地图也会改变为相应的透明度。到此为止解决方案基本上思路是清晰了:找出每个图层的div,然后在动画里面动态地改变相应div的透明度。接下来进行编码实现。
    <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" >
<style>
html, body, #map {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow-y:hidden;
background-color: #DBD7D0;;
font-family: "Trebuchet MS";
}
</style>
<title>
</title>
</head>
<body>
<div id="map">
<button id="switchbasemap" style="position: absolute;z-index: 1;left: 100px;top: 20px;height: 30px;">切换底图</button>
</div>
</body>
<script src="http://js.arcgis.com/3.7/"></script>
<script src="app.js"></script>
</html>
  上述代码中主要引入ArcGIS的Javascript API以及相应的CSS,并且添加了一个按钮来触发 地图的切换事件。
在 JS代码里主要解决了2个问题,1、如何获取承载图层的div元素 2、如果实现动画的实现。通过刚才的发现,上面包裹图层的div都有一个固定的id,有了这个id,可以通过 document.getElementById 或者dojo自带的dojo.byId就可以轻而易举地获得了 ,如果使用的是最新的是3.7的api的话,调用新增的getNode方法就可以得到这个div了。至于实现动画效果可以使用dojo中的 dojo/_base/fx 中的animateProperty 来实现,(Jquery中可以使用对应的$.animate)。

关键代码如下(具体代码请下载完整的代码 地址:http://codepen.io/kunkun/share/zip/xsiub )

     basefx.animateProperty({
node: colorfullbasemapdiv,
duration:1000,
properties: { opacity: 0 },
onEnd:function(){
colorfullbasemapdiv.style.display="none";
graybasemapdiv.style.display="block";
basefx.animateProperty({
duration:1000,
node: graybasemapdiv,
properties: { opacity: 1 }
}).play();
}
}).play();

    总结:通过控制包裹图层的div来实现效果的渐变,通过这种方式还可以给地图添加一个滤镜的功能,通过获取map的div 设置相应的CSS 熟悉即可。根据这种思想的指导,在以后开发中,如果碰到API不支持的工功能,可以试试这种这种控制原生的html来解决。

ArcGIS API for Javascript 图层切换渐变效果实现的更多相关文章

  1. ArcGIS api for javascript——图层-创建定制的切片图层类型的图层

    描述 本例展示了如何创建一个定制图层,该图层访问来自WEB服务器的地图切片.这种方式最通用的用途是检索ArcGIS Server 9.2切片缓存或web上的其他地图切片服务.尽管本例使用的是一个Arc ...

  2. ArcGIS api for javascript——图层-创建WMS图层类型的图层

    本例使用一个WMS端点创建了一个简单的动态图层.首先,代码声明一个新的类my.CityStatesRiversUSAWMSLayer,该类继承esri.layers.DynamicMapService ...

  3. ArcGIS API for JavaScript(2)-ArcGIS Server发布要素图层服务

    1.前言 上一篇该系列的文章我们主要讲了一下基础Web地图搭建,这篇我们主要讲一下ArcGIS Server发布服务,并且如何调用服务.将自己的数据加载到Web地图当中来,实现Web端浏览数据. 2. ...

  4. 转:ArcGIS API For JavaScript官方文档(二十)之图形和要素图层——①Graphics概述

    原文地址:ArcGIS API For JavaScript官方文档(二十)之图形和要素图层——①Graphics概述 ArcGIS JavaScript API允许在地图上绘制graphic(图形) ...

  5. arcgis api for JavaScript _加载三维图层(scene layer)

    arcgis api for JavaScript _加载三维图层(scene layer) arcgis api for JavaScript  4.x 版本增加对三维的支持. 关于三维图层(sce ...

  6. [ArcGIS API for JavaScript 4.8] Sample Code-Get Started-widgets简介

    [官方文档:https://developers.arcgis.com/javascript/latest/sample-code/intro-widgets/index.html] 一.Intro ...

  7. 基于ArcGIS API for Javascript的地图编辑工具

    最近工作上需要用ArcGIS API for Javascript来开发一个浏览器上使用的地图编辑工具,分享一下一些相关的开发经验. 我开发的地图编辑工具是根据ESRI提供的例子修改而来的,参考的例子 ...

  8. ArcGIS API for JavaScript介绍

    ArcGIS API for JavaScript中的类是按照模块组织的,主要包含esri.esri/geometry.esri/renderers.esri/symbols.esri/symbols ...

  9. ArcGIS.Server.9.3和ArcGIS API for JavaScript地图实现Toorbar功能(四)

    转自:http://www.cnblogs.com/hll2008/archive/2008/11/22/1338630.html 目的:1.ArcGIS API for JavaScript实现To ...

随机推荐

  1. Java类的初始化与实例对象的初始化

    Java对象初始化详解 2013/04/10 · 开发 · 1 评论· java 分享到:43 与<YII框架>不得不说的故事—扩展篇 sass进阶篇 Spring事务管理 Android ...

  2. java爬虫简单实例

    爬虫的实质就是打开网页源代码进行匹配查找,然后获取查找到的结果./** 获取* 将正则规则进行对象的封装. * Pattern p = Pattern.compile("a*b") ...

  3. <<杰克.韦尔奇自传>>

    <<杰克.韦尔奇自传>> 这本书号称是管理学十大经典名著,也是HR老师推荐的一本书.花了几个月时间断断续续拜读了这本书. GE是伟大的公司,杰克韦尔奇是伟大的CEO,这都毋庸置 ...

  4. Cisco交换机配置VLAN与TRUNK

    0x00前言: 今日在学校里学习了如何搭建vlan和配置等等还有trunk. 由于快下课了.尽快写. 0x01准备: Cisco模拟器 0x02正文: 要求: VLAN 10 左边的IP:192.16 ...

  5. java面向对象基础复习

    对java基础的一个复习总结吧. 1.继承:通过使用关键字extends,子类可以继承父类所有的方法和属性,但是无法使用 private(私有) 的方法和属性,一次只能继承一个父类. 2.重写:重写( ...

  6. CSS——创建css

    CreateInlineStyle: function () { //创建一个内联样式表 var style = document.createElement('style'); //创建一个styl ...

  7. linux系统构架 - LB集群之LVS的DR设置

    在lvs的nat模式的基础上 1.清空ipvsadm规则 ipvsadm -C 查看 ipvsadm -ln 2.清空iptables规则 iptables -t nat -F 3.修改rs的网卡配置 ...

  8. JAVA压缩 解压缩zip 并解决linux下中文乱码

    1. [代码][Java]代码   1:再压缩前,要设置linux模式, 需要使用第三方ant-1.6.5.jar  如果是文件目录,则ZipEntry zipEntry=new ZipEntry(b ...

  9. Java中instanceof和isInstance的具体区别

    Java中instanceof和isInstance的具体区别 在Think in Java泛型这一章遇到这个问题,一些博客模糊提到了isInstance是instanceof的动态实现,查阅文档参考 ...

  10. java css

    SS动画 http://daneden.github.io/animate.css