自定义地图鱼骨缩放控件

2023-11-05 20:10

本文主要是介绍自定义地图鱼骨缩放控件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

地图的展示都会涉及到级别的切换,百度、google、esri地图服务、bing等,都有自己的鱼骨控件实现地图级别的设置。
    map和control互动的控件,原理为:
                    

  • 点击红框内位置,滑块切换级别定位,调用zoom,然后map跟着进行缩放
  • 拖动滑块,mouseup时滑块切换级别定位(滑动效果),调用zoom,然后map跟着进行缩放
  • map缩放,获取map的缩放级别level,然后对控件进行相应的修改(滑动至相应级别)
最近工作中遇到鱼骨控件的问题,做以下分析。
1. 制作鱼骨控件的方法
1). jquery UI的库,早期计划使用该方法,但考虑到库过大最后放弃;
2). html5控件range,目前使用该方法,绑定change事件实现level的切换,当然不支持拖动效果,其他还是ok的,但是ie等浏览器不支持,所以只是 暂时可行;              
    $("<input type=\"range\"/>").css("width", "20px").css("height", "200px").attr("max", lods.length - 1).attr("min", 0).attr("step", 1).attr("value", level).css("-webkit-appearance", "slider-vertical").bind("change", function (evt, ul) {              })

   3).从网上找第三方控件包装后,修改样式等可以使用,但是发现找不到;

  4).自定义鱼骨控件,已经实现了,下面分享一些心得。 

 

2.自定义鱼骨控件的规则
滑块沿线拖动
鱼骨有刻度(间隔固定&总长度根据地图lods可变)
拖动过程中无级
停止时有级
 3.基本思路
1). 红色边框定义为<div></div>,绑定mousedown事件、mouseup事件。
2). 滑块为<img/>元素,绑定mousedown事件。
3). 地图鱼控件要互动,即地图缩放时控件重新定位、控件有新位置时地图做相应缩放。
4). body绑定mousemove和mouseup事件,因为当事件为滑块拖动时,mousedown触发后,只要没有处于move状态没有up,无论鼠标在页面的什么位置都应该能监听到滑块的移动事件。(具体可以参考百度、谷歌地图效果)
5). 记录鼠标的offsetX、offsetY和pageX、pageY,来计算滑块的新位置。
4.解决方案
1)点击红色div,滑块定位
div绑定mousedown、mouseup,mousedown时记录鼠标点击处的offsetY位置和pageY1;
body的mouseup判断鼠标up的点pageY2与pageY1的差值,因为红色div的长度是根据lods生成的,因而判断pageY差值和滑块初始位置的关系, 使用offsetY判断最适级别, 就可以区分三种状态:滑块在最大级别、最小级别、中间某级别,分别根据滑块的absolute定位的top属性来定义位置。
 2)滑块拖动后定位
滑块绑定mousedown事件,记录当前滑块位置和pageY1
body的mousemove是事件,根据当前鼠标点pageY2和pageY1差值,根据此差值和最初滑块位置区分三种状态,并绝对定位滑块位置。
ps:
div相对定位&滑块绝对定位;
div的宽度为23px;以小图片 根据lods填充,图片是一个对称图形,保证填充时鱼骨连续; 
  img滑块图片 ;
此处只介绍思路,就不附代码了,有不详尽的可以再作讨论!

这篇关于自定义地图鱼骨缩放控件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/352188

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

Oracle type (自定义类型的使用)

oracle - type   type定义: oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要特殊的格式, 如将name定义为(firstname,lastname)的形式,我们想把这个作为一个表的一列看待,这时候就要我们自己定义一个数据类型 格式 :create or repla

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

HTML5自定义属性对象Dataset

原文转自HTML5自定义属性对象Dataset简介 一、html5 自定义属性介绍 之前翻译的“你必须知道的28个HTML5特征、窍门和技术”一文中对于HTML5中自定义合法属性data-已经做过些介绍,就是在HTML5中我们可以使用data-前缀设置我们需要的自定义属性,来进行一些数据的存放,例如我们要在一个文字按钮上存放相对应的id: <a href="javascript:" d

一步一步将PlantUML类图导出为自定义格式的XMI文件

一步一步将PlantUML类图导出为自定义格式的XMI文件 说明: 首次发表日期:2024-09-08PlantUML官网: https://plantuml.com/zh/PlantUML命令行文档: https://plantuml.com/zh/command-line#6a26f548831e6a8cPlantUML XMI文档: https://plantuml.com/zh/xmi

argodb自定义函数读取hdfs文件的注意点,避免FileSystem已关闭异常

一、问题描述 一位同学反馈,他写的argo存过中调用了一个自定义函数,函数会加载hdfs上的一个文件,但有些节点会报FileSystem closed异常,同时有时任务会成功,有时会失败。 二、问题分析 argodb的计算引擎是基于spark的定制化引擎,对于自定义函数的调用跟hive on spark的是一致的。udf要通过反射生成实例,然后迭代调用evaluate。通过代码分析,udf在

小程序button控件上下边框的显示和隐藏

问题 想使用button自带的loading图标功能,但又不需要button显示边框线 button控件有一条淡灰色的边框,在控件上了样式 border:none; 无法让button边框隐藏 代码如下: <button class="btn">.btn{border:none; /*一般使用这个就是可以去掉边框了*/} 解决方案 发现button控件有一个伪元素(::after