如何用Vue+openlayer批量添加gif动图

如何用Vue+openlayer批量添加gif动图

近期开发的一个功能是如何在openlayer中添加动图,项目中使用vector图层做图片撒点功能,发现加载gif没有效果。网上查找资料发现,openlayers不支持gif图片样式。后面采用overlay的方式,gif图片赋值给DOM元素

  1. 先添加一个标签,用v-for遍历数据以动态生成数个div
// An highlighted block
    <div v-for="(n, index) in gifgroup" :id="index" class="mymarker"><img class="mymarker-img" src="/image/map/walk_front.gif" /><div class="mymarker-name">{{ n.name }}</div></div>

2 .编写添加overlayer,以及使用Overlay的element属性绑定一个

标签,下面是使用参数x坐标、Y坐标以及构成id的序号来添加gif到地图上,这里是通过id来寻找overlayer进行删除,所以id是使用顺序码的方式添加,

// An highlighted block
  addGif(x, y, n) {
    console.log(document.getElementById(n))
    const ov = new Overlay({
      id: "overlay" + n,
      position: [x, y],
      element: document.getElementById(n),
      offset: [0, 0],
    });
    this.map.addOverlay(ov);
  }
  removeGif(gifnumber) {
    for (i = 0; i <= gifnumber; i++) {
      var oid = "overlay" + i
      this.map.getOverlayById(oid).setPosition(undefined)
      this.map.getOverlayById(oid) == null
    }
  }

注意:删除overlayer的方法有很多种,这里使用的是方法二,以为我后面还有使用这个div反复添加
移除overlay有很多方法,这里尝试过的都列在下面

1、删除overlay图层

#这种方式会把overlay以及其指向的DOM都删除,对于再要新增overlay到这个DOM就会有问题(如点击弹窗)

map.removeOverlay(_overlay);

2、删除map中所有overlay图层,原理同1

map.getOverlays().clear();
3、推荐,这种方式会保留dom,但要记得在下次新增同类时删除,否则会生成好多dom造成冗余残留

overlay.setPosition(undefined);

overlay = null;
3.在JavaScript中调用,gifgroup是用来存储数组顺序的数组,v-for是遍历的gifgroup里面的数据,每添加一个overlayer就gifgroup+1,用来设置顺序id,

          this.gifgroup.push({
            name: item.user.userName,
          });
          this.$nextTick(() => {
            debugger;
            console.log(document.getElementById("1"));
            this.map.addGif(Number(po[0]), Number(po[1]), this.gifnumber);
            this.gifnumber = this.gifnumber + 1;
            //  this.gifgroup.push(this.gifnumber)
            debugger;
          });

4删除,通过上面的removegif 方法获得id进行遍历删除,然后再将gifnumber赋值成0,不影响下次添加overlayer

// An highlighted block
    deleteStafOverlayer() {
      debugger;
      this.map.removeGif(this.gifnumber - 1);
      this.gifnumber = 0;
    },

最后生成结果,这里只截取了一个overlayer

在这里插入图片描述


版权声明:本文为weixin_45174000原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。