<small id='PKwWA'></small><noframes id='PKwWA'>

    <tfoot id='PKwWA'></tfoot>
    1. <i id='PKwWA'><tr id='PKwWA'><dt id='PKwWA'><q id='PKwWA'><span id='PKwWA'><b id='PKwWA'><form id='PKwWA'><ins id='PKwWA'></ins><ul id='PKwWA'></ul><sub id='PKwWA'></sub></form><legend id='PKwWA'></legend><bdo id='PKwWA'><pre id='PKwWA'><center id='PKwWA'></center></pre></bdo></b><th id='PKwWA'></th></span></q></dt></tr></i><div id='PKwWA'><tfoot id='PKwWA'></tfoot><dl id='PKwWA'><fieldset id='PKwWA'></fieldset></dl></div>
      • <bdo id='PKwWA'></bdo><ul id='PKwWA'></ul>

        <legend id='PKwWA'><style id='PKwWA'><dir id='PKwWA'><q id='PKwWA'></q></dir></style></legend>

        html2canvas 捕获除内部画布内容之外的所有内容

        时间:2023-08-09

        <small id='Vd9GD'></small><noframes id='Vd9GD'>

          <tbody id='Vd9GD'></tbody>
        <legend id='Vd9GD'><style id='Vd9GD'><dir id='Vd9GD'><q id='Vd9GD'></q></dir></style></legend>

        <tfoot id='Vd9GD'></tfoot>

          • <bdo id='Vd9GD'></bdo><ul id='Vd9GD'></ul>

            1. <i id='Vd9GD'><tr id='Vd9GD'><dt id='Vd9GD'><q id='Vd9GD'><span id='Vd9GD'><b id='Vd9GD'><form id='Vd9GD'><ins id='Vd9GD'></ins><ul id='Vd9GD'></ul><sub id='Vd9GD'></sub></form><legend id='Vd9GD'></legend><bdo id='Vd9GD'><pre id='Vd9GD'><center id='Vd9GD'></center></pre></bdo></b><th id='Vd9GD'></th></span></q></dt></tr></i><div id='Vd9GD'><tfoot id='Vd9GD'></tfoot><dl id='Vd9GD'><fieldset id='Vd9GD'></fieldset></dl></div>

                  本文介绍了html2canvas 捕获除内部画布内容之外的所有内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我有一张通过leaflet 渲染的地图.

                  I've got a map rendered by means of leaflet.

                  我需要使用 html2canvas 对该地图进行截图.

                  I need to make a screenshot of that map by using html2canvas.

                  要使用html2canvas,我需要提供一个要捕获的DOM 元素(elementToCapture)和一个可选配置(​​html2canvasConfiguration).

                  To make use of html2canvas, I need to provide a DOM element to capture (elementToCapture) and an optional configuration (html2canvasConfiguration).

                  var html2canvasConfiguration = {
                      useCORS: true,
                      width: map._size.x,
                      height: map._size.y,
                      backgroundColor: null,
                      logging: true,
                      imageTimeout: 0
                  };
                  
                  var elementToCapture = map._container.getElementsByClassName('leaflet-pane leaflet-map-pane')[0];
                  html2canvas(elementToCapture, html2canvasConfiguration).then(function (canvas) {
                      var link = document.createElement('a');
                      link.download = 'test.png';
                      link.href = canvas.toDataURL();
                      link.click();
                      link.remove();
                  })
                  

                  我通过 leaflet-pane leaflet-map-pane 类提取了一个元素,它基本上代表了整个地图,包括控件(放大/缩小按钮、比例等)、自定义标记、工具提示、叠加层、弹出窗口.

                  I extract an element by the leaflet-pane leaflet-map-pane class, which basically represents the whole map including controls (zoom in/out buttons, scale, etc), custom markers, tooltips, overlays, popups.

                  整个 DOM 看起来像

                  The entire DOM looks like

                  <div class="leaflet-pane leaflet-map-pane">
                      <div class="leaflet-pane leaflet-tile-pane">
                          <div class="leaflet-gl-layer mapboxgl-map">
                              <div class="mapboxgl-canvas-container">
                                  <canvas class="mapboxgl-canvas leaflet-image-layer leaflet-zoom-animated"></canvas>
                              </div>
                              <div class="mapboxgl-control-container"></div>
                          </div>
                      </div>
                      <div class="leaflet-pane leaflet-shadow-pane"></div>
                      <div class="leaflet-pane leaflet-overlay-pane"></div>
                      <div class="leaflet-pane leaflet-marker-pane"></div>
                      <div class="leaflet-pane leaflet-tooltip-pane"></div>
                      <div class="leaflet-pane leaflet-popup-pane"></div>
                  <div class="leaflet-control-container"></div>
                  

                  我遇到的问题是 leaflet-pane leaflet-tile-pane 元素(尤其是内部 canvas 的内容)没有被 <捕获代码>html2canvas.简而言之,我在地图上看到的所有内容,但我看不到地图本身.

                  The problem I've faced is the leaflet-pane leaflet-tile-pane element (particularly the content of the inner canvas) doesn't get captured by html2canvas. To put it simply, I see everything on the map, but I don't see the map itself.

                  更新 1:

                  我目前使用的版本是1.0.0-rc.1(最新的).

                  The version I am currently using is 1.0.0-rc.1 (the latest one).

                  更新 2:

                  画布的本质是webgl.可能是问题吗?根据 this,他们确实支持 webgl 画布.

                  The nature of the canvas is webgl. Might it be the issue? According to this, they do support webgl canvases.

                  更新 3:

                  我尝试以编程方式获取画布并在其上调用 toDataURL.即使使用 preserveDrawingBuffer hack,它也会导致屏幕截图为空.

                  I tried to obtain the canvas programmatically and call toDataURL on it. It resulted in an empty screenshot, even with the preserveDrawingBuffer hack.

                  更新 4:

                  奇怪的是,它不仅仅捕捉某些画布.我创建了一个 2d 画布(通过将 preferCanvas 添加到地图配置)并显示出来了.

                  Oddly enough, it doesn't capture only certain canvases. I've created a 2d canvas (by adding preferCanvas to map configuration) and it got shown.

                  推荐答案

                  试试这个,将它添加到页面顶部,在任何其他脚本之前

                  Try this, add this to the top of your page, before any other scripts

                  <script>
                  HTMLCanvasElement.prototype.getContext = function(origFn) {
                    return function(type, attribs) {
                      attribs = attribs || {};
                      attribs.preserveDrawingBuffer = true;
                      return origFn.call(this, type, attribs);
                    };
                  }(HTMLCanvasElement.prototype.getContext);
                  </script>
                  

                  有帮助吗?

                  这篇关于html2canvas 捕获除内部画布内容之外的所有内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:传单:不要在双击时触发点击事件功能 下一篇:仅当缩放级别&gt;时,才在闪亮的传单地图中显

                  相关文章

                  最新文章

                  <small id='8RpUJ'></small><noframes id='8RpUJ'>

                  1. <i id='8RpUJ'><tr id='8RpUJ'><dt id='8RpUJ'><q id='8RpUJ'><span id='8RpUJ'><b id='8RpUJ'><form id='8RpUJ'><ins id='8RpUJ'></ins><ul id='8RpUJ'></ul><sub id='8RpUJ'></sub></form><legend id='8RpUJ'></legend><bdo id='8RpUJ'><pre id='8RpUJ'><center id='8RpUJ'></center></pre></bdo></b><th id='8RpUJ'></th></span></q></dt></tr></i><div id='8RpUJ'><tfoot id='8RpUJ'></tfoot><dl id='8RpUJ'><fieldset id='8RpUJ'></fieldset></dl></div>

                    1. <legend id='8RpUJ'><style id='8RpUJ'><dir id='8RpUJ'><q id='8RpUJ'></q></dir></style></legend>
                      • <bdo id='8RpUJ'></bdo><ul id='8RpUJ'></ul>
                    2. <tfoot id='8RpUJ'></tfoot>