2017-04-20 21 views
3

divに背景画像があります。単純な変換スケールのアニメーションを持つと、Google ChromeとOperaでちらつきが始まります。 は簡単なexmpleです:背景画像が縮尺されると、Chromeでちらつきが始まります。

http://codepen.io/anon/pen/bWpNYq

CSS:

body { 
    height: 100vh; 
    overflow: hidden 
} 

div { 
    width: 100%; 
    height: 100%; 
    background-color: #f00; 
    background-position: 50% 50%; 
    background-image: url(".....jpg"); 
    background-size: cover; 
} 

スクリプト:

TweenLite.set('div', { 
    backfaceVisibility: 'hidden', 
    perspective: 1000 
}); 
TweenLite.fromTo('div', 10, { 
    scale: 1.1 
}, { 
    scale: 1 
}); 

画像は、単純なimg要素、同じ規模のアニメーションが正常に動作しています。遷移は滑らかである:

http://codepen.io/anon/pen/pPyvdp

例は、アニメーションのためのGASPを使用します。より良い結果を得るためには、GSAPを使ってdivを拡大するソリューションが必要です。

背景イメージで滑らかにする方法はありますか?

答えて

2

これを試してみてください。 transition: all 1s linear;を追加すると、スムーズにスケールが調整されます。

body { 
    height: 100vh; 
    overflow: hidden 
} 

div { 
    width: 100%; 
    height: 100%; 
    background-position: 50% 50%; 
    background-image: url("https://smartslider3.com/wp-content/uploads/2015/10/slide52.jpg"); 
    background-size: cover; 
    transition: all 1s linear; 
} 
+0

私はGSAPアニメーションエンジンを使いたいです。 –

+0

これは実際にGSAPと組み合わせて機能します。 '1s'は過剰ですが、あなたの最初のデモで' transition:transform 0.1s linear 'を追加すると、私のために円滑になります。根本的な問題はおそらく、 'background-size:cover'が' div'の拡大縮小されたサイズに応じて画像が少しずつ異なるようにすることでしょう。トランジションを追加すると、これがスムーズになります。 –

0

多分あなたはこのCSSアニメーションを試すことができます。より良いブラウザのサポートのために、あなたの変換にネイティブトランジションを追加することができます

-webkit-animation 
-moz-animation 
-o-animation 

body { 
 
    height: 100vh; 
 
    overflow: hidden 
 
} 
 

 
div { 
 
    width: 100%; 
 
    height: 100%; 
 
    background-position: 50% 50%; 
 
    background-image: url("https://smartslider3.com/wp-content/uploads/2015/10/slide52.jpg"); 
 
    background-size: cover; 
 
    -webkit-animation: animate 5s forwards; 
 
animation: animate 5s forwards; 
 
} 
 

 
@-webkit-keyframes animate { 
 
    0% { transform: scale(1); } 
 
    100% { transform: scale(1.1); } 
 
} 
 

 
@keyframes animate { 
 
    0% { transform: scale(1); } 
 
    100% { transform: scale(1.1); } 
 
}
<div> 
 

 
</div>

0

CSS3を追加します。以下のコードを使用してみてください:

document.body.addEventListener('click', function(){ 
 
    var div = document.getElementById('img'); 
 
    div.style.transform = 'scale(.5)'; 
 
})
body { 
 
    height: 100vh; 
 
    overflow: hidden 
 
} 
 

 
div { 
 
    width: 100%; 
 
    height: 100%; 
 
    background-position: 50% 50%; 
 
    background-image: url("https://smartslider3.com/wp-content/uploads/2015/10/slide52.jpg"); 
 
    background-size: cover; 
 
    transition: transform 30s;  
 
}
<div id="img"></div>

これは、CSSプロパティ "トランジション" を使用し、身体のクリックで移行を開始します。

+0

しかし、GSAPはimgタグのときに同じ画像で動作しますが、背景画像をアニメーション化するのがなぜ難しいのでしょうか。 –

0

ちょうど良いCSSを使用してください。あなたのインスペクタを開くとtweenliteコードがdivのスタイル属性を非常に高速に設定/更新していることがわかります:transform: translate3d(0px, 0px, 0px) scale(1.00212, 1.00212);。 これは何かを計算してから、CSSに何をすべきかを伝える(非常に基本的な説明です)。 CSSはこれを独自の方法で行うことができます。なぜGSAPエンジンにこだわりたいのですか?

関連する問題