html2canvas 截屏 SuperMap(内涵一个可移动的自定义图例)

1.页面布局

<div id="can">
    <a-button type="primary" @click="dl()">下载</a-button>
    <!--地图-->
    <div id="map"></div>
    <!--自定义的图例 图例数据需要自己获取,rgb颜色格式为#ffffff,也可切换成自定义图标-->
    <div class="tuli" id="tl">
      <h1 style="font-size: 20px">图例</h1>
      <span v-for="(tl,index) in tldata">
          <button class = "tlimg" :style="{backgroundColor: tl.rgb}"  />
            <!--<img  alt class="tlimg" />-->
          {{tl.name}}
          <br />
        </span>
    </div>
</div>

2.前置条件

在加载地图时候,需要设置  crossOrigin: 'anonymous'  ,不设置这个属性在截图时只会加载空白地图。

source: new TileSuperMapRest({
            crossOrigin: 'anonymous',
            url: this.baseUrl,
            wrapX: true
          })

html2canvas 安装vue插件  npm install --save html2canvas

import html2canvas from 'html2canvas';

3.下载方法

//下载地图
    dl() {

      var ca = document.getElementById('can');
      html2canvas(ca,{
        useCORS: true,  //允许跨域 因为截图内存在地图 必须为true
        async: false,  
        allowTaint: false,  //是否允许污染画布 必须为false 污染的画布无法进行额外操作
        taintTest: true,

      }).then((canvas) => {
        //下载的文件类别
        var type = 'png'
        //上方allowTaint为true时,toDataURL会报错
        var imgData = canvas.toDataURL(type)
        var _fixType = function (type) {
          type = type.toLowerCase().replace(/jpg/i, 'jpeg')
          var r = type.match(/png|jpeg|bmp|gif/)[0]
          return 'image/' + r
        }
        // 加工image data,替换mime type
        imgData = imgData.replace(_fixType(type), 'image/octet-stream')
        /**
         * 在本地进行文件保存
         * @param  {String} data     要保存到本地的图片数据
         * @param  {String} filename 文件名
         */
        var saveFile = function (data, filename) {
          var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a')
          save_link.href = data
          save_link.download = filename

          var event = document.createEvent('MouseEvents')
          event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
          save_link.dispatchEvent(event)
        }

        // 下载后的文件名
        var filename = new Date().getTime() + '.' + type
        // download
        saveFile(imgData, filename)
      })

    }

4.自定义图例样式

.tlimg {
  width: 20px;
  height: 20px;
  /* border-radius:50%; */
  border: none;
}
//图例初始位置依据实际情况调整
.tuli {
  position: absolute;
  /* bottom:-240px; */
  top: 53%;
  right: 40px;
  width: 187px;
  padding-left: 10px;
  /*height:380px;*/
  border: 2px solid #e2e3e4;
}

5.图例控件拖动

//拖动图例div
    tuodong(){
      //获取元素
      var tl = document.getElementById('tl');
      var x = 0;
      var y = 0;
      var l = 0;
      var t = 0;
      var isDown = false;
      //鼠标按下事件
      tl.onmousedown = function(e) {
        //获取x坐标和y坐标
        x = e.clientX;
        y = e.clientY;

        //获取左部和顶部的偏移量
        l = tl.offsetLeft;
        t = tl.offsetTop;
        //开关打开
        isDown = true;
        //设置样式
        tl.style.cursor = 'move';
      }
      //鼠标移动
      window.onmousemove = function(e) {
        if (isDown == false) {
          return;
        }
        //获取x和y
        var nx = e.clientX;
        var ny = e.clientY;
        //计算移动后的左偏移量和顶部的偏移量
        var nl = nx - (x - l);
        var nt = ny - (y - t);

        tl.style.left = nl + 'px';
        tl.style.top = nt + 'px';
      }
      //鼠标抬起事件
      tl.onmouseup = function() {
        //开关关闭
        isDown = false;
        tl.style.cursor = 'default';
      }
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值