Я использую jquery.flickr-1.0.js для поиска изображений в моем приложении на flickr. Проблема, с которой я столкнулся, заключается в том, что иногда для flickr требуется несколько секунд, чтобы ответить с результатами, и я хочу загрузить вращающийся gif вместо моей кнопки поиска 'btnRefresh', пока не будут возвращены результаты. Как я могу этого добиться?
jQuery(function(){
jQuery(".btnRefresh").livequery('click', function(){
var number = $(this).attr("id");
$('#gallery_flickr_'+number+'').show();
jQuery('#gallery_flickr_'+number+'').html("").flickr({
api_key: "XXXXXXXXXXXXXXXXXXXX",
per_page: 18,
search_text: $('input#flickr_search_'+number+'').val(),
id: $(this).attr("id")
});
});
});

Я не знаком с методом flickr (), о котором вы упоминали выше, но обычно подход к такого рода вещам заключается в том, что вы показываете gif перед вызовом, а затем скрываете его, когда вызов завершается. Не похоже, что приведенный выше код является асинхронным, поэтому мой подход заключался бы в размещении gif рядом с btnRefresh с идентификатором imgLoading. Сделайте первую строку чем-то вроде $ ('imgRefresh'). Hide (); В обработчике кликов оберните функцию с помощью
$('.imgLoading').show(); $('.btnRefresh').hide();
а также
$('.imgRefresh').hide(); $('.btnRefresh').show();
Это не самый изощренный подход, но вы знаете ... делайте это просто и тому подобное.
Проблема будет в том, что вы делаете для таймаутов, если это не асинхронно? Кнопка обновления может быть скрыта навсегда. Вы можете подумать об установке таймера, чтобы гарантировать, что пользователю будет представлено пригодное для использования состояние (и, если вы хотите придумать, сообщение о том, что сценарий, похоже, истекает по таймауту).
плагин flickr поддерживает свойство обратного вызова в своих параметрах. Итак, вы можете просто отобразить счетчик перед вызовом flickr, а затем скрыть его в обратном вызове.
jQuery(function(){
jQuery(".btnRefresh").livequery('click', function(){
$("#spinner").show();
var number = $(this).attr("id");
$('#gallery_flickr_'+number+'').show();
jQuery('#gallery_flickr_'+number+'').html("").flickr({
api_key: "XXXXXXXXXXXXXXXXXXXX",
per_page: 18,
search_text: $('input#flickr_search_'+number+'').val(),
id: $(this).attr("id"),
callback: function() {
$("#spinner").hide();
}
});
});
});
Это должно сделать это ... если у вас есть что-то на вашей странице, называемое счетчиком, которое по умолчанию скрыто.
Первый - Зайдите сюда и создайте вращающийся gif или png - http://ajaxload.info/
Второй - Сохраните счетчик в каталоге изображений - ./images/ajax-loader.gif
В третьих - добавьте один div в свой html, где счетчик будет расположен на странице, скажем
<div id = "spinner"></div>
Четвертый - добавьте две строки в существующий код.
jQuery(function(){
jQuery(".btnRefresh").livequery('click', function(){
var number = $(this).attr("id");
$('#gallery_flickr_'+number+'').show();
$("div#spinner").html("<img src='./images/ajax-loader.gif'>");
jQuery('#gallery_flickr_'+number+'').html("").flickr({
api_key: "XXXXXXXXXXXXXXXXXXXX",
per_page: 18,
search_text: $('input#flickr_search_'+number+'').val(),
id: $(this).attr("id")
});
$("div#spinner").html(" ");
});
});
Я нашел свойства api_callback и callback. Не могли бы вы подробнее рассказать, как я могу использовать их, чтобы скрыть их после обратного вызова? Я относительно новичок в использовании javascript и jquery. Спасибо