H5 canvas 实现类似于导航效果的线
最近做项目时遇到得问题,要在不使用任何API的情况下完成类似地图的所有功能,包括放大、缩小、滑动、等。其中显示路线或导航路线的功能就用到了<canvas>这个标签。并用特殊的技巧画出了还不错的效果,并将封装好js文件分享出来,给需要的人提供一种思路。
项目中应用效果展示:
本文章不提供基础canvas绘画教学~!
1.核心思想
灵魂画手上线233 |
第1步:画出一条用于衬托的底部直线
第2步:重新定位canvas(画布)位置 将其基于线的起点 注意是移动画布左上角的基点,方法是translate(X, Y);
第3步:旋转虚拟画布
可以看到,此时相对于虚拟画布来说X轴已经是相对于真实画布上得直线来说是重叠的,此时使用js绘画是使用虚拟画布的绘画,绘画结果会映射到真实画布上!也就是说现在在js中沿画布X轴画线,映射到真实画布上将是与绿色线条重叠的线条。
第4步:沿虚拟画布X轴循环贴箭头图片。 将准备好的箭头图标沿X轴使用drawImage()循环贴入画布中,并且要注意要有适当间隔。
第5部:重置画布到初始位置,一次绘画结束
2.Road.js的使用
这个文件是a自己封装得文件,需要在script中引用↓
<script src="./road.js"></script>
并且在body中至少存在以下2个标签
<!--由于需要一个img的dom 需要手动创建一个完整的img标签
一般用 display:none 将其隐藏-->
<img id="map_roadIcon" src="./images/road_icon.png" alt="">
<!--要操作的画布-->
<canvas id="map_drawing" width="500" height="500"></canvas>
在js中使用
<script type="text/javascript">
// new一个road对象 这里使用jQuery取dom得方法 也可以使用原生取dom得方法
var road = new Road( $("#map_drawing").get(0), $("#map_roadIcon").get(0));
// 起 起 终 终
// 点 点 点 点 路 间
// X Y X Y 宽 隔
road.paintArrayRoad(10, 20, 480, 20, 20, 60); //默认底色绿色
road.paintArrayRoad(10, 180, 480, 180, 20, 60, "#FF000d"); //更改底色
</script>
效果:
文件中有标详细注解这里就不再赘述
3.文件下载
https://download.csdn.net/download/GAA775/19576616