Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Индикатор загрузки изображений (https://javascript.ru/forum/css-html/29896-indikator-zagruzki-izobrazhenijj.html)

Ingiborn 16.07.2012 04:41

Индикатор загрузки изображений
 
Здравствуйте..
Помогите разобраться, как реализовать, чтобы при загрузке сайта за место пустых блоков(пока не загрузилось изображения)показывался индикатор в формате gif(картинка)?
Буду очень благодарен..

devote 16.07.2012 05:24

<!DOCTYPE html>
<html>
	<head>
		<style>
			html, body {
				padding: 0;
				margin: 0;
			}
		</style>
		<script type="text/javascript">

function DOMReady( callback ) {

    if ( document.readyState === "complete" ) {
        return setTimeout( callback, 1 );
    }

    var loaded = function( doScroll ) {
        if ( document.removeEventListener ) {
            document.removeEventListener( 'DOMContentLoaded', loaded, false );
            window.removeEventListener( 'load', loaded, false );
            loaded = null;
            callback();
        } else if ( document.detachEvent ) {
            if ( document.readyState === "complete" || doScroll === null ) {
                document.detachEvent( 'onreadystatechange', loaded );
                window.detachEvent( 'onload', loaded );
                loaded = null;
                callback();
            }
        }
    }

    if ( document.addEventListener ) {
        document.addEventListener( "DOMContentLoaded", loaded, false );
        window.addEventListener( "load", loaded, false );
    } else if ( document.attachEvent ) {
        document.attachEvent( "onreadystatechange", loaded );
        window.attachEvent( "onload", loaded );
  
        var toplevel = false;
        try {
            toplevel = window.frameElement == null;
        } catch( _e_ ) {}
  
        if ( document.documentElement.doScroll && toplevel ) {
            var check = function() {
                if ( !loaded ) return;
                try {
                    document.documentElement.doScroll( "left" );
                } catch( _e_ ) {
                    setTimeout( check, 0 );
                    return;
                }
                loaded( null );
            }
            check();
        }
    }
}

DOMReady( function(){

	var imageScope = [],
		imgs = document.getElementsByTagName( 'img' ),
		bgdiv = document.createElement( 'DIV' ),
		div = document.createElement( 'DIV' );

	if ( imgs.length > 0 ) {

		bgdiv.style.cssText = "position: fixed; width: 100%; height: 100%; background-color: #000;"+
			"opacity: 0.3; filter: Alpha(opacity=30);";

		div.style.cssText = "position: fixed; padding: 20px; width: 100px; height: 20px; left: 50%; top: 50%;"+
			"margin: -30px 0 0 -70px; background-color: #fff; border: 1px solid #eaeaea; border-radius: 8px;"+
			"opacity: 0.7; filter: Alpha(opacity=70); box-shadow: 2px 2px 4px #000; font: 20px Arial; color: #f00;";

		div.innerHTML = 'Loading...';

		document.body.insertBefore( div, document.body.firstChild );
		document.body.insertBefore( bgdiv, document.body.firstChild );

		for( var i = 0; i < imgs.length; i++ ) {

			imageScope.push(1);

			var img = new Image();
			img.onload = img.onerror = function() {
				imageScope.pop();
				if ( imageScope.length == 0 ) {
					bgdiv.parentNode.removeChild( bgdiv );
					div.parentNode.removeChild( div );
				}
			}
		    img.src = imgs[ i ].src;
		}
	}

});

		</script>
	</head>
	<body>
		<img src="http://worldoftanks.ru/dcont/fb/media/batchat_ru_june_clear/1920x1200.jpg">
		<img id="img" src="http://wallpaper.goodfon.ru/image/302908-2880x1800.jpg"/>
	</body>
</html>

Aetae 16.07.2012 08:10

..а можно просто назначить в css
img{background:transparent url(loading.gif) 50% 50% no-repeat}
.)

Ingiborn 16.07.2012 11:58

а если у меня пнг изображения на прозрачном фоне?
css не подойдёт..
Спасибо devote, опробую, расскажу..

Deff 16.07.2012 12:05

Цитата:

Сообщение от Ingiborn
а если у меня пнг изображения на прозрачном фоне?
css не подойдёт..

Да наплевать - обрамляете в <span style="inline-block" - прописываете у span бекграунд(gif-картинкой) на время загрузки

Ingiborn 16.07.2012 12:12

Немножко неправильно..
Мне надо, чтобы такой индикатор был над каждым загружаемым изображением, а не один индикатор по центру с текстом Loading...:)

Deff 16.07.2012 12:32

Ingiborn,
:) Какие сложности одеть в span каждое ? Именно это и подразумевал

Ingiborn 16.07.2012 12:35

Непойму как=)

Deff 16.07.2012 13:34

http://javascript.ru/forum/css-html/...tml#post176659

Раед 16.07.2012 18:29

devote,
Смысл новый img создавать? Не проще на старый события повесить?


Часовой пояс GMT +3, время: 16:32.