Ответ 1
Я сделал следующий подход CSS:
<div class="holds-the-iframe"><iframe here></iframe></div>
.holds-the-iframe {
background:url(../images/loader.gif) center center no-repeat;
}
У меня есть iframe, который загружает сторонний веб-сайт, который очень медленно загружается.
Есть ли способ показать сообщение загрузки, в то время как iframe загружает пользователя, не видит большого пробела?
PS. Обратите внимание, что iframe предназначен для стороннего сайта, поэтому я не могу изменять/вводить что-либо на их странице.
Я сделал следующий подход CSS:
<div class="holds-the-iframe"><iframe here></iframe></div>
.holds-the-iframe {
background:url(../images/loader.gif) center center no-repeat;
}
Я думаю, что этот код поможет:
JS:
$('#foo').ready(function () {
$('#loadingMessage').css('display', 'none');
});
$('#foo').load(function () {
$('#loadingMessage').css('display', 'none');
});
HTML:
<iframe src="http://google.com/" id="foo"></iframe>
<div id="loadingMessage">Loading...</div>
CSS:
#loadingMessage {
width: 100%;
height: 100%;
z-index: 1000;
background: #ccc;
top: 0px;
left: 0px;
position: absolute;
}
Если это только заполнитель, которого вы пытаетесь достичь: сумасшедший подход заключается в том, чтобы вставлять текст в качестве svg-фона. Это допускает некоторую гибкость, и из того, что я читал, поддержка браузера должна быть довольно приличной (хотя я не проверял это):
HTML:
<iframe class="iframe-placeholder" src=""></iframe>
CSS:
.iframe-placeholder
{
background: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 100% 100%"><text fill="%23FF0000" x="50%" y="50%" font-family="\'Lucida Grande\', sans-serif" font-size="24" text-anchor="middle">PLACEHOLDER</text></svg>') 0px 0px no-repeat;
}
Что вы можете изменить?
Внутри фонового значения:
размер шрифта: ищите font-size = "" и измените значение на что угодно
Цвет шрифта: ищите заполнение = "". Не забудьте заменить # на% 23, если вы используете шестнадцатеричное обозначение цвета. % 23 обозначает кодировку URL-адреса #, которая необходима для возможности разбора svg-строки в FireFox.
семейство шрифтов: ищите font-family = "" не забывайте избегать одинарных кавычек, если у вас есть шрифт, состоящий из нескольких слов (например, с \'Lucida Grande \')
text: найдите значение элемента text-element, в котором вы видите строку PLACEHOLDER. Вы можете заменить строку PLACEHOLDER на все, что соответствует URL (специальные символы необходимо преобразовать в процентную запись)
Плюсы:
Минусы:
Я бы рекомендовал это только в том случае, если абсолютно необходимо отображать текст в качестве заполнителя в iframe, который требует немного гибкости (несколько языков,...). Просто найдите минутку и подумайте: действительно ли все это необходимо? Если бы у меня был выбор, я бы выбрал метод @Christina
$('iframe').load(function(){
$(".loading").remove();
alert("iframe is done loading")
}).show();
<iframe src="http://www.google.com" style="display:none;" width="600" height="300"/>
<div class="loading" style="width:600px;height:300px;">iframe loading</div>
Вот быстрое решение для большинства случаев:
CSS:
.iframe-loading {
background:url(/img/loading.gif) center center no-repeat;
}
Вы можете использовать анимированный GIF загрузки, если хотите,
HTML:
<div class="iframe-loading">
<iframe src="http://your_iframe_url_goes_here" onload="$('.iframe-loading').css('background-image', 'none');"></iframe>
</div>
Используя событие onload, вы можете удалить загрузочное изображение после загрузки исходной страницы внутри вашего iframe.
Если вы не используете jQuery, просто поместите идентификатор в div и замените эту часть кода:
$('.iframe-loading').css('background-image', 'none');
примерно так:
document.getElementById("myDivName").style.backgroundImage = "none";
Всего наилучшего!
Да, вы можете использовать прозрачный div, расположенный над областью iframe, с gif-загрузчиком в качестве только фона.
Затем вы можете прикрепить событие onload
к iframe:
$(document).ready(function() {
$("iframe#id").load(function() {
$("#loader-id").hide();
});
});
<!DOCTYPE html>
<html>
<head>
<title>jQuery Demo - IFRAME Loader</title>
<style>
#frameWrap {
position:relative;
height: 360px;
width: 640px;
border: 1px solid #777777;
background:#f0f0f0;
box-shadow:0px 0px 10px #777777;
}
#iframe1 {
height: 360px;
width: 640px;
margin:0;
padding:0;
border:0;
}
#loader1 {
position:absolute;
left:40%;
top:35%;
border-radius:20px;
padding:25px;
border:1px solid #777777;
background:#ffffff;
box-shadow:0px 0px 10px #777777;
}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</head>
<body>
<div id="frameWrap">
<img id="loader1" src="loading.gif" width="36" height="36" alt="loading gif"/>
<iframe id="iframe1" src="https://bots.actcorp.in/ACTAppChat/[email protected]&authToken=69d1afc8d06fb97bdb5a9275edbc53b375c3c7662c88b78239ba0cd8a940d59e" ></iframe>
</div>
<script>
$(document).ready(function () {
$('#iframe1').on('load', function () {
$('#loader1').hide();
});
});
</script>
</body>
</html>
Вы можете использовать как ниже
$('#showFrame').on("load", function () {
loader.hide();
});
Я придерживался следующего подхода
Во-первых, добавьте родного элемента
$('<div class="loading"></div>').insertBefore("#Iframe");
и затем, когда фрейм завершит загрузку
$("#Iframe").load(function(){
$(this).siblings(".loading-fetching-content").remove();
});