由于项目需要,需要自定义滑块。为此记录如下:

<div id="map" class = "map">
<div id = "zoombar" class="zoombar">
<div style="position:absolute;width:63px;height:62px;">
<img style="position:relative;width:63px;height:62px" src ="img/compass.png"/>
<div id="Control.PanZoomBar.panup" style="position: absolute; left: 24px; top: 5px; width: 16px; height: 16px; cursor: pointer;" class="olButton olpanup" onclick ="panDirection('north')">
<img id="Control.PanZoomBar.panup_innerImage" style="position: relative; width: 16px; height: 16px;" class="olAlphaImg" src="img/north-mini.png"></div>
<div id="Control.PanZoomBar.panleft" style="position: absolute; left: 6px; top: 23px; width: 16px; height: 16px; cursor: pointer;" class="olButton olpanleft" onclick ="panDirection('west')">
<img id="Control.PanZoomBar.panleft_innerImage" style="position: relative; width: 16px; height: 16px;" class="olAlphaImg" src="img/west-mini.png"></div>
<div id="Control.PanZoomBar.panright" style="position: absolute; left: 42px; top: 23px; width: 16px; height: 16px; cursor: pointer;" class="olButton olpanright" onclick ="panDirection('east')">
<img id="Control.PanZoomBar.panright_innerImage" style="position: relative; width: 16px; height: 16px;" class="olAlphaImg" src="img/east-mini.png"></div>
<div id="Control.PanZoomBar.pandown" style="position: absolute; left: 24px; top: 39px; width: 16px; height: 16px; cursor: pointer;" class="olButton olpandown" onclick ="panDirection('south')">
<img id="Control.PanZoomBar.pandown_innerImage" style="position: relative; width: 16px; height: 16px;" class="olAlphaImg" src="img/south-mini.png"></div>
</div>
<div id="Control.PanZoomBar.zoomin" style="position: absolute; left: 24px; top: 63px; width: 16px; height: 16px; cursor: pointer;" class="olButton olzoomin" onclick ="ZoomOut()">
<img id="Control.PanZoomBar.zoomin_innerImage" style="position: relative; width: 16px; height: 16px;" class="olAlphaImg" src="img/zoom-plus-mini.png"></div>
<div style="background-image: url(&quot;img/zoombar.png&quot;); left: 24px; top: 79px; width: 16px; height: 110px; position: absolute; cursor: pointer;" id="OpenLayers_Control_PanZoomBar_ZoombarOpenLayers.Map_7" class="olButton olPanZoomBar">
<div id="Control.PanZoomBar.OpenLayers.Map_7" style="position: absolute; left: 0px; top: 46px; width: 16px; height: 16px; cursor: move;">
<img id="Control.PanZoomBar.OpenLayers.Map_7_innerImage" style="position: relative; width: 16px; height: 16px;" class="olAlphaImg" src="img/slider.png"></div>
</div>
<div id="Control.PanZoomBar.zoomout" style="position: absolute; left: 24px; top: 189px; width: 16px; height: 16px; cursor: pointer;" class="olButton olzoomout" onclick="ZoomIn()">
<img id="Control.PanZoomBar.zoomout_innerImage" style="position: relative; width: 16px; height: 16px;" class="olAlphaImg" src="img/zoom-minus-mini.png"></div>
</div>
<div id = "overly" class="overlay"></div>
</div>

然后js代码:

  //放大
function ZoomOut() {
view.setZoom(view.getZoom() +1);
}
//缩小
function ZoomIn() {
view.setZoom(view.getZoom() - 1);
} //地图平移
function panDirection(direction) {
var lonlat = 0.06;//平移系数
var pan = ol.animation.pan({
duration: 250,//动画的持续时间,以毫秒为单位。默认是1000。
source: (view.getCenter())
});
map.beforeRender(pan);
var mapCenter = view.getCenter(); switch (direction) {
case "north":
mapCenter[1] += lonlat * Math.pow(2, 30 - view.getZoom());
break;
case "south":
mapCenter[1] -= lonlat * Math.pow(2, 30 - view.getZoom());
break;
case "west":
mapCenter[0] -= lonlat * Math.pow(2, 30 - view.getZoom());
break;
case "east":
mapCenter[0] += lonlat * Math.pow(2, 30 - view.getZoom());
break;
}
//更改center 实现地图平移
view.setCenter(mapCenter);
//对地图进行渲染
map.render();
} //获取滑块div
var zoombardiv = document.getElementById("Control.PanZoomBar.OpenLayers.Map_7");
//得到滑块top值
var high_top = parseInt(document.getElementById("Control.PanZoomBar.OpenLayers.Map_7").style.top);
//定义滑块初始值
var y1;
//滑块鼠标按下事件
zoombardiv.onmousedown = function (e1) {
y1 = e1.clientY;
//鼠标按下事件下触发鼠标移动事件,使滑块进行移动
document.onmousemove = function (e2) {
var diffY = e2.clientY - y1;
var realY = high_top + diffY;
document.getElementById("Control.PanZoomBar.OpenLayers.Map_7").style.top = realY + "px";
//根据滑块top值计算地图缩放zoom值
var realzoom = Math.ceil(18 - 18 * realY / (110 - 16));//此处的18为地图最大的放大级数,110为滑块轴的高度,16位滑块的高度单位为px,对计算出来的小数向上取整
//设置view zoom值
view.setZoom(realzoom); }
}
//鼠标抬起事件
document.onmouseup = function () {
//移除鼠标移动事件
document.onmousemove = null;
}
//view上绑定zoom改变事件
            view.on('change:resolution', function (e) {
                var zommleve = view.getZoom();
                var high = (18 - zommleve) * (110 - 16) / 18;//此处的18为地图最大的放大级数,110为滑块轴的高度,16位滑块的高度
                document.getElementById("Control.PanZoomBar.OpenLayers.Map_7").style.top = high+"px";
            });

