jQuery 延期在 chrome 和 safari 上不起作用

jQuery deferred not working on chrome and safari?

本文关键字:safari 不起作用 chrome jQuery      更新时间:2023-09-26

我想在画布标签上drawImage,然后再次保存。我使用jQuery的deferred.done()

这是我使用的代码:

function save_submit() {
    LoadDraw().done(function(){
      var canvas = document.getElementById('touchpaint');
      var ctx = canvas.getContext('2d');
      var image = canvas.toDataURL();
    });
var LoadDraw = function () {
    var r = $.Deferred();
    var canvas = document.getElementById('touchpaint');
    var ctx = canvas.getContext('2d');
    var imageLoader = 'http://img262.imageshack.us/img262/3453/gokum.jpg';
    var img = new Image();
    $(img).load(function (){
      ctx.globalCompositeOperation = "destination-over";
      ctx.drawImage(img,0,0);
    });
    img.crossOrigin = '';
    img.src = imageLoader;    
    r.resolve();
    return r;
  }

它在火狐浏览器上运行良好。但不适用于Chrome和Safari。我正在寻求帮助。谢谢。

好吧,您没有正确使用延迟。延迟对象的想法是在某种回调函数中解决它,而不是在创建它之后"直接"解决它。

在您的情况下,您可能应该解析 $(img).load 回调函数中的延迟 (r):

var LoadDraw = function () {
    var r = $.Deferred();
    var canvas = document.getElementById('touchpaint');
    var ctx = canvas.getContext('2d');
    var imageLoader = 'http://img262.imageshack.us/img262/3453/gokum.jpg';
    var img = new Image();
    $(img).load(function (){
      ctx.globalCompositeOperation = "destination-over";
      ctx.drawImage(img,0,0);
      r.resolve();
    });
    img.crossOrigin = '';
    img.src = imageLoader;    
    return r;
  }