Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не работает метод slideDown (https://javascript.ru/forum/jquery/69859-ne-rabotaet-metod-slidedown.html)

Prolific 23.07.2017 12:57

Не работает метод slideDown
 
Yo! В чем может быть причина? код:
var remElem = $('#showMess_'+(i-maxMessCount)); 
console.log('messCount >= maxMessCount: ' + remElem.attr('id'));
remElem.slideUp(300, function() { 
  alert('a'); 
});
alert('b');

В console.log выводит верный ид remElem, но метод slideUp не работает. Так же вызывается alert('b'); Почему не работает slideDown?

j0hnik 24.07.2017 16:04

крайне желателен макет или минимально необходимый код для понимания, того что не так.

Prolific 24.07.2017 19:14

Вот моя функция:
var showMessage = (function() {
	var i = 0;
	var messCount = 0;
	var maxMessCount = 3;//Количество возможных отображаемых сообщения одновременно
	return function(type, msg, delay) {
		if(messCount >= maxMessCount) {
			var remElem = $('#showMess_'+(i-maxMessCount));
			remElem.slideUp(300, function() {
				alert('a');
				//console.log('End anim, remove: ' + remElem.attr('id'));
				//remElem.remove();
				//messCount = messCount > 0 ? messCount - 1 : 0;
			});
			remElem.remove();
			messCount = messCount > 0 ? messCount - 1 : 0;
		}

		$('.messageDiv').append('<div class="'+type.match(/\w+$/)+'" id="showMess_'+i+'" style="display: none;">'+msg+'</div>');
		messCount++;

		$('#showMess_'+i).slideDown(300, function(){
			$(this).delay(delay).slideUp(300, function(){
				if($(this).length) {
					$(this).remove();
					messCount = messCount > 0 ? messCount - 1 : 0;
				}
			});
		});
		i++;
		return false;
	}
})();

j0hnik 24.07.2017 23:11

а html где?

Белый шум 25.07.2017 05:51

Prolific,
у вас на этом элементе уже висит delay(), который и блокирует анимацию. Выходом может быть создание блока-обёртки чтобы вешать slideUp на разные элементы:

var showMessage = (function() {
    var i = 0;
    var messCount = 0;
    var maxMessCount = 3;//Количество возможных отображаемых сообщения одновременно
    return function(type, msg, delay) {
        if(messCount >= maxMessCount) {
            var remElem = $('#wrapper'+(i-maxMessCount));
            console.log('messCount >= maxMessCount: ', remElem);

            remElem.slideUp(300, function() {
                //alert('a');
                console.log('End anim, remove: ' + remElem.attr('id'));
                remElem.remove();
                //messCount = messCount > 0 ? messCount - 1 : 0;
            });
            //remElem.remove();
            messCount = messCount > 0 ? messCount - 1 : 0;
        }
 
        $('.messageDiv').append('<div id="wrapper'+i+'"><div class="'+type.match(/\w+$/)+'" id="showMess_'+i+'" style="display: none;">'+msg+'</div></div>');
        messCount++;
 
        $('#showMess_'+i).slideDown(300, function(){
            $(this).delay(delay).slideUp(300, function(){
                if($(this).length) {
                    $(this).parent().remove();
                    messCount = messCount > 0 ? messCount - 1 : 0;
                }
            });
        });
        i++;
        return false;
    }
})();

Prolific 25.07.2017 13:56

Спасибо огромное. Заработало. Не знал, что delay блокирует анимацию


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