2013-06-17 4 views
0

Существует несколько вопросов, похожих на это, и я пробовал все предложения, но безуспешно.Анимированный прокрутка/показать скрытый элемент с помощью jQuery

У меня есть текстовая область и кнопка. Кнопка изначально скрыта, но когда пользователь вводит что-либо, кнопка отображается.

В дополнение к этому я хочу прокрутить страницу, чтобы кнопка стала видимой. Пример:

$(document).ready(function() { 

    $('#AddCommentEntryBox').on('keyup', function (e) { 
     if ($(this).val() !== '') { 
      $('#AddCommentButton').show(); 
      $(window).scrollTop($('#AddCommentButton').position().bottom); 
      //$("html, body").animate({ scrollTop: $(document).height() }, 1000); 
     } else { 
      $('#AddCommentButton').hide(); 
     } 
    }); 
}); 

http://jsfiddle.net/sJQcM/

EDIT: лучший пример - мне нужно прокрутить родительский элемент, а не страницы:

http://jsfiddle.net/sJQcM/3/

+0

К сожалению, вы не можете перейти к скрытому элементу. – Spokey

+0

Кнопка отображается перед прокруткой. Я получил его здесь: http://jsfiddle.net/sJQcM/4/. Этого достаточно, но он не будет работать, если кнопка не является нижним элементом. – Kev

ответ

3
$(document).ready(function() { 
    $('#AddCommentEntryBox').on('keyup', function (e) { 
     if ($(this).val() !== '') { 
      $('#AddCommentButton').show(); 
      $('html, body').stop().animate({scrollTop:$('#AddCommentButton').offset().top}) 
     } else { 
      $('#AddCommentButton').hide(); 
     } 
    }); 
}); 

FIDDLE

Вы можете хотите исключить backspace f это.

Возможно, ваш пример также сработал, причина этого не в том, что .position() дает только .top или .left. Нижняя часть не указана (вы должны сами ее вычислить).

Вы также можете использовать .animate() с scrollTop для плавной прокрутки. Кроме того, я рекомендую вам дождаться, когда пользователь перестанет печатать на несколько секунд перед прокруткой, иначе он будет прокручиваться вниз, а textarea будет отображаться только частично.

+0

Спасибо :) Зачем вы изменили позицию() на offset()? – Kev

+0

[как вы можете видеть здесь, в консоли] (http://jsfiddle.net/Spokey/sJQcM/2/) 'offset()' дает вам позицию 'element' пропорционально' window', в то время как 'position()' дает положение элемента в его родительском (немного другое, хотя здесь не так много, используйте то, что вам подходит) – Spokey

+0

Хм, это не совсем работает в моей ситуации. На моей странице тело имеет переполнение: скрытое. У меня есть элемент MainSection, который мне нужно прокрутить. Как минимум, мне нужно просто прокрутить родительский div до нижней. См. Править. – Kev

Смежные вопросы