自定义百度地图导航控件

百度地图js版 的导航控件按钮,在webapp有几点问题

1 不好点击,也就是点不中

2 不能置灰,也就是说当缩小到最小的时候,按钮应该为灰色,反之放大到最大也该为灰色

基于以上2点,自定一下,其实很简单,目的在于可以自己来控制

代码如下

  1 /**
  2      *@ NavControl
  3      */
  4     var NavControl =
  5         /**
  6          * NavControl
  7          * @class
  8          * @constructor
  9          * @param {Map} map 地图的一个实例。
 10          * @remark
 11          *
 12          */
 13         BMapLib.NavControl = function (options) {
 14             this.defaultAnchor = options.anchor;
 15             this.defaultOffset = options.offset || new BMap.Size(10, 10);
 16             this.zoom_btn=null;
 17             this.zoomout_btn=null;
 18         };
 19
 20
 21         NavControl.prototype = new BMap.Control();
 22
 23         NavControl.prototype.initialize = function(map) {
 24             this.map = map;
 25             var that = this;
 26             map.addEventListener(‘zoomend‘, function () {
 27                 if(that.map.getZoom()>=18){
 28                     that.removeClass(that.zoom_btn,‘blue_off‘);
 29                     that.removeClass(that.zoom_btn,‘blue_disable‘);
 30                     that.addClass(that.zoom_btn,‘blue_disable‘);
 31                 }else if(that.map.getZoom()<=3){
 32                     that.removeClass(that.zoomout_btn,‘blue_off‘);
 33                     that.removeClass(that.zoomout_btn,‘blue_disable‘);
 34                     that.addClass(that.zoomout_btn,‘blue_disable‘);
 35                 }else{
 36                     that.removeClass(that.zoomout_btn,‘blue_disable‘);
 37                     that.removeClass(that.zoom_btn,‘blue_disable‘);
 38                     that.addClass(that.zoom_btn,‘blue_off‘);
 39                     that.addClass(that.zoomout_btn,‘blue_off‘);
 40                 }
 41             });
 42
 43
 44             var container = document.createElement(‘div‘);
 45             container.id=‘zoom-btn-container‘;
 46
 47             var zoom_btn=this.zoom_btn = document.createElement(‘div‘);
 48             zoom_btn.className+=‘zoom_btn  zoom_btn_in‘;
 49             zoom_btn.style.cssText += this.buildZoomBtnIn();
 50             zoom_btn.addEventListener(‘click‘,function(){
 51                 if(that.map.getZoom()<=18){
 52                     that.map.zoomIn();
 53                 }
 54             });
 55             container.appendChild(zoom_btn);
 56
 57             var zin = document.createElement(‘div‘);
 58             zin.className+=‘zin icon -plus‘;
 59             zoom_btn.appendChild(zin);
 60
 61             var zoomout_btn =this.zoomout_btn= document.createElement(‘div‘);
 62             zoomout_btn.className+=‘zoom_btn blue_off zoom_btn_out‘;
 63             zoomout_btn.addEventListener(‘click‘,function(){
 64                 if(that.map.getZoom()>3){
 65                     that.map.zoomOut();
 66                 }
 67             });
 68             container.appendChild(zoomout_btn);
 69
 70             var zout = document.createElement(‘div‘);
 71             zout.className+=‘zout icon -minus‘;
 72             zoomout_btn.appendChild(zout);
 73
 74
 75
 76             var div=document.createElement(‘div‘);
 77             div.appendChild(container);
 78             this.map.getContainer().appendChild(div);
 79             return div;
 80         };
 81
 82
 83
 84
 85
 86         NavControl.prototype.buildZoomBtnIn=function(){
 87             var csstext = [];
 88             csstext.push(‘font-size: 11px‘);
 89             csstext.push(‘line-height: 18px‘);
 90             return csstext.join(‘;‘);
 91         };
 92
 93         NavControl.prototype.buildZoomBtnOut=function(){
 94             var csstext = [];
 95             csstext.push(‘font-size: 11px‘);
 96             csstext.push(‘line-height: 18px‘);
 97             return csstext.join(‘;‘);
 98         };
 99
