簡體   English   中英

CSS 不透明度過渡不適用於 Safari

[英]CSS opacity transition won't work for Safari

我正在嘗試實現某種懶惰的背景圖像加載。 我希望圖像在加載后立即淡入。 因此,我在加載時更改了保持 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;
.h-image-holder {
    background-repeat: no-repeat;
    background-position: center;
    background-size: cover;
    will-change: opacity, transform;
    pointer-events: none;
    opacity: 0;
    width: 100%;
    height: 100%;
    transition: opacity .6s ease;
    -webkit-transition: opacity .6s ease;
}

.h-image-wrapper {
    position: relative;
    width: 100%;
    height: 100%;
    will-change: transform;
    pointer-events: none;
}

.h-image-loaded {
    opacity: 1;
}

也許這會有所幫助。 Safari CSS Visual Effects Guide上說你必須使用這個:

-webkit-transition-property: opacity;

您還可以更改它的持續時間:

-webkit-transition-duration: 2s;"

注意到這里

注意:並非所有 CSS 屬性都可以設置動畫。 一般來說,任何接受數字、長度、百分比或顏色值的 CSS 屬性都是可動畫的。 一些接受離散值的 CSS 屬性也可以設置動畫,但在更改時顯示值之間的跳轉而不是平滑過渡,例如可見性屬性。

Safari CSS 參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM