В данный момент вы звоните $('#mainDiv').prop("scrollHeight")
, #mainDiv
скрыто с display: none;
. Такой элемент имеет scrollHeight
, равный 0.
Показать #mainDiv
, прежде чем пытаться прокрутить его:
$(document).ready(function() {
$('#openDiv').on('click', function() {
$('#openDiv').hide();
$('#closeDiv').show();
$("#mainDiv").show();
$("#mainDiv").animate({
scrollTop: $('#mainDiv').prop("scrollHeight")
}, 1000);
});
$('#closeDiv').on('click', function() {
$('#closeDiv').hide();
$("#mainDiv").hide();
$('#openDiv').show();
});
});
#mainDiv {
height: 150px;
background-color: #2A2A2A;
overflow-y: auto;
overflow-x: hidden;
display: none;
}
#divText {
color: #fff;
background-color: #555555;
height: 20px;
}
#divTextEnd {
color: #fff;
background-color: red;
height: 20px;
}
#openDiv {
background-color: green;
border: none;
color: #fff;
}
#closeDiv {
display: none;
background-color: red;
border: none;
color: #fff;
}
<button id="openDiv">Open div</button>
<button id="closeDiv">Close div</button>
<div id="mainDiv">
<div id="divText">
<h5>text</h5>
</div>
<div id="divText">
<h5>text</h5>
</div>
<div id="divText">
<h5>text</h5>
</div>
<div id="divText">
<h5>text</h5>
</div>
<div id="divTextEnd">
<h5>text</h5>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
Можно использовать DB Беркли PersistentMap
класс для сохранения Вашего (Serializable
) объекты в a Map
реализация (кэш), который сохраняет их в файл. Это довольно просто в использовании и означает, что Вы не должны волноваться о том, что сохранить где.
Три вещи отметить о сериализации:
Да, понятие, которое Вы ищете, называют сериализацией. Существует прекрасное учебное руководство в Sun здесь.
Идея состоит в том, что классы, которые Вы хотите сохранить, должны реализовать сериализуемый интерфейс. После этого Вы используете java.io. ObjectOutputStream.writeObject () для записи объекта в файл и java.io. ObjectInputStream.readObject () для чтения его назад.
Вы не можете сериализировать все, поскольку существуют вещи, которые не имеют смысла сериализировать, но можно работать вокруг них. Вот кавычка об этом:
Основной механизм сериализации Java прост в использовании, но существуют еще некоторые вещи знать. Как упомянуто прежде, только объекты, отмеченные сериализуемый, могут быть сохранены. java.lang. Класс объекта не реализует тот интерфейс. Поэтому не все объекты в Java могут быть сохранены автоматически. Хорошие новости - то, что большинство из них - как AWT и компоненты графического интерфейса пользователя Swing, строки и массивы - является сериализуемым.
С другой стороны, определенные классы системного уровня, такие как Поток, OutputStream и его подклассы и Сокет не являются сериализуемыми. Действительно, это не имело бы никакого смысла, если бы они были. Например, поток, работающий в моей JVM, использовал бы память моей системы. Сохранение его и попытка выполнить его в Вашей JVM не имели бы никакого смысла вообще. Другой важный момент о java.lang. Объект, которым не реализация сериализуемого интерфейса состоит в том, что любой класс Вы создаете, который расширяет только Объект (и никакие другие сериализуемые классы) не является сериализуемым, если Вы не реализуете интерфейс сами (как сделано с предыдущим примером).
Та ситуация представляет проблему: что, если у нас есть класс, который содержит экземпляр Потока? В этом случае мы можем когда-либо сохранять объекты того типа? Ответ да, пока мы говорим механизму сериализации наши намерения путем маркировки объекта Потока нашего класса как переходный процесс.
Можно хотеть проверить Эффективный Java для некоторых глюков относительно сериализации. Они обычно совершенствуются, но если этой функцией будет базовая часть Вашего приложения, то Вы захотите знать о них заранее.
В качестве примера можно привести проблемы безопасности, наследование и самое главное потенциал, чтобы публично 'заморозить' API с пониманием его (например, через версии программного обеспечения). Снова, они все совершенствуются и не должны удерживать Вас по сути.
Вы могли бы также хотеть рассмотреть использование кодирования XML, которое, кажется, мне имеет больше длительности, чем сериализация. Использовать java.beans.XMLEncoder/XMLDecoder
классы.
java.io. Объект [ввод/вывод], Поток является этими двумя классами, на которые необходимо посмотреть.
Любой класс Вы хотите сохраниться для регистрации потребностей реализовать java.io. Сериализуемый интерфейс.
Я не использовал его, но Google Code недавно выпустил protobuf.
Я согласен с мнением, что Протокол буферизует из Google - лучший способ хранить объекты, чем исходный способ сериализации. Посмотрите, и вам понравится.