ScrollTop внутри DIV не работает в Firefox

У меня есть div (transcript_container), который содержит субтитры к воспроизведению аудио. Каждый субтитр синхронизирован со звуком.

Высота div 200px. Когда список субтитров длиннее 200 пикселей, текст автоматически прокручивается вверх, так что выделенный субтитр оказывается сверху и всегда виден в контейнере div. Это прекрасно работает во всех браузерах, кроме Firefox.

Это HTML:

<div style="display:table; margin-left:auto; margin-right:auto;">
<div style="display:table-row;">

 <div class="transcript_container" id="transcript_container">
   <div style="height:200px; overflow:-moz-scrollbars-vertical;"> (I had to add this div with the overflow for firefox otherwise the text wouldn't be contained in the div in firefox)
       Subtitles......
       ...............
   </div>
 </div>
</div>
</div>

Это CSS:

.transcript_container{
  display:table-cell;
  width: 500px;
  height:200px; 
  border: 1px solid #999;
  -webkit-border-radius: 5px 5px 5px 5px; 
  -moz-border-radius: 5px 5px 5px 5px; 
  border-radius: 5px 5px 5px 5px;
  text-align:left;
  color:#036;  
  margin-left:auto;
  margin-right:auto;
  overflow:scroll;
}

Это скрипт jQuery:

jQuery('.subtitle_highlight').each(function(){

   if (jQuery(this).offset().top - jQuery('#transcript_container').offset().top > 200){     

    jQuery('#transcript_container').animate({scrollTop: jQuery('#transcript_container').scrollTop() + 200 + 'px'}, 300);                            

    }
 });

Пример:

----------------------------------------DIV: Transcript_Container------
 subtitle 1
 subtitle 2
 subtitle 3
----------------------------------------------End of DIV---------------
 subtitle 4  (hidden area)
 subtitle 5
 subtitle 6

Когда субтитр 3 выделен, субтитр 4 прокручивается до верхней части DIV и становится видимым. Синхронизация продолжается с субтитрами 4, 5 и 6. В firefox субтитры 4 не перемещаются в верхнюю часть div, когда они выделены, а остаются скрытыми.

Как я могу сделать его совместимым с Firefox? Есть ли альтернатива ScrollTop, которая могла бы работать со всеми браузерами?


person user3716433    schedule 24.10.2015    source источник
comment
Что не так в Firefox? Можете ли вы также сделать jsfiddle, чтобы люди с Firefox, такие как я, могли протестировать его и посмотреть, как мы можем помочь   -  person Vinc199789    schedule 24.10.2015
comment
К сожалению, я думаю, что это слишком сложно воспроизвести в jsfiddle, потому что есть аудиофайл, субтитры и длинный скрипт для их синхронизации.   -  person user3716433    schedule 24.10.2015
comment
Можете ли вы тогда объяснить, что происходит в Firefox? возможно, вы можете добавить скриншот к вашему вопросу   -  person Vinc199789    schedule 24.10.2015
comment
Конечно. Во время воспроизведения звука каждый субтитр выделяется. Когда последний видимый субтитр внизу div (transcript_container) выделен, весь текст должен прокручиваться вверх, чтобы следующий субтитр (который был скрыт) поднимался вверх div, и синхронизация продолжалась. Это хорошо работает во всех браузерах, кроме firefox. Новые субтитры под видимой областью не прокручиваются вверх и остаются скрытыми.   -  person user3716433    schedule 24.10.2015
comment
Я отредактировал свой пост с примером   -  person user3716433    schedule 24.10.2015
comment
У меня есть несколько предложений, не уверен, что они работают, но вы можете попробовать. 1) измените все Jquery на $ 2) Поместите вычисление прокрутки в переменную и обратитесь к переменной в вашей анимации. 3) удалите «px», который вы добавляете в конце вашего расчета. 4) Должна ли прокрутка не быть отрицательной? так что получается - 200 вместо +200.   -  person Vinc199789    schedule 24.10.2015
comment
Я пробовал все это, но это не сработало. Как будто Firefox вообще не распознал инструкцию ScrollTop.   -  person user3716433    schedule 24.10.2015
comment
попробуйте изменить jQuery('#transcript_container').scrollTop() + 200 + 'px' на `200 + 'px'`   -  person Vinc199789    schedule 25.10.2015
comment
Вы можете посмотреть здесь: stackoverflow.com/questions/ 17776544/   -  person Vinc199789    schedule 26.10.2015
comment
Большое спасибо за вашу ссылку. К сожалению, я уже нашел этот пост, но у меня он не сработал, потому что и («тело»), и («окно») производят прокрутку всей страницы, а не только содержимого моего DIV.   -  person user3716433    schedule 27.10.2015
comment
и что теперь, если вы поместите свой код в готовую функцию ('body') или ('window')   -  person Vinc199789    schedule 27.10.2015
comment
Только что попробовал, но это тоже не сработало :( Я не знаю, что еще делать, и я не могу найти альтернативу ScrollTop().   -  person user3716433    schedule 27.10.2015
comment
Чем использовать css. Что теперь, если вы анимируете div, вам нужно было добавить специально для firefox. Дайте этому div с этим идентификатором id="transcript_container" padding-top из 0 по умолчанию. Если вы хотите переместить субтитры, дайте padding-top значение `‹0'   -  person Vinc199789    schedule 27.10.2015
comment
Как заставить код работать только в firefox? Есть ли способ проверить, какой браузер использует пользователь в jQuery?   -  person user3716433    schedule 27.10.2015
comment
Посмотрите здесь: learn.jquery.com/code-organization/feature -обнаружение-браузера   -  person Vinc199789    schedule 27.10.2015
comment
К сожалению, я не мог заставить его работать. У кого-нибудь есть такая же проблема или может помочь мне найти решение? Огромное спасибо !   -  person user3716433    schedule 26.11.2015
comment
Так что никто не может помочь мне понять, почему этот код, который отлично работает во всех браузерах (включая Firefox для iOS), не работает в Firefox для настольных компьютеров?   -  person user3716433    schedule 20.12.2015