HTML5 new Image() 图像需要加载后才能drawImage? 怎样保证多个Image对象都加载完成?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTML5 new Image() 图像需要加载后才能drawImage? 怎样保证多个Image对象都加载完成?相关的知识,希望对你有一定的参考价值。

这个只能用回调函数实现,绑定load事件,可以研究下preloadjs这个库
http://www.createjs.com/Docs/PreloadJS/modules/PreloadJS.html
参考技术A 我是用img标记,让图片加载后事件onload回调。再将img内容画到Canvas中。 参考技术B 和规划办法个人体会不放过人挺好

异步图像加载和SEO

我正在研究中间人宝石以异步方式加载图像,效果与Medium相同。

一切都很完美,但关于搜索引擎优化,我不知道会发生什么。图片标签如下所示:<img src="BIG_IMAGE.jpg" data-compress="SMALL_IMAGE.jpg">。以下是脚本正在执行的操作:

  • 用data-compress替换SRC
  • 创建一个新的Image()并加载BIG_IMAGE
  • 加载BIG_IMAGE后,BIG_IMAGE将替换SMALL_IMAGE

你认为它是SEO友好的,也许更好的设置在div并加载SMALL_IMAGE作为背景或使用画布?

这里的脚本:

var AsyncImage = {
  init: function () {
    this.els = document.querySelectorAll("[data-compress]")
    this.engine()
  },
  engine: function () {
    for (var i = 0; i < this.els.length; i++) {
      var el = this.els[i]
      var d = el.src
      this.small(el)
      this.load(el, d)
    }
  },
  load: function (el, d) {
    var img = new Image()
    img.src = d
    img.onload = function () {
      el.src = img.src
      el.classList.add('async-large-loaded')
      el.classList.remove('async-small-loaded')
    }
  },
  small: function (el) {
    el.src = el.dataset.compress
    el.classList.add('async-small-loaded')
    delete el.dataset.compress
  }
}

AsyncImage.init()
答案

最后,我在网站管理员社区找到了我的问题的答案,但我认为在这里发布它会很有趣。

异步图像加载对排名没有实际影响。在src属性上设置默认图像(质量差),等待它异步加载HQ图像似乎没问题。

有一些技术修复不要忘记,比如为那些在浏览器上禁用JS的人设置noscript标签,然后在图像周围设置一个a标签,指向HQ图像路径,似乎对排名没有太大影响如果你排名的图像扔了一个aimg标签,但无论如何它需要以更好的方式排名。

所以在这里,更好的选择是获得如下代码:

<a href="BIG_IMAGE.jpg">
  <img src="BIG_IMAGE.jpg" data-compress="SMALL_IMAGE.jpg">
</a>

链接:https://webmasters.stackexchange.com/questions/61761/lazy-loading-images-and-effects-on-seo

编辑(02/01/2018):我通过在网站管理员控制台上设置域(没有特定配置)来测试SEO。一切都很好,HQ图像完美索引,而LQ图像则没有。

以上是关于HTML5 new Image() 图像需要加载后才能drawImage? 怎样保证多个Image对象都加载完成?的主要内容,如果未能解决你的问题,请参考以下文章

winform 如何加载Url图像(图像)

图片利用 new Image()预加载原理

加载 HTML5 视频时如何制作加载图像?

Flutter Widget - Image 图片

图像控制 ActualWidth 仅在第二次加载后才正确 - Image Cropper

[ javascript New Image() ] New Image() 对象讲解