JQuery colorbox: как я могу предотвратить появление маленького окна индикатора загрузки до того, как будет отображаться основной цветной контент?
Я использую jQuery colorbox для загрузки формы входа (через ajax). Однако эта маленькая маленькая коробка появляется на несколько секунд, затем она исчезает в фактическом содержимом, которое я хочу загрузить. Поэтому, наблюдая несколько примеров colorbox на веб-сайте, я несколько уверен, что маленькая коробка должна быть коробкой предварительной загрузки. Есть ли способ отключить этот ящик от полного появления?
Я пробовал глупые вещи, такие как настройка CSS и установка display: none
для всех загружаемых элементов, но это не работает.
![enter image description here]()
Я хочу избежать хаков CSS и решить эту проблему, изменив javascript. В идеале, какой-то способ для окна загрузки никогда не появляться, поскольку я не буду использовать colorbox для чего-либо, что требуется много времени для загрузки.
Воссоздал проблему на jsfiddle, используя измененный javascript и CSS. Содержимое ajax не будет загружаться там, но появляется маленькая коробка, которую я хочу избавиться. http://jsfiddle.net/hPEXf/
Спасибо заранее!
Ответы
Ответ 1
Как @op1ekun сказал, что ColorBox
имеет два события, которые полезны в вашей ситуации.
onOpen
→ Обратный вызов, который срабатывает прямо перед тем, как ColorBox начинает открываться.
onComplete
→ Отображается обратный вызов, который запускается сразу после загрузки содержимого.
Кажется, просто просто скрывать лайтбокс, используя display:none
или $("#colorbox").hide()
, не работает. поэтому я использовал opacity
, чтобы скрыть лайтбокс во время загрузки содержимого. Я установил jsfiddle, обратив ваше внимание на http://jsfiddle.net/fDd6v/2/, которые демонстрируют это в действии. Вот код, который был использован:
$(function(){
$("#awesome-link").colorbox({
onOpen: function(){
$("#colorbox").css("opacity", 0);
},
onComplete: function(){
$("#colorbox").css("opacity", 1);
}
});
});
Ответ 2
Я изменил следующее в CSS -
#colorbox{border: 1px solid #ebebeb;}
#cboxContent{background:#fff; overflow:hidden;padding: 20px;}
для этого -
#colorbox{border: 0px solid #ebebeb;}
#cboxContent{background:#fff; overflow:hidden;padding: 0px; margin: 0px;}
И окно скрыто, пока оно не расширится, чтобы показать содержимое. Я не уверен, что это будет пагубно для вашего общего стиля. Вы должны иметь возможность манипулировать краем формы, чтобы вы получили вокруг нее пустое пространство.
http://jsfiddle.net/hPEXf/1/
Ответ 3
Я работал с ColorBox несколько дней назад, поэтому считаю, что я достаточно свежую в этой теме. Считаете ли вы использование встроенных обратных вызовов?
В частности onOpen
и onComplete
?
Если мы пойдем с дополнением, упомянутым Jay, вы можете установить дополнение на 0
в onOpen
и вернуть его в нужное значение в onComplete
.
Кажется, это чистое решение.
Ответ 4
Я работал с
$(function(){
$("#awesome-link").colorbox({
onOpen: function(){
$("#colorbox").css("opacity", 0);
},
onComplete: function(){
$("#colorbox").css("opacity", 1);
}
});
});
Но он превращается в черное fade, затем откройте color-box
, когда я работаю с transition:"fade"
свойствами colorbox.
Теперь я меняю свой код на jquery.colorbox.js
комментарий или удалить приведенный ниже код в colorbox js
файле
/*var initialWidth = setSize(settings.get('initialWidth'), 'x');
var initialHeight = setSize(settings.get('initialHeight'), 'y');
var maxWidth = settings.get('maxWidth');
var maxHeight = settings.get('maxHeight');
settings.w = (maxWidth !== false ? Math.min(initialWidth, setSize(maxWidth, 'x')) : initialWidth) - loadedWidth - interfaceWidth;
settings.h = (maxHeight !== false ? Math.min(initialHeight, setSize(maxHeight, 'y')) : initialHeight) - loadedHeight - interfaceHeight;
$loaded.css({width:'', height:settings.h});
*/
/*$loadingOverlay = $([$tag(div, "LoadingOverlay")[0],$tag(div,"LoadingGraphic")[0]]); */
$slideshow = $tag('button', "Slideshow")/*,
$loadingOverlay*/
/* clearTimeout(loadingTimer);
$loadingOverlay.hide();*/
/* loadingTimer = setTimeout(function () {
$loadingOverlay.show();
}, 100);*/
И измените приведенный ниже код
overlay.css({
opacity: opacity === opacity ? opacity : '',
cursor: settings.get('overlayClose') ? 'pointer' : '',
visibility: 'visible'
}).show(500);
Для
setTimeout(function(){
$overlay.css({
opacity: opacity === opacity ? opacity : '',
cursor: settings.get('overlayClose') ? 'pointer' : '',
visibility: 'visible'
}).fadeIn(500);
}, 600);
и теперь он работает плавно.