una pantalla pagina nuestra mostrar modal mientras imagen hacer efecto div como cargar carga bootstrap javascript html5 canvas rotation

javascript - pantalla - preloader css3



Lienzo de HTML5: ¿Cómo hacer un spinner de carga girando la imagen en grados? (4)

Estoy haciendo un spinner de carga con lienzo html5. Tengo mi gráfico en el lienzo, pero cuando lo giro, la imagen gira fuera del lienzo. ¿Cómo le digo que haga girar el gráfico en su punto central?

<!DOCTYPE html> <html> <head> <title>Canvas test</title> <script type="text/javascript"> window.onload = function() { var drawingCanvas = document.getElementById(''myDrawing''); // Check the element is in the DOM and the browser supports canvas if(drawingCanvas && drawingCanvas.getContext) { // Initaliase a 2-dimensional drawing context var context = drawingCanvas.getContext(''2d''); //Load the image object in JS, then apply to canvas onload var myImage = new Image(); myImage.onload = function() { context.drawImage(myImage, 0, 0, 27, 27); } myImage.src = "img/loading.png"; context.rotate(45); } } </script> </head> <body> <canvas id="myDrawing" width="27" height="27"> </canvas> </body> </html>


Aquí está el ejemplo completo de trabajo :)

<!DOCTYPE html> <html> <head> <title>Canvas Cog</title> <script type="text/javascript"> var cog = new Image(); function init() { cog.src = ''data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAYAAACN1PRVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABK1JREFUeNqMVt1ZGzkUvVfS4IW1l8GO82w6IBXE7mCpAFMB+Pt4Z6iApALcAe4AU0HoAJfg7BPYHinnXmmciX+y0YdmJHnQ0bk/R5cvh5cUyFPwRD4EChgEvGWMB36R3+JaiTkmD5gOs8yNb25uLlerFf1pM2yIGA82TEY7xow1oj4GBU6S6yywPNG4JwDH+XGv0Whs7ndN8n97mmPsLCSYgy7ImPQE/pFDyAF+7L0fgTNFUDBcLal90taD1doQ/T6NT9DnW8zkT+jJuQVYukG3hifCVk/L3JOxMBa8VVlSp9MhHKLaB+zpNo1fdgEpmByuMqUAV5viOQLwXNax9KBAFNEEpN1pUwnQmvl6aTza6zNjrCKaymeyOdYAMgfg18iG4T/qw+AC94zvpzDjcwqOXo3VGH26H0xMZ7jPxgT0R2zUi4BYt6bAfEbJvJFZKA4ODgZ5nhcJLE9mk35X21vWC/TXKmiwr2xszoQd/PQv3t/QCzY2twpqBpb5FKOp+hCgzWaTWq0W1Xx0ij5An9WC5VtiLMwvNBrVaSGMvQk5jHQVPN7sb0HzAtE+QJrNgrcUNEARieWCut0ugR0tl8sKcJ5Ahc3jRviPK8ZGTaaBwGKyT+gTiwM4a3Jrba6MbeVXo5F4kp9shn29ndUYC9vLirGDXzRhrYhD8DME5Hkg22df5rDYS/RXmVIsaP/Q/SXs600YnifTjbeSWliEdTYb3QyTqYfdDKTL4B1KS6tVqf6SgGq3P9BvZGpvNIrPCgVKZlGlCDQDxJiCjVppCab05DJHzb+b1Gm36X80cVjLuzozexs0f6IgRkA5XRhzIixRL1+IzhwdHVHrn1Y9oXe1i10aKT6bGGhg1CKK+cT0zCGCs0oXTIogybJMw/779//o48duMvnO9rzLn+Kz8wgS5Shqo4njpCoOQA5Ajb8adHh4SMvVghaLhYb/HsBip88krNVISSEigOlhjmi0LziNhr6wOsgO9C1339vbGznnNAU2AM9Svk235cqKieKGkldAf7DGvTrjnjJnzyQoMu0ZTuZgUqvmlYR+f39XIE4uqCX1E/rDZpCYmKwOOmivAfYK9KF1AM7EdG4uAMLAOjmQideQXOJQkyUisqYiFRhtSFbxCxj8do0T30dmTvLhC+an0MZZVBHX09tBTG4qFigZEJEChjTIEwtRik81Qa7uOQU0IrYAe7FRjqYw6SlYjgAyN1GmHsFIGPfVnxzFuFITKEkfYK+oWZ5qKlIkcZ7UE92oXBmeIgIxtAO5UtSHqo9uiLW+sme5ejSIRASeAFR4LYy8MMzL1aq3EYWzJF28BgMEzGYpBkrMKelgl+P6uTcVY8NjLYyYPwMTCcufSaouH6al9xNJcjC82vDb9uVZKbrWIumNO+waVsu1TCC+Wxcg6xaSpsZSYM2wLO9/U8qZWH+wztQnsfAxV/E3MIKZVf1FsmJVV8mamhEmxZ0X7sSsABsGv1tZJGejmptU7FBUDYzPAXQBwFEEl+9+stFEroJEci2ELwIMmZuWoSTE9DYYcWVCjlJrZWMpeBhlAEqBiulPE84S3ixU5gSTwGGOdyEVNJXxA8nPevshwABHktBS1YoQ+QAAAABJRU5ErkJggg==''; // Set source path setInterval(draw,10); } var rotation = 0; function draw(){ var ctx = document.getElementById(''myCanvas'').getContext(''2d''); ctx.globalCompositeOperation = ''destination-over''; ctx.save(); ctx.clearRect(0,0,27,27); ctx.translate(13.5,13.5); // to get it in the origin rotation +=1; ctx.rotate(rotation*Math.PI/64); //rotate in origin ctx.translate(-13.5,-13.5); //put it back ctx.drawImage(cog,0,0); ctx.restore(); } init(); </script> </head> <body> <canvas width="27" height="27" id="myCanvas"></canvas> </body> </html>


Encuentro otra forma de hacer html loading spinner. Puede utilizar la animación de hoja de sprites. Este enfoque puede funcionar tanto con lienzo html5 como con html / javascript / css. Aquí hay una forma simple implementada por html / javascript / css.

Utiliza la imagen de la hoja de sprites como fondo. Crea un temporizador de Javascript para cambiar la posición de la imagen de fondo para controlar la animación de la hoja de sprites. El código de ejemplo está abajo. También puede consultar el resultado aquí: http://jmsliu.com/1769/html-ajax-loading-spinner.html

<html> <head><title></title></head> <body> <div class="spinner-bg"> <div id="spinner"></div> </div> <style> .spinner-bg { width:44px; height:41px; background: #000000; } #spinner { width: 44px; height: 41px; background:url(./preloadericon.png) no-repeat; } </style> <script> var currentbgx = 0; var circle = document.getElementById("spinner"); var circleTimer = setInterval(playAnimation, 100); function playAnimation() { if (circle != null) { circle.style.backgroundPosition = currentbgx + "px 0"; } currentbgx -= 44; //one frame width, there are 5 frame //start from 0, end at 176, it depends on the png frame length if (currentbgx < -176) { currentbgx = 0; } } </script> </body>


Para cualquier otra persona que esté buscando algo como esto, es posible que desee ver este script que hace exactamente lo que se solicitó originalmente: http://projects.nickstakenburg.com/spinners/

Puede encontrar la fuente de github aquí: https://github.com/staaky/spinners

Utiliza rotar, mientras mantiene un caché de rectángulos que se desvanecen lentamente, cuanto más viejos son.


rotate gira el lienzo (?) alrededor de su posición actual, que es 0, 0 para comenzar. necesita "moverse" al punto central deseado, lo cual puede lograr con

context.translate(x,y);

después de mover su punto de referencia, desea centrar su imagen sobre ese punto. puedes hacer esto llamando

context.drawImage(myImage, -(27/2), -(27/2), 27, 27);

Esto le indica al navegador que comience a dibujar la imagen desde arriba y hacia la izquierda de su punto de referencia actual, teniendo el tamaño de la imagen, mientras que antes de comenzar comenzaba en su punto de referencia y dibujaba completamente debajo y hacia la derecha (todas las direcciones son relativas a la rotación del lienzo).

Ya que su lienzo es el tamaño de su imagen, su llamada a translate usará la misma medida, (27/2), para las coordenadas x e y.

Entonces, para ponerlo todo junto

// initialization: context.translate(27/2, 27/2); // onload: context.rotate(Math.PI * 45 / 180); context.drawImage(myImage, -(27/2), -(27/2), 27, 27);

Editar: también, las unidades de rotación son radianes, por lo que deberá traducir los grados a radianes en su código.

Ediciones para reorganizar cosas.