кнопка загрузки не загружает изображение в javascript - PullRequest
0 голосов
/ 09 января 2020

У меня есть холст html, в котором изображение отображается из базы данных, пользователь может добавить к изображению динамический c текст и загрузить это изображение с введенным текстом. Вот мой код:

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="style.css">




<div class="container">
  <div style="margin-top: 5%;" class="row">

    <?php
            require('db_config.php');
$id=$_GET['editid'];

            $sql = "SELECT * FROM image_gallery where id='$id'";
            $images = $mysqli->query($sql);


            while($image = $images->fetch_assoc()){


            ?>
      <div class="col-md-5"><canvas id="imageCanvas"></canvas></div>
      <div class="col-md-1"></div>



      <div style="margin-left: 2%;" class="col-md-5">


        <div class="modal-content">
          <div class="modal-header">
            <h4 class="something">
              <?php echo $image['title']; ?>
            </h4>
            <div class="modal-body">


              <form method="post" action="" id="form_name">
                <div class="row">
                  <div class="col-md-12">
                    <input class="lolan" type="text" id="name" placeholder="Full Name" required />
                    <!-- <label for="name" class="form__label">Full Name</label> -->
                  </div>
                  <div id="chumma" class="col-md-12">

                    <button id="download" type="submit" onclick="download_image()" name="button" value="Download" class="btn btn-primary">Download</button>

                  </div>
                </div>
              </form>



            </div>
          </div>
        </div>

      </div>

  </div>
</div>





<script type="text/javascript">
  var text_title = "Heading";

  var canvas = document.getElementById('imageCanvas');
  var ctx = canvas.getContext('2d');
  var img = new Image();
  // img.crossOrigin = "anonymous";

  window.addEventListener('load', DrawPlaceholder)

  function DrawPlaceholder() {
    img.onload = function() {
      DrawOverlay(img);
      DrawText(text_title);
      DynamicText(img)
    };
    img.src = 'uploads/<?php echo $image['
    image ']  ?>';

  }

  var canvas = document.getElementsByTagName('canvas')[0];
  canvas.width = 500;
  canvas.height = 500;


  function DrawOverlay(img) {

    ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height);


    ctx.fillStyle = 'rgba(230, 14, 14, 0)';
    ctx.fillRect(0, 0, canvas.width, canvas.height);
  }

  function DrawText(text) {
    ctx.fillStyle = "black";
    ctx.textBaseline = 'middle';
    ctx.font = "50px 'Montserrat'";
    ctx.fillText(text, 50, 50);
  }

  function DynamicText(img) {
    document.getElementById('name').addEventListener('keyup', function() {
      ctx.clearRect(0, 0, canvas.width, canvas.height);
      DrawOverlay(img);
      text_title = this.value;
      DrawText(text_title);
    });
  }


  function download_image() {
    var canvas = document.getElementById("mcanvas");
    image = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream");
    var link = document.createElement('a');
    link.download = "my-image.png";
    link.href = image;
    link.click();
  }
</script>


<?php } ?>

Теперь, когда я нажимаю кнопку загрузки, изображение не загружается. Может кто-нибудь, пожалуйста, скажите мне, что здесь не так, заранее спасибо

1 Ответ

1 голос
/ 09 января 2020

Когда вы размещаете кнопку внутри формы по умолчанию, событие щелчка на кнопке заставит форму отправить. Вы должны предотвратить это.

https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault

 document.getElementById('download').addEventListener('click', function(e){
      e.preventDefault();
      download_image()
 });

используйте это вместо использования onclick=download_image() пользовательских методов.

другое решение Как предотвратить обработку событий по умолчанию в методе onclick?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...