use canvas instead of dom