vorrei caricare l'immagine di sfondo in questo modo
<style>
body{
background-image:url('mybackground');
background-repeat:no-repeat;
}
</style>
![Background](https://i.stack.imgur.com/I4hlZ.png)
Come l'immagine ha già caricato possiamo fare un po 'di JavaScript, senza il browser fare molto lavoro extra. possiamo controllare se l'altezza dell'immagine riempie l'intera finestra.
<script>
var el = $('body')[0];
var src = $(el).css('background-image').slice(4, -1);
var img = new Image();
checkHeight = function(){
if(img.height < window.innerHeight){
repeatBg();
}
}
img.onload = checkHeight();
img.src = src;
</script>
Se lo sfondo dell'immagine non riempie l'intera altezza della finestra allora questo sfondo ha bisogno di ripetere/lanciando immediatamente (questo aumenterà il tempo di caricamento); in caso contrario è possibile utilizzare gli ascoltatori di eventi per attivare il controllo in un secondo momento.
La seguente funzione disegna l'immagine sull'elemento canvas e crea un dataURL. L'immagine di sfondo src viene aggiornata al nuovo dataURL e lo sfondo di ripetizione viene modificato da non ripetizione a ripetizione-y (verticale);
i listener di eventi vengono rimossi quindi la funzione non viene richiamata.
<canvas style="display:none" id="canvas"></canvas>
<script>
repeatBg = function(){
var canvas = $('#canvas')[0];
var ctx = canvas.getContext("2d");
canvas.width = img.width;
canvas.height = img.height *2 ;
ctx.drawImage(img,0,0);
ctx.scale(1, -1);
ctx.translate(0, -img.height);
ctx.drawImage(img, 0, -img.height, img.width, img.height);
var dataURL = canvas.toDataURL();
$(el).css({
'background-image' : 'url('+dataURL+')',
'background-repeat' : 'repeat-y'
});
$(window).off('load, scroll, resize', checkHeight);
}
$(window).on('load, scroll, resize', checkHeight);
</script>
E oplà
![flipped](https://i.stack.imgur.com/B0cj0.png)
http://jsfiddle.net/dtjones1988/y49rvu73/6/
È possibile creare un'immagine fuori dall'originale e invertita e impostarli come sfondo con ripetizione –