效果如下:

OpenLayers3 实现自定义放大缩小滑块,自定义方向按钮的更多相关文章

  1. 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果

    首先呢,还是一贯作风,我们先来看看众多应用中的示例:(这种效果是很常见的,可以说应用的必须品.)                搜狐客户端                               ...

  2. 自定义mousewheel事件,实现图片放大缩小功能实现

    本文是承接 上一篇的<自定义鼠标滚动事件>  的基础上实现的,建议大家先看一下上一篇的mousewheel的实现,再浏览下文: 上篇中我们介绍到: $element.mousewheel( ...

  3. PhotoView实现图片随手势的放大缩小的效果

    项目需求:在listView的条目中如果有图片,点击条目,实现图片的放大,并且图片可以根据手势来控制图片放大缩小的比例.类似于微信朋友圈中查看好友发布的照片所实现的效果. 思路是这样的:当点击条目的时 ...

  4. Android 手势滑动,多点触摸放大缩小图片

    效果展示: 基本思路: <1>首先写一个图片控制类ImageControl,实现对图片控制的的基本操作,我们的图片控制类ImageControl是继承自ImageView自定义的视图: & ...

  5. Android DIY之路 (一) 指定区域多图片合成 放大 缩小 镜像 旋转 等(转)

    惯例先看效果图 // 注意做类似这种模板功能时候 方位由后台数据提供,这里我们用假数据 4个点 或者xy 加区域来做示例 //一开始我们公司用的是透明盖住 操作图片 但发现 局限性较大.后来直接限定区 ...

  6. javascript仿新浪微博图片放大缩小及旋转效果

    javascript仿新浪微博图片放大缩小及旋转效果 经常看到新浪微博里有图片放大缩小旋转效果,感觉效果还不错,所以就想试着做一个类似的demo出来,至于旋转对于IE可以用滤镜来解决,标准的浏览器可以 ...

  7. Android多点触控技术,实现对图片的放大缩小平移,惯性滑动等功能

    首先推荐一下鸿洋大大的打造个性的图片预览与多点触控视频教程,这套教程教我们一步一步实现了多点触控实现对图片的平移和缩放的功能.这篇文章我将在鸿洋大大的基础之上做了一些扩展功能: 1.图片的惯性滑动 2 ...

  8. QT5 OpenGL (六, 键盘事件, 开关灯,放大缩小综合运用)

    概要 实例效果图 立体图放大图 立体图缩小图 不加矢量开灯图 不加矢量关灯图 加矢量关灯图1 加矢量关灯图2 部分代码展示 主要内容解析 QT键盘事件 立体图形的放大和缩小 上下左右键以及A键D争键控 ...

  9. 【开源】专业K线绘制[K线主副图、趋势图、成交量、滚动、放大缩小、MACD、KDJ等)

    这是一个iOS项目雅黑深邃的K线的绘制. 实现功能包括K线主副图.趋势图.成交量.滚动.放大缩小.MACD.KDJ,长按显示辅助线等功能 预览图 最后的最后,这是项目的开源地址:https://git ...

随机推荐

  1. leetcode 106. 从中序与后序遍历序列构造二叉树(Construct Binary Tree from Inorder and Postorder Traversal)

    目录 题目描述: 示例: 解法: 题目描述: 根据一棵树的中序遍历与后序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 示例: 给出 中序遍历 inorder = [9,3,15,20,7] ...

  2. oracle调试存储过程不进去

    右击存储过程,选中Add debug information即可

  3. [agc008f] Black Radius 树形dp

    Description ​ 给你一棵有NN个节点的树,节点编号为11到NN,所有边的长度都为11 ​ "全"对某些节点情有独钟,这些他喜欢的节点的信息会以一个长度为NN的字符串ss ...

  4. 在Delphi中获取和修改文件的时间

    转载自 http://www.cnblogs.com/jieke/archive/2013/01/11/2855782.html 本文介绍了在Delphi中利用系统函数和Windows API函数调用 ...

  5. Pycharm使用的一些问题!!!

    1.pycharm如何更改主题.如何更改字体的大小? 2.pycharm如何import第三方库? 1.更改主题和字体大小 主题变暗,字体变大! 2.如何导入第三方库?

  6. AtCoder - 2565 枚举+贪心

    There is a bar of chocolate with a height of H blocks and a width of W blocks. Snuke is dividing thi ...

  7. 批量改ID 行形式

    update [Temp_Sql] set ID(字段) = (274+ID(字段))  字段+字段形式 可以以行形式批量修改

  8. 本地localhost:端口号(自己设置的Apache的端口号)打不开问题解决了!开心、哭泣

    想不来自己有多蠢!历经4个月再没学,刚开始xampp的端口问题解决不了,系统竟然会自动改回去端口数据(哭晕) 后来一直显示Apache端口80占用,各种百度之后发现单纯浏览器都访问不了localhos ...

  9. java 关于数组 计数的面试题

    题目:用面向对象的方法求出数组中重复 value 的个数 :  1  出现:1 次3 出现:2 次8 出现:3 次2 出现:4 提供数组 :  int[] arr = {1,4,1,4,2,5,4,5 ...

  10. ubuntu画面延迟问题解决

    新配的电脑,安装ubuntu16.04以后,出现画面延迟的问题,尤其浏览网页的时候画面十分卡顿.用free命令查看过可用内存6.多G,经过询问大概是显卡问题,然后在https://ubuntuforu ...