2016-10-05 10 views
3

キャンバスを使用してイメージをレンダリングしています。この奇妙なグラフィックのバグが表示されることがあります。このバグは、スクロールするとすぐに消えます。Chromeの奇妙なキャンバスレンダリングのバグ

これは、反応成分の一部である、you can see the code for it here.

enter image description here

スクロールやレンダリング処理における何らかの更新をトリガした後、それが見えるそれが必要として:

enter image description here

これは私のイメージのCSSの外観です:

.async-image { 
    position: relative; 
    z-index: 1; 
    background: black; 
    overflow: hidden; 
    transform: translateZ(0) 
} 

.async-image canvas { 
    pointer-events: none; 
    opacity: 0; 
    transform: translateZ(0) 
} 

.async-image .preload { 
    position: absolute; 
    transform: scale(1.2); 
} 

.async-image .preload.ready { 
    opacity: 1; 
} 

.async-image .src { 
    position: absolute; 
    transform: scale(1.1); 
} 

.async-image .src.ready { 
    opacity: 1; 
    transform: scale(1); 
} 

.async-image img { 
    opacity: 0; 
} 

何が原因か分かりませんが、メインキャンバスの上に下にあるキャンバスがあり、プリローダーとしてソース画像の10x10のぼかし画像を表示するために使用されています。準備ができたら、画像が少し拡大されます。

このバグは、別のタブに切り替えてから戻ったときに発生するようです。

+1

画像の上に何度もレンダリングしているように見えます。おそらく、レンダリングの前に 'ctx.beginPath()'を呼び出すことを忘れるかもしれません。あるいは、レンダリングする前にキャンバスをクリアしないでください。しかし、コードがなければ、何が間違っているかを推測することしかできません。 – Blindman67

+0

それは真実ではありません。私はそれを一度レンダリングしています。イメージは実際には反応コンポーネントであり、マウント時およびソースが変更されたときにのみレンダリングされます。そして、私はキャンバスをもう一度レンダリングする前にキャンバスをクリアしています。それでも、スクロールで消えている問題をどのように説明していますか? –

+0

ウェブサイトへのリンクを送信してチェックアウトすることはできますか? – divix

答えて

1

は申し訳ありませんが、それはタブを切り替えるに発生したことを読んでいない...

document.addEventListener('visibilitychange', function(){ 
    // Add code to re render the canvas or repaint... 
    // You can even try using window.scrollBy(0, 1); here ;P 
}) 

これはで非集束タブに支出リソースを防ぐために起きているかもしれません...

を私の古い答えを削除しましたクロム...

あなたたいが...ウェブアニメーションのための重要な絵画やFPSメーターなどを...点検し、このようなクロムのdevのツールでそれを有効に知っていれば...

この問題と、(遅いレンダリングについて)あなたがにリンクされている1を見てみると...

+0

これは修正よりもハックです。タブを切り替えることによって発生しますが、常に発生することはありません。時にはアプリをナビゲートしている間に発生することもあります。私は真剣にそれが私のコードと何かを持っていることを疑う、私は画像と何かを行うスクロールイベントを聞くコードがないと思う。 –

+0

RAMやCPUリソースを節約するために、OSやChrome自体によって引き起こされることがあるかもしれません...リンゴOSesではより積極的に起こります。そのため、手動でページをレンダリングする必要があります。 – shramee

+0

スクロールするだけで、クロムの再ペイントがトリガーされます...(可視要素の再レンダリング) – shramee

1

を助けInspecting rendering in chrome

希望、私は代替としてCSSフィルタを試してみました。ブラウザのサポートはpretty goodです。本当に広いブラウザサポートが必要な場合は、you can use SVG filters