html – 图像调整大小导致滚动速度慢

前端之家收集整理的这篇文章主要介绍了html – 图像调整大小导致滚动速度慢前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在加载大图,让浏览器调整大小。我明确地设置大小。
<img src="http://example.com/image1.jpg" width="240" height="360"/>

页面上有许多这样的图像。滚动非常慢,波涛汹涌。当滚动时,Chrome中的事件时间线看起来像这样:

Paint

* Image decode (JPEG)
* Image resize (non-cached)
* Image decode (JPEG)
* Image resize (non-cached)
* ...

Paint

* Image resize (cached)
* Image resize (cached)
* Image resize (cached)
* Image resize (cached)

Paint

* Image decode (JPEG)
* Image resize (non-cached)
* Image decode (JPEG)
* Image resize (non-cached)
* ....

Paint

* Image resize (non-cached)
* Image resize (non-cached)
* Image resize (non-cached)
* Image resize (non-cached)

Paint

* Image decode (JPEG)
* Image resize (cached)
* Image decode (JPEG)
* Image resize (cached)
* ...

等等

我不知道为什么一些Paint事件包括图像解码,而其他的没有,而且为什么有​​时调整大小是有缓存的,有时它不是。我想这必须与进入视图端口的新图像有关。

有没有什么可以做的,以确保在页面加载时,我只需支付每张图像的图像调整费用一次,并避免图像在滚动期间调整大小?

(当然,我理解最好的解决方案是通过加载已经具有适当大小的图像来避免浏览器调整大小,在这种情况下这是不实际的。)

解决方法

功能将允许您仅将一次图像调整大小,将其替换为按照所需比例调整大小的新图像:
function resizeImage(image,maxWidth,maxHeight) {

  // Output scale is the minimum of the two possible scales
  var scale = Math.min((maxWidth / image.width),(maxHeight / image.height))

  // Output canvas
  var outputCanvas = document.createElement('canvas')
  outputCanvas.width = image.width * scale
  outputCanvas.height = image.height * scale

  // Draw image content in output canvas
  var outputContext = outputCanvas.getContext('2d')
  outputContext.drawImage(image,parseInt(image.width * scale),parseInt(image.height * scale))

  // Replace image source
  image.src = outputCanvas.toDataURL()
}

它将您传递的图像作为图像参数,并创建一个画布,调整图像大小,然后使用toDataURL()将image.src属性设置为输出画布的内容

您调整大小的图像必须位于RELATIVE路径中(是的,它不是很酷),否则由于CORS而导致安全性错误,如果不满足。

但是您可以将base64数据作为src属性传递,并且可以使用AJAX轻松实现。

猜你在找的HTML相关文章