|
|
|
| Всем привет. Уже долбаных 2 часа пытаюсь разгадать загадку, но все никак. Данный пример работает в 2-х разделах. В первом работает на ура, во втором через раз. Разделы идентичны по хтмл, джаваскрипт и пхп коду, есть лишь одна разница в запросе - для первого раздела условие содержит ....='produce', а второе ....='service'. В общем перейдем к коду.
1. При загрузке странице я назначаю ф-цию селекту
window.onload = function () {
document.getElementById('sel_category').onchange = function (){
ref_vg(this.value);
}
}
|
2. Сама ф-ция
function ref_vg(num){
var i = $('#hid_info').val();
var h = $('#hid_hash').val();
$('#arrow_left,#arrow_center,#arrow_right').animate({'opacity':0},function(){
$('#preloader,#preloader_txt').css('display','block');
});
$.post('/requests/refresh_vg.php',{'n':num,'i':i,'h':h},function(data){
if(data != 'Hacking attempt!'){
if(data.length > 0){
$('#box_reload').empty().append(data);
$('#preloader,#preloader_txt').css('display','none');
$('#arrow_left,#arrow_center,#arrow_right').animate({'opacity':1});
}
}
});
}
|
#preloader{
position:absolute;
top:40px;
left:30px;
width:32px;
height:24px;
background:url(/images/sliderload.gif) no-repeat;
display:none;
}
#preloader_txt{
position:absolute;
top:43px;
left:77px;
font-size:13px;
color:#999999;
font-weight:bold;
display:none;
}
|
Работает так:
- выбираем из селекта категорию и сразу же у нас плавно скрывается #arrow_left,#arrow_center,#arrow_right
- после появляется #preloader,#preloader_txt
- полученные данные загружаются в блок #box_reload
- после загрузки скрываются #preloader,#preloader_txt и плавно появляется #arrow_left,#arrow_center,#arrow_right
Здесь одно но. Не всегда скрывается #preloader,#preloader_txt. В чем глюк я не пойму.
В списке допустим такие данные:
И вот когда я выбираю 3 - #preloader,#preloader_txt появляется и потом скрывается, выбираю 4 - #preloader,#preloader_txt появляется и потом, то скрывается, то не скрывается, т. е. display:none не назначается для #preloader,#preloader_txt. Пробовал выбирать другие данные из списка, то не со всеми такое происходит.
Самое главное, когда я попросил проверить знакомого, то у него все окей в ФФ и Опере, проверялось на 3-х компах. А у меня как на зло в ФФ, Опере (11, 9.25, 9.64), Хроме, всех ИЕ такой глюк :(
Жду с нетерпением Ваших идей, в чем может быть проблема.
П.С. Просил еще одного знакомого, то у него такие же глюки прослеживаются :( | |
|
|
|
|
|
|
|
для: TetRiska
(13.05.2011 в 17:36)
| | firefox+firebug
проверяйте что у вас приход в ответ на запрос.
+ если анимация не успеет проиграться /ответ придет раньше/ у вас нарушиться логика
$('#arrow_left,#arrow_center,#arrow_right').stop().animate({}) | |
|
|
|
|
|
|
|
для: AlexSol
(13.05.2011 в 20:40)
| | с этим я и работаю firefox+firebug
получается, что после получения данных прелоадеру display:none не всегда успевает назначится, через раз то скрывает, то нет....почему такая реакция я не знаю.
в ответ на запрос приходят всегда нужные данные.
куда это прописать и зачем?
$('#arrow_left,#arrow_center,#arrow_right').stop().animate({})
|
я бы мог дать Вас доступ на сайт, чтобы посмотрели своими глазами на проблему, но это уже ближе к вечеру | |
|
|
|
|
|
|
|
для: TetRiska
(14.05.2011 в 11:58)
| | передел любым animate останавливайте.
вы меняете прозрачность 0-> и 1->0 для одних и тех же элементов.
и если ответ от сервера приходит раньше завершения анимации возможен сбой. | |
|
|
|
|
|
|
|
для: AlexSol
(14.05.2011 в 12:04)
| | тобишь если идет анимация #arrow_left,#arrow_center,#arrow_right и показ прелоадера и в этот момент мы получили данные, то скрытие прелоадера display:none может не произойти? но самое интересное, что анимация после получения данных срабатывает в любом случае
если верно понял, то нужно так исправить ф-цию
function ref_vg(num){
var i = $('#hid_info').val();
var h = $('#hid_hash').val();
$('#arrow_left,#arrow_center,#arrow_right').animate({'opacity':0},function(){
$('#preloader,#preloader_txt').css('display','block');
});
$.post('/requests/refresh_vg.php',{'n':num,'i':i,'h':h},function(data){
if(data != 'Hacking attempt!'){
if(data.length > 0){
$('#box_reload').empty().append(data);
$('#arrow_left,#arrow_center,#arrow_right').stop().animate();
//останавливаем анимацию на случай вдруг получили данные раньше ее завершения, чтобы следующие условие display:none сработало
$('#preloader,#preloader_txt').css('display','none');
$('#arrow_left,#arrow_center,#arrow_right').animate({'opacity':1});
}
}
});
}
|
а можно поступить следующим образом:
function ref_vg(num){
var i = $('#hid_info').val();
var h = $('#hid_hash').val();
$('#arrow_left,#arrow_center,#arrow_right').animate({'opacity':0},function(){
$('#preloader,#preloader_txt').css('display','block');
$.post('/requests/refresh_vg.php',{'n':num,'i':i,'h':h},function(data){
if(data != 'Hacking attempt!'){
if(data.length > 0){
$('#box_reload').empty().append(data);
$('#preloader,#preloader_txt').css('display','none');
$('#arrow_left,#arrow_center,#arrow_right').animate({'opacity':1});
}
}
});
});
}
|
единственное что режет глаз, что запрос отправится после отработки анимации | |
|
|
|
|