2017-02-03 25 views
0

enter image description hereВычислить новую верхнее смещение нового добавленного DIV после закрытия старых дивов

Пользователей могут добавлять блоки в такой форме, поэтому мне нужно, чтобы прокрутить новый добавленный блок в поле зрения, и это правильно работает, но я попытался закрыть старым блоки, такие как открытые (блок 2, блок 3), затем прокрутите до (Block 4) верхнее смещение, но оно не работает.

После добавления нового блока я закрою старые открытые блоки и перейду к новому.

Поэтому мне нужно рассчитать новое верхнее смещение нового div (блок 4) ПОСЛЕ закрытия старых divs (блок 2, блок 3), затем прокрутите до нового смещения.

Следующий код работает только в том случае, если старые блоки сохранили свое старое состояние.

var curBlockOffsetTop = $(#divID).offset().top; 

$('html, body').animate({ 
    scrollTop: curBlockOffsetTop - 40 
}, 1000); 

ответ

0

Как блокируются старые блоки? В вашем вопросе недостаточно деталей.

Похоже, что происходит то, что curBlockOffsetTop считывает высоту перед закрытием блоков, а затем, когда анимация прокрутки срабатывает, она прокручивается в неправильное место. Попробуйте использовать setTimeout для задержки выполнения прокрутки, пока все не будет закрыто, если это так.

Это будет выглядеть следующим образом:

/**closing old blocks code goes here**/ 

var delayInMiliseconds = 1200; 

setTimeout(function(){ 

/**scrolling code goes here**/ 

}, delayInMiliseconds); 
+0

Я изменил вопрос, спасибо –

+0

я до сих пор считаю, что это происходит потому, что события не выполняются в том порядке, вы хотите их. Вы пытались использовать setTimeout, как я предложил? –

+0

Я тестирую его, но он не работает –

0

Как насчет вместо прокрутки на новый блок, вы перечисляете до конца последнего блока?

Я не знаю, как ваша разметка, но скажу, что-то вроде этого:

<div class="block-1"></div> 
<div class="block-2"></div> 
<div class="block-3"></div> 
<div class="block-4"> 
    New Block that was just added 
</div> 

<script> 
    newPosish = $(".block-3").offset().top $(".block-3").height() + 40 // where block-4 should be added 
    window.scrollTo(0,newPosish) 
</script> 
+0

Это динамические блоки, и каждый блок имеет свою собственную высоту –

+0

Ответ отредактирован .. правильно, высота также должна быть добавлена ​​ – Sammy

+0

Большое спасибо за ваш ответ, но если (Блок 2) (как показано на рисунке), верхнее смещение (Блок 3) будет принято перед свертыванием двух блоков (Блок 2, Блок 3), так что это та же проблема. Он вычисляет старое смещение не новое после свертывания –