Deseo implementar el desplazamiento vertical de los contenidos de un elemento canvas de HTML5. No quiero volver a mostrar todo el contenido. En cambio, me gustaría mover todo el contenido hacia abajo/arriba y solo mostrar el área, que se ha desplazado a la vista.Cuál es la forma más rápida de mover una región rectangular (píxel) dentro de un elemento de lienzo HTML5
Experimenté con las funciones getImageData
y putImageData
pero en mis pruebas son casi tan lentas como repintar toda la escena.
// scroll 20px down
var data = ctx.getImageData(0, 0, width, height-20);
ctx.putImageData(0, 20);
¿Cuál es la forma más rápida de copiar regiones de píxeles rectangulares dentro de un elemento de lienzo?
Buena idea, pero desafortunadamente no sé el tamaño exacto de antemano y el área de desplazamiento es potencialmente de miles de píxeles de altura, así que no creo que esto funcione para mí. –
Ojalá hubiera sabido de este enfoque antes de implementar el desplazamiento en mi aplicación. Uso doble buffering con un gran lienzo oculto y un pequeño lienzo de ventana gráfica. Luego copio la nueva porción visible desde el oculto a la ventana gráfica. Funciona, pero probablemente podría ser más rápido. Y si la imagen pudiera tener miles de píxeles de altura, mi solución no funcionaría. –
Pero si no hay ninguna expectativa de poder desplazarse hacia abajo, cuando llegue al final, puede volver a pintar la última pantalla en un nuevo lienzo "extra grande". Y si tiene algún tiempo de inactividad (como una pausa en el flujo de mensajes), puede volver a pintar y truncar sin que nadie se dé cuenta. La técnica anterior no elimina el retraso, pero sin duda lo limita a pasar mucho menos. –