Bir HTML5 tuval öğesinin içeriğinin dikey olarak kaydırılmasını uygulamak istiyorum. Tüm içeriği tekrar oluşturmak istemiyorum. Bunun yerine tüm içeriği aşağı/yukarı taşımak ve sadece görüntüye kaydırılan alanı oluşturmak istiyorum.HTML5 tuval öğesinin içindeki dikdörtgen (piksel) bölgeyi taşımanın en hızlı yolu nedir?
getImageData
ve putImageData
işlevlerini denedim, ancak testlerimde neredeyse tüm sahneyi yeniden boyamak kadar yavaşlar.
// scroll 20px down
var data = ctx.getImageData(0, 0, width, height-20);
ctx.putImageData(0, 20);
Tuval öğesinin içinde dikdörtgen piksel bölgelerini kopyalamanın en hızlı yolu nedir?
İyi bir fikir ama ne yazık ki tam boyutu önceden bilmiyorum ve kaydırma alanı potansiyel olarak binlerce piksel yüksekliğindedir, bu yüzden bunun benim için çalışacağını düşünmüyorum. –
Keşke başvurumda kaydırma yapmadan önce bu yaklaşımı biliyor olsaydım. Büyük bir gizli Canvas ve küçük bir viewport tuvaliyle çift tamponlamayı kullanıyorum. Sonra yeni görünen kısmı gizliden görüntü alanına kopyalarım. Çalışır, ama muhtemelen daha hızlı olabilirdi. Ve eğer görüntü binlerce piksel yüksekse, çözümüm işe yaramazdı. –
Ancak aşağıya doğru kaydırma yapabilmek için bir beklenti yoksa, son ekrana yeni bir "ekstra büyük" tuval üzerine yeniden boyayabilirsiniz. Ve herhangi bir zamanınız varsa (ileti akışında duraklama gibi), daha sonra hiç kimse fark etmeden yeniden çizebilir ve kırpabilirsiniz. Eski teknik gecikmeyi ortadan kaldırmaz, ancak kesinlikle daha az gerçekleşmesini sınırlar. –