为了推迟加载背景图片,您需要创建一个样式表来处理加载任何带有url的文件的CSS属性,因为您不希望这些图像延迟首次内容绘制。例如:
FirstModal.module.less
这个文件包含了最重要的CSS属性,将首先被加载...
.styles {
&-container {
position: absolute;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
align-content: center;
justify-content: center;
align-items: center;
}
}
firstModalBackground.module.less
这个文件将在关键CSS加载后载入...
.styles {
&-container {
background: url('../../images/code/code.jpg') no-repeat center center fixed;
background-size: cover;
}
}
为了演示目的,在这里我将使用React.Component,但是,如果您想尝试优化代码,您也可以使用React.PureComponent(我已经测试过,一切正常)。
firstModal.jsx
const classNames = require('classnames');
const React = require('react)';
const {stylesContainer} = require('./firstModal.module.less');
class FirstModal extends React.Component {
constructor(props) {
super(props);
this.state = {
classNames: classNames([stylesContainer])
};
}
async componentDidMount() {
const backgroundImage = await import(
'./firstModalBackground.module.less'
);
this.setState({
classNames: [
classNames(this.state.classNames, [backgroundImage.stylesContainer]),
]
});
}
render() {
return <div className={this.state.classNames}>It werks!</div>;
}
}
module.exports = FirstModal;
如果您有一个加载速度更快的低分辨率图像,甚至可以采取进一步措施,例如在componentDidMount上实现“三步背景图像加载”:
async componentDidMount() {
const lowResolutionBackgroundImage = await import(
'../greeting-page/firstModalLowResBackground.module.less'
);
const baseClass = this.state.classNames;
this.setState({
classNames: [
classNames(baseclass,
lowResolutionBackgroundImage.stylesContainer),
]
});
const backgroundImage = await import(
'./firstModalBackground.module.less'
);
this.setState({
classNames: [
classNames(baseClass,
backgroundImage.stylesContainer),
]
});
}
background-image: url('image');
的CSS中应用lazyload。 - Jovylle