javascript CSS不透明过渡不适用于Safari

llew8vvj  于 5个月前  发布在  Java
关注(0)|答案(2)|浏览(81)

我正在尝试实现某种延迟的背景图像加载。我希望图像在加载后立即淡入。因此,我在加载时更改了holding div的不透明度。**它适用于Chrome或Firefox,但不知何故不适用于Safari。**使用Safari时,图像只是显示,没有任何过渡。为什么呢?

import React, {Component} from 'react';

import './ImageHolder.css'

class LazyImage extends Component {

    state = {
        src: null,
    };

    componentDidUpdate(prevProps, prevState, snapshot) {

        if (prevProps.image !== this.props.image) {
            this.setState({src: null});
            this.loadImage();
        }
    }

    componentDidMount() {
        this.loadImage();
    }

    loadImage = () => {
        const src = this.props.image;

        const imageLoader = new Image();
        imageLoader.src = src;

        imageLoader.onload = () => {
            this.setState({src: src})
        };
    };

    classList = (classes) => {
        return Object
            .entries(classes)
            .filter(entry => entry[1])
            .map(entry => entry[0])
            .join(' ');
    };

    render() {
        const style = {
            backgroundImage: 'url(' + this.state.src + ')',
        };

        return(
            <div className="h-image-wrapper" style={{backgroundColor: this.props.bgColor}}>
                <div className={this.classList({
                    'h-image-holder': true,
                    'h-image-loaded': this.state.src,
                })} style={style} />
            </div>
        );
    }
}

export default LazyImage;

个字符

vs91vp4v

vs91vp4v1#

也许这可以帮助。在Safari CSS Visual Effects Guide上说你必须使用这个:

-webkit-transition-property: opacity;

字符串
您也可以更改它的持续时间:

-webkit-transition-duration: 2s;


以及缓和功能:

-webkit-transition-timing-function: ease;

jjhzyzn0

jjhzyzn02#

注:here
注意事项:并不是所有的CSS属性都是可设置动画的。一般来说,任何接受数字、长度、百分比或颜色值的CSS属性都是可设置动画的。一些接受离散值的CSS属性也可以设置动画,但在更改时显示值之间的跳转,而不是平滑的过渡,例如visibility属性。
Safari CSS参考

相关问题