我正在寻找一种方法来在页面上的所有图像加载和渲染之后运行代码(不是中途但是完全)。
我发现窗口的DOMContentLoaded
事件应该是一个跨浏览器事件,用于在页面上加载和解析所有内容时,但我遇到桌面和移动设备上Safari的问题当图像没有被缓存时,它会过早地触发(几乎与onload
文档事件同时发生),但是当它们已经被缓存时按预期工作。
是否有跨浏览器方式来确保加载和呈现页面上的所有图像然后运行一些代码?
我也在考虑this关于class splitedTextView: UITextView, NSLayoutManagerDelegate {
override func awakeFromNib() {
self.layoutManager.delegate = self
}
override func draw(_ rect: CGRect) {
self.layoutManager.enumerateLineFragments(forGlyphRange: NSMakeRange(0, self.text.characters.count)) { (rect, usedRect, textContainer, glyphRange, Bool) in
let rectanglePath = UIBezierPath(rect: CGRect(x: usedRect.origin.x, y: usedRect.origin.y+3, width: usedRect.size.width, height: usedRect.size.height-4))
UIColor.black.setFill()
rectanglePath.fill()
}
}
func layoutManager(_ layoutManager: NSLayoutManager, lineSpacingAfterGlyphAt glyphIndex: Int, withProposedLineFragmentRect rect: CGRect) -> CGFloat {
return 15
}
}
窗口事件的评论,建议:
在某些浏览器中,它现在接管了document.onload的角色,并在DOM准备就绪时触发。
我不确定,如果它是相关的,但我也在文档here上的图像的JQuery加载事件中发现了这个警告:
与图像一起使用时加载事件的注意事项
开发人员尝试使用.load()解决的常见问题 快捷方式是在图像(或集合)时执行函数 图像)已完全加载。有几个已知的警告 这应该注意。这些是:
- 它不能始终如一地工作,也不能可靠地跨浏览器
- 如果图像src设置为与之前相同的src,它在WebKit中无法正确触发
- 它没有正确地冒泡DOM树
- 可以停止触发已存在于浏览器缓存中的图像