leaflet地图原理_动手撸一个地图引擎(三)

地图拖动实现原理相对比较简单,就是地图面板容器随着鼠标移动的过程;地图图层及其他要素监听移地图动事件,进行更新状态操作。例如地图移动过程中瓦片图层需要加载当前视图范围未加载的瓦片,需要销毁超出当前范围的瓦片。

1 Event事件类设计

     Event事件类通常会使用观察者设计模式,观察者模式定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。这种设计模式应用非常广泛,大家熟悉的Vue、leaflet、tomcat、Netty等等都有观察者模式的身影。js-event-bus是javascript开源的事件总线,大家可以拿来直接用,本文给大家简单写一个。

//事件类class Event{
        constructor() {
            this.listener = [];    }    //注册事件    on(type, fn, ctx) {
            this.listener.push({
                type,            fn,            ctx        });    }    //触发事件    fire(type, object) {
            this.listener.filter(item => {
                return item.type === type;        }).forEach(item => {
                let {
    type, fn, ctx} = item;            ctx = ctx || this;            fn && fn.call(ctx, object);        });    }}

2 让地图类、图层类继承Event

     使地图和图层等实例具有发布、订阅事件的能力,之后的几乎所有功能都离不开事件。鼠标拖动地图是触发move事件,瓦片、marker等图层及其他叠加物监听地图move事件,做出相应的更新。

//地图类class Map extends Event{
      ...}//图层类class Layer extends Event{
      ...  }

3 MouseHandler

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值