ArcGIS API For Javascript :如何在地图上做出点位脉冲闪烁的效果
日常地图表达中我们通常使用的地图符号多是静态地图符号,时间久了会造成视觉审美疲劳,也没有现代感。
在这种背景下,对现有地图符号进行简单处理,即可得到色彩鲜艳,对比度强烈,活灵活现的地图表达形式。
灵感
观察 ArcGIS JS API 带来的原生符号 SimpleMarkerSymbol 在前端对符号进行渲染的结果,简化后的代码如下:
<g id="graphicsLayer1_layer" data-geometry-type="point" style="display: block;">
<circle fill="rgb(70, 230, 255)"
fill-opacity="0.8"
stroke="none" stroke-opacity="0"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke-miterlimit="4"
cx="653"
cy="519"
r="6"
transform="matrix(1.00000000,0.00000000,0.00000000,1.00000000,0.00000000,0.00000000)"
fill-rule="evenodd"></circle>
<circle fill="rgb(70, 230, 255)"
fill-opacity="0.8"
stroke="none"
stroke-opacity="0"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke-miterlimit="4"
cx="764"
cy="533"
r="6"
transform="matrix(1.00000000,0.00000000,0.00000000,1.00000000,0.00000000,0.00000000)"
fill-rule="evenodd"></circle>
</g>
这里简单解释下,前端渲染的逻辑。
首先,每个符号化的图层都会使用 <g> 标签来承载该图层中的几何要素。
其次,每个几何要素也会通过不同的标签在前端进行展示,例如上述代码中 <circle> 标签很明显是一个圆形符号,并且可以在标签中看到许多属性信息,例如:
“fill”代表符号的颜色;
“fill-opacity”代表符号的透明度;
“cx”代表屏幕 x 坐标值;
“cy”代表屏幕 y 坐标值;
这里 “cx” 与 “cy” 虽然不会去修改,但是我在测试时发现,当“cx=150”,“cy=0”时,符号的圆心位于屏幕左上角顶点。也就是说未来如果大家想要用代码强行修改一个 <circle> 标签的位置时,可能需要考虑到 x 的偏移值。大家如果发现了这个问题的原因,欢迎评论留言。
上述属性与我们做动效无关,我们能做动效的关键在于控制 <circle> 的半径大小,也就是 “r” 属性。
动效
动效使用 CSS 来写:
@keyframes Warning {
0% {
opacity: 1
}
50% {
r: 12;
opacity: .5
}
100% {
opacity: 1
}
}
增加效果
下一步我们需要做的只是用 jQuery 帮我们找到所有几何要素,然后给每个几何要素标签加上动画属性:
map.on('extent-change',function(){
setTimeout(function(){
for(var i=0;i<$('#map').find('circle').length;i++){
$('#map').find('circle')[i].style.animation = "Warning 1s cubic-bezier(0.26, 0.04, 1, 0.67) 0s infinite normal none running";
$('#map').find('circle')[i].style.animationDelay = Math.random()+'s'
}
},1000)
这里有 3 个细节需要说明:
使用地图缩放监听事件,保证每次地图范围变动,都给每个符号加上动效。
延迟 1 秒执行的原因是,如果地图缩放就立即执行赋动效语句会无效,因为在每次缩放过程中几何对象会重新渲染,因此延迟 1 秒保证所有点已重绘完成,大家可以自行修改时间,如果有更优方案,欢迎评论留言。
为优化每个点位的动效渐隐渐现效果,给每个符号加上随机动画延迟。
弯路
在最开始,我以为可以使用样式的 scale 属性来控制圆圈符号的大小,后来测试发现完全错误,缩放会产生偏移和运动,大家可以动手在 Chrome 里尝试下最初的脑洞会带来什么样的效果。
拓展联想
既然圆形符号可以用代码进行修改,那其他类型的符号同理也可以通过属性控制来修改样式。
接下来我会再更新一篇对地图轮廓多边形的控制实操。
大家如有更好的想法,欢迎在评论留言。
ArcGIS API For Javascript :如何在地图上做出点位脉冲闪烁的效果的更多相关文章
- ArcGIS API for Silverlight 实现修改地图上的工程点位置
原文:ArcGIS API for Silverlight 实现修改地图上的工程点位置 #region 处理工程点点击编辑相关事件 public Graphic editgraphics = null ...
- ArcGIS api for javascript——查询没有地图的数据
描述 本例展示了用户能够从没有显示服务的地图服务查询数据.大部分地图服务包含属性信息的数据集,数据集能够被查询并显示在一个简单的列或表格里. 本例按提供的州名称查询USA人口普查数据,然后显示关于州的 ...
- Arcgis api for javascript学习笔记(3.2版本) - 匀速行驶轨迹动画效果
一.前言 有这样一个需求:已知某条线上的n个点的经纬度数组 ,实现物体运行轨迹. 如果这些点中两个距离很近,那么我们可以用一个定时器在地图上每次重新画一个点,这样肉眼看到这个点上的运动效果,如下图代码 ...
- ArcGIS API For JavaScript 加载地图,设置地图中心点
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- ArcGIS API for JavaScript使用中出现的BUG(1)
本人在使用ArcGIS API for JavaScript开发一个地图的搜索框时,总是出现一个BUG.如图所示: 搜索框总是出不来. 该引用的也引用了,找了半天终于解决,是因为路径没有定义详细. 应 ...
- ArcGIS API for JavaScript根据两个点坐标在地图上画线
ArcGIS API for JavaScript根据两个点坐标在地图上画线比如说a(xxxx,xxxxx),b(xxxx,xxxxx).利用这两个点画一条线 var polyline = new e ...
- 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 ...
- arcgis api for javascript本地部署加载地图
最近开始学习arcgis api for javascript,发现一头雾水,决定记录下自己的学习过程. 一.下载arcgis api for js 4.2的library和jdk,具体安装包可以去官 ...
- ArcGis API for JavaScript学习——加载地图
ArcGis API for JavaScript开发笔记——加载地图 在这个例子中使用的离线部署的API(请参见 http://note.youdao.com/noteshare?id=f42865 ...
随机推荐
- 基于canvas实现钟表
原理说明 1.通过arc方法实现钟表外环: 2.通过line实现钟表时针,分针,秒针和刻度标志的绘制,基于save和restore方法旋转画布绘制不同角度的指针: 3.通过font方法实现在画布上绘制 ...
- php注释的作用是什么?
php注释的作用 1.解释代码功能: 2.调试程序. 说明:在代码中进行注释是很有必要的,规范的注释使的源代码更易于人类理解,可以帮助我们理解别人或者自己以前编写的代码. php怎么添加注释? 1.用 ...
- amoeba-mysql
配置完成后无法连接 Could not create a validated object, cause: ValidateObject failed 查看logs/下面的 messageHandle ...
- Java 异常(二) 自定义异常
上篇文章介绍了java中异常机制,本文来演示一下自定义异常 上篇文章讲到非运行时异常和运行时异常,下面我们来看一下简单实现代码. 首先,先来看下演示目录 非运行时异常 也称 检查时异常 public ...
- Spring Cloud Feign初接触
最近想使用下Feign,然后简单了解了一下,简单的搭了个demo. 首先简单介绍一下Feign,它是一个Http请求客户端,类似HttpClient,具体里面实现还没去看,知道它是一个请求客户端就行, ...
- Centos7 基础命令与软件的安装
本人小白一枚正在老男孩培训,所以从现在开始把我学到的知识都分享给大家,该随笔会一直更新 centos7基础命令与软件 ps:命令与参数之间必须加上空格,安装成功时最后一行会有 Complete! ...
- 从函数计算架构看 Serverless 的演进与思考
作者 | 杨皓然 阿里巴巴高级技术专家 导读:云计算之所以能够成为 DT 时代颠覆性力量,是因为其本质是打破传统架构模式.降低成本并简化体系结构,用全新的思维更好的满足了用户需求.而无服务器计算(S ...
- Wininet-Post
#include "stdafx.h"#include <Windows.h>#include <wininet.h>#include <iostre ...
- 学习笔记55_Nhibernate
另一种ORM框架 1.添加各种dll 2.添加配置信息,根据文档直接复制粘贴.config //一般下载Nhibernate-3.0.0.Alpha2-bin包,会有Configuration_Tem ...
- [考试反思]0803NOIP模拟测试12:偿还
嗯,rank5.没什么可评价的,高不算高低不算低. 一套好题,被我浪费了. 离上面280的大神差的有点远. 分机房的绝响就要来临. 越来越感觉自己变菜了,整体的能力水平在下滑. 说的不只是考试,包括平 ...