100         NavControl.prototype.hasClass = function (obj, cls) {
101             return obj.className.match(new RegExp(‘(\\s|^)‘ + cls + ‘(\\s|$)‘));
102         };
103
104         NavControl.prototype.addClass = function (obj, cls) {
105             if (!this.hasClass(obj, cls)) obj.className += " " + cls;
106         };
107
108         NavControl.prototype.removeClass = function (obj, cls) {
109             if (this.hasClass(obj, cls)) {
110                 var reg = new RegExp(‘(\\s|^)‘ + cls + ‘(\\s|$)‘);
111                 obj.className = obj.className.replace(reg, ‘ ‘);
112             }
113         };

其中css代码如下

 1 @charset "UTF-8";@font-face {
 2     font-family: mwa;
 3     src: url(http://map.baidu.com/mobile/simple/static/styleguide/icons/mwa_8077edf.eot);
 4     src: url(http://map.baidu.com/mobile/simple/static/styleguide/icons/mwa_f9e0ebd.woff) format("woff"),url(http://map.baidu.com/mobile/simple/static/styleguide/icons/mwa_77e7dd3.ttf) format("truetype")
 5 }
 6
 7 #zoom-btn-container {
 8     -webkit-box-shadow: 1px 1px 2px rgba(0,0,0,.4);
 9     background: rgba(255,255,255,.8);
10     border-radius: 3px;
11     background-image: url(http://api0.map.bdimg.com/images/geolocation-control/mobile/gradient-bg-1x64.png)
12 }
13
14 .bl_btn {
15     background: url(http://s1.map.bdimg.com/mobile/simple/static/common/widget/apiext/images/result_bgs_b6bbaa6.png) 0 0 no-repeat;
16     -webkit-background-size: 58px 160px
17 }
18
19 .zoom_btn {
20     display: -webkit-box;
21     -webkit-box-align: center;
22     -webkit-box-pack: center;
23     -webkit-box-sizing: border-box
24 }
25
26 .zoom_btn {
27     height: 40px;
28     width: 48px;// 宽带加大在于容易触控到
29 }
30
31 .zoom_btn_in {
32     margin-bottom: 5px;
33     border-bottom: 1px solid #ececec
34 }
35
36 .zoom_btn_on {
37     background-color: #eee
38 }
39
40 .zin,.zout {
41     width: 16px;
42     height: 16px;
43     font-size: 16px;
44     color: #686A5B
45 }
46
47 .blue_off.zin{
48   opacity: .8
49 }
50 .blue_off.zout{
51   opacity: .8
52 }
53 .blue_disable  {
54     opacity: .33
55 }
56
57 .blue_disable {
58     opacity: .33
59 }
60
61 .icon.-plus:before {
62     content: "\e60d";
63 }
64
65 .icon.-minus:after {
66     content: "\e60f";
67 }
68
69 .icon {
70     display: inline-block;
71     font-family: mwa;
72     font-weight: 400;
73     font-style: normal;
74     font-variant: normal;
75     line-height: 1;
76     text-transform: none;
77     -webkit-font-smoothing: antialiased;
78     font-size: 16px;
79     width: 1em;
80     height: 1em;
81 }

注意这里面的 “+”  “-”号使用了自定义的图标字体

使用

 this.NavControl = new BMapLib.NavControl({anchor: BMAP_ANCHOR_BOTTOM_RIGHT});
 that.Map.addControl(this.NavControl);
时间: 2024-10-09 22:44:44

自定义百度地图导航控件的相关文章

南沙政府应急系统之GIS一张图(arcgis api for flex)讲解(四)地图导航控件模块

config.xml文件的配置如下: <widget left="10" top="50" config="widgets/Navigation/NavigationWidget.xml" url="widgets/Navigation/NavigationWidget.swf" /> 源代码目录如下: 地图导航控件模块的源代码原理解析,详细的代码在下载的开源flexviewer自带的: 1.地图缩小 2.地图放大

openlayers入门开发系列之地图导航控件篇

本篇的重点内容是利用openlayers来实现了地图导航控件功能,效果图如下: 实现思路如下: 创建一个地图控件基类,除了本篇的地图导航控件继承这个地图控件基类之外,后续的其他地图控件也是继承该基类 地图控件基类中创建地图导航控件函数 地图导航控件类 最后,地图导航控件初始化调用 详细的实现过程见:这里 原文地址:https://www.cnblogs.com/giserhome/p/9550661.html

百度地图 添加控件

<!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script typ

【完全开源】百度地图Web service API C#.NET版,带地图显示控件、导航控件、POI查找控件

目录 概述 功能 如何使用 参考帮助 概述 源代码主要包含三个项目,BMap.NET.BMap.NET.WindowsForm以及BMap.NET.WinformDemo. BMap.NET 对百度地图Web Service API 的一些封装,每个接口返回的都是JObject类型(参见Json.NET): BMap.NET.WindowsForm(开始少写了一个s ,后来一直没改) 提供一系列可以在Winform中使用的控件,包括地图显示控件.导航控件.POI查找控件等等: BMap.NET.

【百度地图API】建立全国银行位置查询系统(二)——怎样为地图添加控件

原文:[百度地图API]建立全国银行位置查询系统(二)--怎样为地图添加控件 <摘要>你将在第二章中学会以下知识: 使用手写代码的利器——notepad++: 如何为地图添加控件——鱼骨.鹰眼.比例尺.2D3D转换控件.版权控件. ----------------------------------------------------------------------------------------------------------------- 一.安装配置notepad++ 为什么

自定义下拉刷新控件

一.功能效果 1.在很多app中,在信息展示页面,当我们向下拖拽时,页面会加载最新的数据,并有一个短暂的提示控件出现,有些会有加载进度条,有些会记录加载日期.条目,有些还带有加载动画.其基本实现原理都相仿,本文中将探讨其实现原理,并封装出一个简单的下拉刷新控件 2.自定义刷新工具简单的示例 二.系统提供的下拉刷新工具 1.iOS6.0以后系统提供了自己的下拉刷新的控件:UIRefreshControl .例如,refreshControl,作为UITableViewController中的一个属

使用 ViewPager 和 RadioGroup 封装的一个导航控件

import android.animation.ObjectAnimator; import android.content.Context; import android.graphics.drawable.Drawable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager;

使用VideoView自定义一个播放器控件

介绍 最近要使用播放器做一个简单的视频播放功能,开始学习VideoView,在横竖屏切换的时候碰到了点麻烦,不过在查阅资料后总算是解决了.在写VideoView播放视频时候定义控制的代码全写在Actvity里了,写完一看我靠代码好乱,于是就写了个自定义的播放器控件,支持指定大小,可以横竖屏切换,手动左右滑动快进快退.好了,下面开始. 效果图 效果图有点卡,我也不知道为啥..... VideoView介绍 这个是我们实现视频播放最主要的控件,详细的介绍大家百度就去看,这里介绍几个常用的方法. 用于

C#GDI+自定义绘制曲线图表控件DataChart 简单实现

C#GDI+自定义绘制曲线图表控件DataChart 这里只说明在计算刻度和曲线绘制的时候 只提供思路,只是做了下简单的计算,不喜勿喷 还望见谅,高手直接飘过吧.这个要做好,还是需要研究研究算法的,比如刻度随着控件的大小发生改变的时候计算不同的值,根据刻度范围来计算刻度以及刻度值等,这里没有研究,制作简单的绘制,让其知道自定义曲线控件的画法,对于新手来讲应该是有一些帮助的.有时间我把研究过后的算法加上做一个通用可靠一点的控件分享. 例子如下图所示 首先百度一张图片,就按照它的样子来绘制 该图片链