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 ...
随机推荐
- fread优化读入
inline char nc() { static const int BS = 1 << 22; static unsigned char buf[BS],*st,*ed; if(st ...
- 20.Linux进程管理-企业案例
1.管理进程状态 当程序运行为进程后,如果希望停止进程,怎么办呢? 那么此时我们可以使用linux的kill命令对进程发送关闭信号.当然除了kill.还有killall,pkill 1.使用kill ...
- 程序员修神之路--为什么有了SOA,我们还用微服务?
菜菜哥,我最近需要做一个项目,老大让我用微服务的方式来做 那挺好呀,微服务现在的确很流行 我以前在别的公司都是以SOA的方式,SOA也是面向服务的方式呀 的确,微服务和SOA有相同之处 面向服务的架构 ...
- MyBatis 示例-联合查询
简介 MyBatis 提供了两种联合查询的方式,一种是嵌套查询,一种是嵌套结果.先说结论:在项目中不建议使用嵌套查询,会出现性能问题,可以使用嵌套结果. 测试类:com.yjw.demo.JointQ ...
- 关于举办【福州】《K8S社区线下技术交流会》的问卷调查
近年来,容器.Kubernetes.DevOps.微服务.Serverless等一系列云原生技术受到越来越多的关注,云原生为企业数字化转型提供了创新源动力,基于云原生技术构建企业技术中台在各行业也 ...
- 使用zrender.js绘制体温单(2)
今天我们来画折线图 效果图 以下为模拟数据 [{"time":19,"text":"入\n院\n19\n时\n11\n分","po ...
- Handler的postDelayed(Runnable, long)
handler.postDelayed(myRunnable,1000)是为了轮播图片,每隔1000ms后执行一次run方法,实现轮播实例如下: public void MesageColse(){ ...
- Unity 单例模式
明天十一放假,今天不知什么原因看到一篇unity单例模式的介绍,瞬间来了戾气. (一)最简单的单利 public class WebRequestUtility : MonoBehaviour { p ...
- jquery复习
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- SOLID原则、设计模式适用于Python语言吗
在阅读 clean architecture的过程中,会发现作者经常提到recompile redeploy,这些术语看起来都跟静态类型语言有关,比如Java.C++.C#.而在我经常使用的pytho ...